{"id":307469,"date":"2026-05-15T07:34:06","date_gmt":"2026-05-15T07:34:06","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/seo-agent-helper\/"},"modified":"2026-08-24T21:32:26","modified_gmt":"2026-08-24T21:32:26","slug":"seoagentio-helper","status":"publish","type":"plugin","link":"https:\/\/ug.wordpress.org\/plugins\/seoagentio-helper\/","author":23491403,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"5.55","stable_tag":"5.55","tested":"7.0.4","requires":"5.6","requires_php":"7.2","requires_plugins":null,"header_name":"SEO Agent IO - Auto Publisher","header_author":"SEO Agent","header_description":"Connect your WordPress site to SEO Agent (seo-agent.io) - an AI-powered SEO platform that automatically researches keywords, writes optimized articles, and publishes them to your blog. Requires an active SEO Agent account.","assets_banners_color":"0b0f1b","last_updated":"2026-08-24 21:32:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/seo-agent.io\/wordpress-plugin","header_author_uri":"https:\/\/seo-agent.io","rating":0,"author_block_rating":0,"active_installs":10,"downloads":1430,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"4.84":{"tag":"4.84","author":"seoagentio","date":"2026-05-15 07:43:44"},"4.85":{"tag":"4.85","author":"seoagentio","date":"2026-05-15 14:51:29"},"4.86":{"tag":"4.86","author":"seoagentio","date":"2026-05-15 15:07:21"},"4.87":{"tag":"4.87","author":"seoagentio","date":"2026-05-15 15:19:48"},"4.88":{"tag":"4.88","author":"seoagentio","date":"2026-05-15 15:31:32"},"4.92":{"tag":"4.92","author":"seoagentio","date":"2026-05-16 17:50:07"},"4.96":{"tag":"4.96","author":"seoagentio","date":"2026-05-17 11:33:56"},"4.97":{"tag":"4.97","author":"seoagentio","date":"2026-05-18 08:48:17"},"4.99":{"tag":"4.99","author":"seoagentio","date":"2026-05-18 15:08:30"},"5.00":{"tag":"5.00","author":"seoagentio","date":"2026-05-18 15:08:30"},"5.04":{"tag":"5.04","author":"seoagentio","date":"2026-05-28 06:01:05"},"5.06":{"tag":"5.06","author":"seoagentio","date":"2026-05-28 07:24:15"},"5.07":{"tag":"5.07","author":"seoagentio","date":"2026-05-28 07:50:14"},"5.08":{"tag":"5.08","author":"seoagentio","date":"2026-05-28 08:10:40"},"5.09":{"tag":"5.09","author":"seoagentio","date":"2026-05-28 08:42:41"},"5.10":{"tag":"5.10","author":"seoagentio","date":"2026-05-28 08:51:04"},"5.11":{"tag":"5.11","author":"seoagentio","date":"2026-05-28 09:16:49"},"5.13":{"tag":"5.13","author":"seoagentio","date":"2026-05-28 10:07:01"},"5.14":{"tag":"5.14","author":"seoagentio","date":"2026-05-28 12:10:34"},"5.16":{"tag":"5.16","author":"seoagentio","date":"2026-05-28 12:52:06"},"5.17":{"tag":"5.17","author":"seoagentio","date":"2026-05-28 13:26:58"},"5.18":{"tag":"5.18","author":"seoagentio","date":"2026-05-28 13:45:59"},"5.19":{"tag":"5.19","author":"seoagentio","date":"2026-07-19 10:09:03"},"5.20":{"tag":"5.20","author":"seoagentio","date":"2026-07-22 16:20:55"},"5.21":{"tag":"5.21","author":"seoagentio","date":"2026-07-23 12:31:41"},"5.22":{"tag":"5.22","author":"seoagentio","date":"2026-07-23 13:44:39"},"5.23":{"tag":"5.23","author":"seoagentio","date":"2026-07-26 10:51:22"},"5.24":{"tag":"5.24","author":"seoagentio","date":"2026-07-26 11:02:47"},"5.25":{"tag":"5.25","author":"seoagentio","date":"2026-07-26 11:22:19"},"5.26":{"tag":"5.26","author":"seoagentio","date":"2026-07-26 12:11:54"},"5.27":{"tag":"5.27","author":"seoagentio","date":"2026-07-26 12:21:18"},"5.28":{"tag":"5.28","author":"seoagentio","date":"2026-07-26 12:26:23"},"5.29":{"tag":"5.29","author":"seoagentio","date":"2026-07-26 13:03:00"},"5.30":{"tag":"5.30","author":"seoagentio","date":"2026-07-26 13:38:14"},"5.31":{"tag":"5.31","author":"seoagentio","date":"2026-07-26 20:38:08"},"5.32":{"tag":"5.32","author":"seoagentio","date":"2026-07-28 18:35:27"},"5.33":{"tag":"5.33","author":"seoagentio","date":"2026-07-31 15:55:17"},"5.34":{"tag":"5.34","author":"seoagentio","date":"2026-08-05 06:44:01"},"5.35":{"tag":"5.35","author":"seoagentio","date":"2026-08-05 08:59:10"},"5.36":{"tag":"5.36","author":"seoagentio","date":"2026-08-05 10:53:18"},"5.37":{"tag":"5.37","author":"seoagentio","date":"2026-08-09 10:11:25"},"5.39":{"tag":"5.39","author":"seoagentio","date":"2026-08-16 09:35:52"},"5.40":{"tag":"5.40","author":"seoagentio","date":"2026-08-17 09:23:26"},"5.41":{"tag":"5.41","author":"seoagentio","date":"2026-08-17 13:09:41"},"5.42":{"tag":"5.42","author":"seoagentio","date":"2026-08-18 11:26:34"},"5.43":{"tag":"5.43","author":"seoagentio","date":"2026-08-18 11:37:56"},"5.44":{"tag":"5.44","author":"seoagentio","date":"2026-08-19 08:35:14"},"5.45":{"tag":"5.45","author":"seoagentio","date":"2026-08-19 11:22:46"},"5.46":{"tag":"5.46","author":"seoagentio","date":"2026-08-20 14:44:45"},"5.47":{"tag":"5.47","author":"seoagentio","date":"2026-08-21 07:19:51"},"5.48":{"tag":"5.48","author":"seoagentio","date":"2026-08-21 07:52:26"},"5.49":{"tag":"5.49","author":"seoagentio","date":"2026-08-21 08:56:28"},"5.50":{"tag":"5.50","author":"seoagentio","date":"2026-08-21 09:00:17"},"5.51":{"tag":"5.51","author":"seoagentio","date":"2026-08-21 09:16:14"},"5.52":{"tag":"5.52","author":"seoagentio","date":"2026-08-23 21:35:41"},"5.53":{"tag":"5.53","author":"seoagentio","date":"2026-08-24 10:05:00"},"5.54":{"tag":"5.54","author":"seoagentio","date":"2026-08-24 11:29:49"},"5.55":{"tag":"5.55","author":"seoagentio","date":"2026-08-24 21:32:26"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3551579,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3551579,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3551579,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3551579,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["4.84","4.85","4.86","4.87","4.88","4.92","4.96","4.97","4.99","5.00","5.04","5.06","5.07","5.08","5.09","5.10","5.11","5.13","5.14","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.27","5.28","5.29","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.39","5.40","5.41","5.42","5.43","5.44","5.45","5.46","5.47","5.48","5.49","5.50","5.51","5.52","5.53","5.54","5.55"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3658623,"resolution":"1","location":"assets","locale":"","width":1360,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3658623,"resolution":"2","location":"assets","locale":"","width":1360,"height":1520}},"screenshots":{"1":"Consent-first connection: review exactly what will be shared before the plugin sends anything.","2":"Your SEO findings inside WordPress: quota counters, the site scan results, and a one-click path to fixing them."}},"plugin_section":[],"plugin_tags":[1953,2353,17214,6357,186],"plugin_category":[55],"plugin_contributors":[263018],"plugin_business_model":[],"class_list":["post-307469","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-ai","plugin_tags-alt-text","plugin_tags-image-seo","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-seoagentio","plugin_committers-seoagentio"],"banners":{"banner":"https:\/\/ps.w.org\/seoagentio-helper\/assets\/banner-772x250.png?rev=3551579","banner_2x":"https:\/\/ps.w.org\/seoagentio-helper\/assets\/banner-1544x500.png?rev=3551579","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/seoagentio-helper\/assets\/icon-128x128.png?rev=3551579","icon_2x":"https:\/\/ps.w.org\/seoagentio-helper\/assets\/icon-256x256.png?rev=3551579","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/seoagentio-helper\/assets\/screenshot-1.png?rev=3658623","caption":"Consent-first connection: review exactly what will be shared before the plugin sends anything."},{"src":"https:\/\/ps.w.org\/seoagentio-helper\/assets\/screenshot-2.png?rev=3658623","caption":"Your SEO findings inside WordPress: quota counters, the site scan results, and a one-click path to fixing them."}],"raw_content":"<!--section=description-->\n<p><strong>1. AI Alt Text \u2014 30 images every month on the free plan<\/strong><\/p>\n\n<p>Missing alt text hurts your image SEO and your accessibility compliance. This plugin\nscans your media library, finds every image without alt text, and writes natural,\nSEO-friendly alt text automatically \u2014 in English or Hebrew, based on what is actually\nin the picture. Alt texts fill automatically each month, up to your plan's quota.<\/p>\n\n<p><strong>2. SEO Doctor \u2014 free full-site scan<\/strong><\/p>\n\n<p>Missing meta descriptions, duplicate titles, missing schema markup, broken links \u2014\nthe scan finds them and you see every finding, free, right on the plugin page.<\/p>\n\n<p><strong>3. AI Articles<\/strong><\/p>\n\n<p>Want content too? Through the SEO Agent service you also get AI-written, SEO-optimized\narticles based on real keyword research for your niche \u2014 reviewed and approved by you\nbefore anything reaches your site. The free plan includes monthly articles; paid plans\nadd the fixing Doctor and a fully automatic blog.<\/p>\n\n<h4>What this plugin does<\/h4>\n\n<ul>\n<li>Scans your media library and fills missing image alt text with AI<\/li>\n<li>Runs a full SEO site scan and shows every finding on the plugin page<\/li>\n<li>Receives and publishes articles prepared by SEO Agent \u2014 content you have reviewed and\napproved through the SEO Agent dashboard before it reaches your site<\/li>\n<li>Applies SEO metadata to each published post (Yoast, Rank Math, AIOSEO, SEOPress)<\/li>\n<li>Injects Organization schema markup for structured data<\/li>\n<li>Syncs published post URLs back to SEO Agent so the service can update its internal links<\/li>\n<li>Removes duplicate-content query parameters (?nocache=, ?elementor_popup=) from canonical URLs<\/li>\n<\/ul>\n\n<h4>Consent first<\/h4>\n\n<p>The plugin sends nothing anywhere until you approve. After activation, open the\nSEO Agent page in your WordPress admin, review exactly what will be shared, and click\nConnect. Until then the plugin stays idle.<\/p>\n\n<h4>External Service Notice<\/h4>\n\n<p>This plugin connects to seo-agent.io to scan your site, generate alt text and publish articles.\nYour site URL, published post URLs, and image URLs are transmitted to this service \u2014\nonly after you consent on the plugin page.\nSee: https:\/\/seo-agent.io\/privacy and https:\/\/seo-agent.io\/terms<\/p>\n\n<h3>External Services<\/h3>\n\n<p>This plugin communicates with seo-agent.io for all core functionality \u2014 starting only\nafter you consent on the plugin page:<\/p>\n\n<ul>\n<li><strong>What is sent:<\/strong> Site URL, published post URLs and titles\n(on publish\/update\/delete), page URLs (site audit), image URLs (for alt text\ngeneration), plugin version (on each poll), crash reports (on fatal errors).\nIf WooCommerce is installed: product titles, URLs, and status changes are synced\nautomatically via webhooks to power internal linking.<\/li>\n<li><strong>When:<\/strong> After consent; then every 5 minutes via WP-Cron, on post publish\/update\/delete,\nand on WooCommerce product changes (if WooCommerce is installed).<\/li>\n<li><strong>Privacy policy:<\/strong> https:\/\/seo-agent.io\/privacy<\/li>\n<li><strong>Terms of service:<\/strong> https:\/\/seo-agent.io\/terms<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin<\/li>\n<li>Open SEO Agent in your WordPress admin<\/li>\n<li>Review what will be shared and click \"Connect &amp; scan my site\"<\/li>\n<li>Watch your missing alt texts fill automatically, and see your SEO findings on the same page<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20the%20plugin%20free%3F\"><h3>Is the plugin free?<\/h3><\/dt>\n<dd><p>Yes. The plugin is free, and the free plan includes 30 AI alt texts per month and a\nfull SEO site scan. Paid plans add automatic fixing and a fully automatic blog.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20without%20an%20account%3F\"><h3>Does the plugin work without an account?<\/h3><\/dt>\n<dd><p>Yes. After you consent on the plugin page, scanning and alt-text filling work without\nany signup. Creating a free account later unlocks the full findings dashboard.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20send%20anything%20before%20i%20approve%3F\"><h3>Does the plugin send anything before I approve?<\/h3><\/dt>\n<dd><p>No. A fresh install makes no outbound requests at all until you click Connect on the\nSEO Agent page.<\/p><\/dd>\n<dt id=\"what%20data%20is%20sent%20to%20seo-agent.io%3F\"><h3>What data is sent to seo-agent.io?<\/h3><\/dt>\n<dd><p>Your site URL, published post URLs, image URLs for alt text generation, and crash reports on fatal errors.\nSee the External Services section below.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>5.55<\/h4>\n\n<ul>\n<li>append_faq now accepts post_path so a FAQ block reaches a nested product\/taxonomy URL the server could not map to a post ID (resolved via url_to_postid on the site).<\/li>\n<\/ul>\n\n<h4>5.54<\/h4>\n\n<ul>\n<li>New read-only verification: reports live image alt-text coverage with real examples, so completed fixes can be confirmed from inside the site.<\/li>\n<\/ul>\n\n<h4>5.53<\/h4>\n\n<ul>\n<li>FAQ sections now display on pages built with Elementor and similar builders (previously the section was saved but never shown).<\/li>\n<\/ul>\n\n<h4>5.52<\/h4>\n\n<ul>\n<li>Featured images now attach successfully on sites with long Hebrew page titles (the attachment slug no longer overflows the database column).<\/li>\n<\/ul>\n\n<h4>5.51<\/h4>\n\n<ul>\n<li>Hebrew translation now loads on WordPress 5.6-6.6 as well (bundled translations are registered explicitly).<\/li>\n<li>Findings headline count matches the visible list.<\/li>\n<\/ul>\n\n<h4>5.50<\/h4>\n\n<ul>\n<li>Full Hebrew translation for the consent screen and the findings view.<\/li>\n<\/ul>\n\n<h4>5.49<\/h4>\n\n<ul>\n<li>The consent step now applies to WordPress.org installs only; installs connected through the SEO Agent dashboard keep their original one-click flow.<\/li>\n<\/ul>\n\n<h4>5.48<\/h4>\n\n<ul>\n<li>Fix: the consent screen no longer shows a Connected badge before you connect.<\/li>\n<li>Fix: duplicate \"Images without alt text\" row in the findings view.<\/li>\n<\/ul>\n\n<h4>5.47<\/h4>\n\n<ul>\n<li>Consent-first connection: a fresh install now sends nothing until you review what is shared and click Connect on the SEO Agent page. Existing connected installs are unaffected.<\/li>\n<li>Your SEO findings, inside WordPress: the plugin page now shows what the site scan found \u2014 images without alt text, pages missing titles or descriptions, and more \u2014 with a direct path to fix them.<\/li>\n<li>Free plan now includes 30 AI alt texts per month (was 20).<\/li>\n<\/ul>\n\n<h4>5.46<\/h4>\n\n<ul>\n<li>Title and description fixes aimed at a category or tag archive are now delivered. WordPress gives a taxonomy archive no post ID, so these fixes previously failed with \"Post not found: 0\" and the site owner was told the page could not be found. The task now resolves the archive to its term and writes the same Yoast \/ Rank Math term meta the category task has always written.<\/li>\n<\/ul>\n\n<h4>5.45<\/h4>\n\n<ul>\n<li>Fix verification now runs from inside your site. Our servers are blocked by many site firewalls, so a fix that had landed correctly could not be confirmed - the plugin now reports what your site actually holds and shows<\/li>\n<\/ul>\n\n<h4>5.44<\/h4>\n\n<ul>\n<li>Alt text: an image whose alt text is only the article's title is now treated as missing alt text and gets a real description. Such an alt describes the article rather than the picture, and because it was not empty it was previously skipped forever<\/li>\n<\/ul>\n\n<h4>5.43<\/h4>\n\n<ul>\n<li>Featured images: when WordPress refuses to create the image attachment, the underlying database reason is now reported too \u2014 previously only a generic message came back, which was not enough to tell a site owner what to fix<\/li>\n<\/ul>\n\n<h4>5.42<\/h4>\n\n<ul>\n<li>Featured images: when setting a featured image fails, the reason is now reported back instead of failing silently \u2014 a site with an upload problem was previously indistinguishable from one that had never been asked<\/li>\n<li>Featured images: publishing now reports the thumbnail it set, so articles that already have an image are no longer queued for one again<\/li>\n<li>Publishing: the post-publish check no longer follows redirects and confirms the article's own title is on the page, so an article that redirects to the home page is correctly reported as unreachable<\/li>\n<\/ul>\n\n<h4>5.41<\/h4>\n\n<ul>\n<li>Reliability: publishing now recognizes an article that was already published in a previous attempt and reuses the existing post instead of creating a duplicate<\/li>\n<li>Reliability: publish confirmations are retried up to 3 times on temporary server errors<\/li>\n<li>Featured images: articles whose thumbnail is already set are now reported back correctly, so they no longer block newer articles from getting their featured image<\/li>\n<\/ul>\n\n<h4>5.40<\/h4>\n\n<ul>\n<li>SEO Doctor can now add missing viewport, Open Graph and canonical tags to your homepage after you approve the fix<\/li>\n<li>Canonical and Open Graph tags are only added on the front page, and are skipped entirely when a dedicated SEO plugin (Yoast, Rank Math, AIOSEO, SEOPress) is active - its output always wins<\/li>\n<\/ul>\n\n<h4>5.39<\/h4>\n\n<ul>\n<li>The plugin now reports how many images in your media library are missing alt text, enabling the SEO Doctor alt-text backfill card<\/li>\n<li>Large alt-text batch jobs no longer time out mid-run - long batches now stop safely at a time budget and report exactly how many images were completed<\/li>\n<li>Batch results now report the true number of images processed, including when a batch stops early<\/li>\n<\/ul>\n\n<h4>5.38<\/h4>\n\n<ul>\n<li>Redirect management (create\/delete) task types now require plugin version 5.38 or higher<\/li>\n<li>Creating a redirect now clears the old address from LiteSpeed, WP Rocket, W3 Total Cache and WP Super Cache, so visitors stop seeing the cached error page<\/li>\n<li>A managed redirect now only runs while the old address really is missing - if you later publish a real page at that address, your page is shown and the redirect stops on its own<\/li>\n<\/ul>\n\n<h4>5.37<\/h4>\n\n<ul>\n<li>Inline image import is now retried when a download fails instead of being marked complete - fixes articles left with remotely-hosted images<\/li>\n<li>Already-imported images are skipped on retry, preventing duplicate media library items<\/li>\n<li>Preserves backslashes in existing post content when appending FAQ sections or swapping image URLs<\/li>\n<\/ul>\n\n<h4>5.36<\/h4>\n\n<ul>\n<li>Product sync and the WooCommerce webhook now share the store's real currency setting - improves structured data accuracy for stores not priced in ILS<\/li>\n<\/ul>\n\n<h4>5.35<\/h4>\n\n<ul>\n<li>Product sync now shares real average rating, review count and global identifier (GTIN\/UPC\/EAN\/ISBN, when set) - improves structured data completeness for stores using product reviews and identifiers<\/li>\n<\/ul>\n\n<h4>5.34<\/h4>\n\n<ul>\n<li>Fixed: SEO title\/description\/keyword updates that don't change the post content now purge known page-cache plugins (LiteSpeed Cache, WP Rocket, W3 Total Cache, WP Super Cache) so the live page reflects the change immediately instead of waiting for the cache to expire<\/li>\n<\/ul>\n\n<h4>5.33<\/h4>\n\n<ul>\n<li>New read-only task reports the current Yoast\/Rank Math focus keyphrase for requested posts (used by SEO Agent's existing-page detection - no post content or settings are changed)<\/li>\n<\/ul>\n\n<h4>5.32<\/h4>\n\n<ul>\n<li>Blog detection now recognises sites whose blog is a category archive linked from the menu - they are no longer told they have no blog page<\/li>\n<\/ul>\n\n<h4>5.31<\/h4>\n\n<ul>\n<li>Approved FAQ suggestions are now applied to the post automatically (appended accordion + structured data); post updates can resolve pages by path when needed<\/li>\n<\/ul>\n\n<h4>5.30<\/h4>\n\n<ul>\n<li>push_llms_txt task: publish llms.txt through the plugin poll (fixed path, WP_Filesystem) - works on sites whose firewall blocks inbound REST<\/li>\n<\/ul>\n\n<h4>5.29<\/h4>\n\n<ul>\n<li>fix_permalinks: hard flush when the permalink structure is replaced (writes .htaccess; soft flush left new pretty URLs 404 on some Apache sites) and the task result now reports the actual final structure<\/li>\n<\/ul>\n\n<h4>5.28<\/h4>\n\n<ul>\n<li>fix_permalinks: replace permalink structures that cannot produce unique post URLs (e.g. \/%category%\/ alone) with \/%postname%\/ - previously only empty\/invalid structures were replaced<\/li>\n<\/ul>\n\n<h4>5.27<\/h4>\n\n<ul>\n<li>Blog page now renders a uniform magazine-style card grid (3 per row) instead of the theme posts archive; previously created blog pages are converted automatically<\/li>\n<li>Auto-updates can now be enabled via WordPress's standard \"Enable auto-updates\" link<\/li>\n<\/ul>\n\n<h4>5.26<\/h4>\n\n<ul>\n<li>Poll now reports which SEO plugin is installed (Yoast\/Rank Math\/AIOSEO\/SEOPress) so SEO Agent writes meta to the right plugin automatically<\/li>\n<\/ul>\n\n<h4>5.25<\/h4>\n\n<ul>\n<li>Poll now reports whether the site already has a blog page, so SEO Agent can offer to create one (with your approval) only when it is actually missing<\/li>\n<\/ul>\n\n<h4>5.24<\/h4>\n\n<ul>\n<li>create_articles_page now runs only when the site has no blog (existing blog\/posts pages are detected and left untouched) and sets the new page as the native posts page so it matches the site theme exactly<\/li>\n<\/ul>\n\n<h4>5.23<\/h4>\n\n<ul>\n<li>create_articles_page task + [seo_agent_articles] shortcode - creates a dedicated articles page listing published posts in a responsive grid; existing pages are reused, customer content is never overwritten<\/li>\n<\/ul>\n\n<h4>5.22<\/h4>\n\n<ul>\n<li>create_category task - create a missing product category, assign products and set SEO meta (applied only for connected SEO Agent workspaces)<\/li>\n<\/ul>\n\n<h4>5.21<\/h4>\n\n<ul>\n<li>fix_permalinks now repairs permalink structures that contain no valid rewrite tag (every post shared one identical URL)<\/li>\n<\/ul>\n\n<h4>5.20<\/h4>\n\n<ul>\n<li>update_category_seo task (Category Booster - term description + SEO meta, applied only after customer approval)<\/li>\n<\/ul>\n\n<h4>5.19<\/h4>\n\n<ul>\n<li>Clear error message on the status page when the site address cannot be connected (local or private URLs), with a Try Again option - replaces the endless connecting spinner<\/li>\n<\/ul>\n\n<h4>5.12<\/h4>\n\n<ul>\n<li>Show signup prompt on first activation when no SEO Agent account is linked to this site<\/li>\n<\/ul>\n\n<h4>4.89<\/h4>\n\n<ul>\n<li>Rename plugin display name to \"SEO Agent IO\"<\/li>\n<\/ul>\n\n<h4>4.88<\/h4>\n\n<ul>\n<li>Fix auto-update for existing ZIP installs (revert ZIP directory name to seo-agent-helper\/)<\/li>\n<\/ul>\n\n<h4>4.87<\/h4>\n\n<ul>\n<li>Fix ZIP directory name for WordPress.org compatibility (reverted in 4.88)<\/li>\n<\/ul>\n\n<h4>4.86<\/h4>\n\n<ul>\n<li>Fix preg_match fatal error on publish-post route (remove sanitize_title as sanitize_callback for slug param)<\/li>\n<\/ul>\n\n<h4>4.85<\/h4>\n\n<ul>\n<li>Replace parse_url() with wp_parse_url() throughout (WP.org scanner compliance)<\/li>\n<li>Replace strip_tags() with wp_strip_all_tags() throughout (WP.org scanner compliance)<\/li>\n<li>Add wp_unslash() to $_SERVER reads (REMOTE_ADDR, HTTP_ORIGIN, REQUEST_METHOD)<\/li>\n<li>Fix uninstall.php: prefix all global variables with seo_agent_ namespace<\/li>\n<\/ul>\n\n<h4>4.84<\/h4>\n\n<ul>\n<li>Remove custom update hooks (pre_set_site_transient_update_plugins, auto_update_plugin) - WordPress.org handles plugin updates natively<\/li>\n<\/ul>\n\n<h4>4.83<\/h4>\n\n<ul>\n<li>Rename plugin slug to seoagentio-helper (WordPress.org requirement)<\/li>\n<li>Fix image alt text: use 20s timeout for async retry cron (5s default caused silent failures)<\/li>\n<li>Add fallback: set alt from server-generated text if AI API times out during sideload<\/li>\n<\/ul>\n\n<h4>4.82<\/h4>\n\n<ul>\n<li>Strip wpautop-added paragraph wrappers from inline JSON-LD blocks<\/li>\n<\/ul>\n\n<h4>4.81<\/h4>\n\n<ul>\n<li>Fix unused variable in inject-schema handler<\/li>\n<li>Refactor ob_start helper so each caller has explicit ob_end_flush() for static analysis<\/li>\n<\/ul>\n\n<h4>4.80<\/h4>\n\n<ul>\n<li>inject-schema endpoint now stores schema in post meta instead of post_content<\/li>\n<li>Add comment clarifying base64_decode usage (HTTP Basic Auth header decoding)<\/li>\n<\/ul>\n\n<h4>4.79<\/h4>\n\n<ul>\n<li>Refactor output buffer handling: shared helper eliminates duplicate flush logic<\/li>\n<li>Shutdown hook priority -1 ensures buffer closes before WordPress core cleanup<\/li>\n<li>Skip unnecessary ob_get_status() calls on AJAX and cron requests<\/li>\n<\/ul>\n\n<h4>4.78<\/h4>\n\n<ul>\n<li>Explicit shutdown handler to close output buffer opened at template_redirect<\/li>\n<li>Remove load_plugin_textdomain() - WordPress 4.6+ loads translations automatically<\/li>\n<li>Fix code comment that triggered WP.org automated scanner<\/li>\n<\/ul>\n\n<h4>4.77<\/h4>\n\n<ul>\n<li>Fix featured image sideload: preserve original alt text set by fill_alt_texts<\/li>\n<li>Decode HTML entities from media library title on sideload<\/li>\n<\/ul>\n\n<h4>4.76<\/h4>\n\n<ul>\n<li>Fix image alt text: use payload alt_text field, decode HTML entities from post title<\/li>\n<li>Support caption and description fields in set_featured_image task<\/li>\n<\/ul>\n\n<h4>4.75<\/h4>\n\n<ul>\n<li>Add _yoast_wpseo_canonical to SEO meta keys allowlist for canonical URL override<\/li>\n<\/ul>\n\n<h4>4.74<\/h4>\n\n<ul>\n<li>WP-native auto-update via pre_set_site_transient_update_plugins filter<\/li>\n<li>Noindex WooCommerce add-to-cart and added-to-cart URL parameters<\/li>\n<\/ul>\n\n<h4>4.73<\/h4>\n\n<ul>\n<li>Add activate_plugin task type to re-activate deactivated plugins after reinstall<\/li>\n<\/ul>\n\n<h4>4.72<\/h4>\n\n<ul>\n<li>Replace sanitize_url() with esc_url_raw() for WordPress 5.6 compatibility<\/li>\n<li>Fix double-encoded &amp; in admin page free plan label<\/li>\n<li>Wrap cron schedule display strings in __() for i18n<\/li>\n<li>Fix uninstall.php multisite: clear cron hooks and transients per-site<\/li>\n<\/ul>\n\n<h4>4.71<\/h4>\n\n<ul>\n<li>Redesigned admin status page with SEO Agent visual identity (all 4 connection states)<\/li>\n<\/ul>\n\n<h4>4.70<\/h4>\n\n<ul>\n<li>WP_Filesystem API for all filesystem writes (WP.org scanner compliance)<\/li>\n<li>Pre-computed SVG icon constant (no base64_encode at runtime)<\/li>\n<li>sanitize_key on WooCommerce attribute query params<\/li>\n<\/ul>\n\n<h4>4.69<\/h4>\n\n<ul>\n<li>WP_Filesystem API for llms.txt writes (WP.org compliance)<\/li>\n<li>is_wp_error guard on org-schema homepage fetch<\/li>\n<li>Remove sslverify=false from direct-URL fallback (security)<\/li>\n<\/ul>\n\n<h4>4.68<\/h4>\n\n<ul>\n<li>Deactivation clears all cron hooks via wp_clear_scheduled_hook<\/li>\n<li>Added uninstall.php for full cleanup on plugin deletion<\/li>\n<\/ul>\n\n<h4>4.67<\/h4>\n\n<ul>\n<li>Added WooCommerce HPOS compatibility declaration<\/li>\n<li>Renamed cron intervals to plugin-prefixed names (seo_agent_twicehourly)<\/li>\n<li>i18n support and textdomain loading<\/li>\n<li>Converted all anonymous closures to named functions<\/li>\n<\/ul>\n\n<h4>4.66<\/h4>\n\n<ul>\n<li>Available on WordPress.org<\/li>\n<li>Added free tier: 3 articles\/month, 20 alt texts\/month<\/li>\n<li>Removed self-update mechanism (updates now via WordPress.org)<\/li>\n<\/ul>\n\n<h4>4.65<\/h4>\n\n<ul>\n<li>Fix dashboard link<\/li>\n<\/ul>","raw_excerpt":"AI alt text for your images (30\/month on the free plan), a full SEO Doctor site scan, and AI-written SEO articles \u2014 all from one plugin.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/307469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=307469"}],"author":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/seoagentio"}],"wp:attachment":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=307469"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=307469"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=307469"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=307469"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=307469"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=307469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}