{"id":358069,"date":"2026-09-29T19:48:42","date_gmt":"2026-09-29T19:48:42","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/acez-seo-ai\/"},"modified":"2026-09-29T19:07:54","modified_gmt":"2026-09-29T19:07:54","slug":"acez-seo","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/acez-seo\/","author":23540735,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.9.9.36","stable_tag":"0.9.9.36","tested":"7.1.2","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Acez SEO AI","header_author":"Acez","header_description":"Schema.org (JSON-LD) structured data and SEO meta tags for pages, posts and custom post types.","assets_banners_color":"666a6d","last_updated":"2026-09-29 19:07:54","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/acez.world\/en\/products\/acez-seo-ai","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":60,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.9.9.36":{"tag":"0.9.9.36","author":"acezworld","date":"2026-09-29 19:07:54","revision":3719677}},"upgrade_notice":{"0.9.9.32":"<p>Formerly licence-gated features now live in the Pro add-on (per-language\nOrganization overrides, forced-node property overrides, the node builder, AI\nmeta translation); stored data is kept. Any AI provider API key saved before\nthe encryption fix must be entered again.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3719675,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3719675,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3719675,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3719675,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3719675,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.9.9.36"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3719707,"resolution":"1","location":"assets","locale":"","width":1280,"height":1150},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3719707,"resolution":"2","location":"assets","locale":"","width":1280,"height":1300},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3719707,"resolution":"3","location":"assets","locale":"","width":1280,"height":1500},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3719707,"resolution":"4","location":"assets","locale":"","width":1280,"height":1000},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3719707,"resolution":"5","location":"assets","locale":"","width":1280,"height":1779}},"screenshots":{"1":"Dashboard \u2014 per-post-type overview and feature toggles.","2":"Schema.org settings \u2014 Organization, LocalBusiness, and structured data.","3":"Block editor sidebar \u2014 SEO title\/description, SERP preview, and AI generation.","4":"AI Providers \u2014 connect your own Anthropic\/OpenAI\/Gemini key.","5":"Graphical robots.txt editor with known-bot blocking."}},"plugin_section":[],"plugin_tags":[2353,2516,1117,186,1121],"plugin_category":[55],"plugin_contributors":[283491],"plugin_business_model":[],"class_list":["post-358069","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-json-ld","plugin_tags-schema","plugin_tags-seo","plugin_tags-structured-data","plugin_category-seo-and-marketing","plugin_contributors-acezworld","plugin_committers-acezworld"],"banners":{"banner":"https:\/\/ps.w.org\/acez-seo\/assets\/banner-772x250.png?rev=3719675","banner_2x":"https:\/\/ps.w.org\/acez-seo\/assets\/banner-1544x500.png?rev=3719675","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/acez-seo\/assets\/icon.svg?rev=3719675","icon":"https:\/\/ps.w.org\/acez-seo\/assets\/icon.svg?rev=3719675","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/acez-seo\/assets\/screenshot-1.png?rev=3719707","caption":"Dashboard \u2014 per-post-type overview and feature toggles."},{"src":"https:\/\/ps.w.org\/acez-seo\/assets\/screenshot-2.png?rev=3719707","caption":"Schema.org settings \u2014 Organization, LocalBusiness, and structured data."},{"src":"https:\/\/ps.w.org\/acez-seo\/assets\/screenshot-3.png?rev=3719707","caption":"Block editor sidebar \u2014 SEO title\/description, SERP preview, and AI generation."},{"src":"https:\/\/ps.w.org\/acez-seo\/assets\/screenshot-4.png?rev=3719707","caption":"AI Providers \u2014 connect your own Anthropic\/OpenAI\/Gemini key."},{"src":"https:\/\/ps.w.org\/acez-seo\/assets\/screenshot-5.png?rev=3719707","caption":"Graphical robots.txt editor with known-bot blocking."}],"raw_content":"<!--section=description-->\n<p>Acez SEO AI generates the meta tags and Schema.org (JSON-LD) structured data search\nengines and AI assistants need to understand your site \u2014 titles, descriptions,\nOpen Graph, Twitter Cards, canonical URLs, and a growing library of Schema.org\ntypes \u2014 all fully configurable, with sensible automatic defaults.<\/p>\n\n<h4>Structured data, out of the box<\/h4>\n\n<ul>\n<li>Article, WebSite, Organization, BreadcrumbList, Person, FAQPage (auto-detected\nfrom native <code>core\/details<\/code> blocks), HowTo, Product (with WooCommerce data when\nactive), and LocalBusiness<\/li>\n<li>A full JSON graph override and a custom-node repeater for anything the built-in\ntypes don't cover, with a local schema validator against Google's Rich Results\nrequirements<\/li>\n<li>Location Rules (AND\/OR condition groups) to control exactly which templates,\npost types, or pages get which schema and meta output<\/li>\n<\/ul>\n\n<h4>AI generation on your own key<\/h4>\n\n<p>Connect your own Anthropic, OpenAI, Google Gemini, or OpenRouter account and\ngenerate SEO titles, meta descriptions, image alt text, FAQ\/HowTo schema\nnodes, and product descriptions with one click, directly in the block editor\nor Classic Editor.\nEvery result lands in an editable field for review \u2014 nothing is ever saved\nautomatically. Because it runs on your own API key, there are no extra credits\nor subscriptions to buy for AI features.<\/p>\n\n<h4>Feeding both search engines and AI crawlers<\/h4>\n\n<ul>\n<li>A graphical robots.txt editor with one-click blocking for known search and AI\nbots (GPTBot, Google-Extended, ClaudeBot, and more)<\/li>\n<li>A dedicated llms.txt generator (the llmstxt.org standard) \u2014 a concise guide to\nyour site's most important content, built for language models<\/li>\n<li>A site-wide noai\/noimageai opt-out signal for AI training<\/li>\n<\/ul>\n\n<h4>Multilingual sites<\/h4>\n\n<p>Works alongside WPML, Polylang, and TranslatePress: per-post <code>inLanguage<\/code> in the\nJSON-LD graph, and no duplicate hreflang output when your multilingual plugin\nalready generates it.<\/p>\n\n<h4>Migrate in minutes<\/h4>\n\n<p>A dry-run importer reads existing SEO data from Slim SEO, Yoast SEO, and All in\nOne SEO \u2014 titles, descriptions, canonical URLs, robots settings, and Open Graph\nimages \u2014 so switching plugins doesn't mean starting from zero.<\/p>\n\n<h4>Plays well with others<\/h4>\n\n<p>Acez SEO AI automatically detects other active SEO plugins (Yoast, Rank Math,\nAll in One SEO, SEOPress, Slim SEO) and steps aside for anything they already\nhandle, to avoid duplicate meta tags or conflicting signals.<\/p>\n\n<h4>Also included<\/h4>\n\n<p>Advanced Custom Fields integration (a <code>%acf:field%<\/code> template variable and an ACF\nimage field as an Open Graph fallback), site ownership verification for Google,\nBing, Yandex, Pinterest, Baidu and Meta, Google Tag Manager\/Analytics\/Hotjar\nintegration fields, per-post-type feature toggles, and full Polish and English\nlocalization.<\/p>\n\n<h4>Pro add-on<\/h4>\n\n<p>An optional, separately distributed Pro add-on extends Acez SEO AI with a\nredirect manager and 404 monitor, in-editor content analysis with Polish-aware\nreadability scoring, bulk AI generation, Google Search Console dashboards with\nOAuth, premium schema types (Recipe, Event, JobPosting, Course, VideoObject),\nAI-assisted internal linking, per-language Organization overrides, and AI\ntranslation of meta fields. The free plugin above is fully functional on its\nown \u2014 the Pro add-on only adds capabilities, it never takes any away.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin can connect to the following third-party services, but only when\nyou explicitly configure and use the corresponding feature. No data is sent to\nany of these services unless you take the described action.<\/p>\n\n<ul>\n<li><strong>AI content generation (Anthropic \/ OpenAI \/ Google Gemini \/ OpenRouter)<\/strong> \u2014\nwhen you connect a provider with your own API key and click a \"Generate with\nAI\" button, the relevant field's context (e.g. post title and excerpt) is\nsent to that provider's API to generate the requested text. This only\nhappens when you click the button; nothing is sent automatically.\nAnthropic: https:\/\/www.anthropic.com\/legal\/consumer-terms | https:\/\/www.anthropic.com\/legal\/privacy\nOpenAI: https:\/\/openai.com\/policies\/terms-of-use | https:\/\/openai.com\/policies\/privacy-policy\nGoogle Gemini: https:\/\/ai.google.dev\/gemini-api\/terms | https:\/\/policies.google.com\/privacy\nOpenRouter: https:\/\/openrouter.ai\/terms | https:\/\/openrouter.ai\/privacy<\/li>\n<li><strong>Google Tag Manager \/ Google Analytics (GA4)<\/strong> \u2014 only loaded on your site's\nfront end once you enter a Container ID or Measurement ID in the Integrations\ntab. Loads a script from googletagmanager.com.\nTerms: https:\/\/marketingplatform.google.com\/about\/analytics\/terms\/us\/ | Privacy: https:\/\/policies.google.com\/privacy<\/li>\n<li><strong>Hotjar<\/strong> \u2014 only loaded once you enter a Site ID in the Integrations tab.\nLoads a script from static.hotjar.com. Hotjar is now part of Contentsquare,\nwhich publishes the governing terms and privacy policy.\nTerms: https:\/\/contentsquare.com\/legal\/terms-conditions\/ | Privacy: https:\/\/contentsquare.com\/privacy-center\/services-privacy-policy\/<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/acez-seo<\/code>, or install it\ndirectly through the Plugins screen in WordPress.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen.<\/li>\n<li>Open \"Acez SEO AI\" in the admin menu to configure your Organization details,\nreview the per-post-type meta\/schema settings, and (optionally) connect an\nAI provider.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20ai%20provider%20account%20to%20use%20this%20plugin%3F\"><h3>Do I need an AI provider account to use this plugin?<\/h3><\/dt>\n<dd><p>No. Every AI feature is optional and off by default until you connect an\nAnthropic, OpenAI, Google Gemini, or OpenRouter account with your own API key.\nAll core SEO features (meta tags, schema, robots.txt, llms.txt, importers, ACF\nintegration) work fully without any AI provider configured.<\/p><\/dd>\n<dt id=\"does%20this%20conflict%20with%20yoast%20seo%20%2F%20rank%20math%20%2F%20other%20seo%20plugins%3F\"><h3>Does this conflict with Yoast SEO \/ Rank Math \/ other SEO plugins?<\/h3><\/dt>\n<dd><p>Acez SEO AI detects other active SEO plugins and automatically stops printing\nits own meta tags, canonical URLs, and sitemap\/llms.txt entries where they would\nduplicate what the other plugin already outputs, so you can safely run it\nalongside another plugin during a migration.<\/p><\/dd>\n<dt id=\"is%20the%20free%20version%20limited%20or%20a%20trial%3F\"><h3>Is the free version limited or a trial?<\/h3><\/dt>\n<dd><p>No. The free version is fully functional and not time-limited or feature-capped.\nThe optional Pro add-on adds extra tools (redirects, bulk AI, Search Console\ndashboards, premium schema types, AI linking) \u2014 it never removes anything from\nthe free version.<\/p><\/dd>\n<dt id=\"what%20data%20does%20the%20plugin%20send%20to%20third%20parties%3F\"><h3>What data does the plugin send to third parties?<\/h3><\/dt>\n<dd><p>Only what you explicitly configure \u2014 see \"External services\" below for the\nfull list. There is no telemetry and no data collection beyond that.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.9.9.36<\/h4>\n\n<ul>\n<li>Every settings screen now verifies the form nonce in its own save handler,\ninstead of relying only on the shared dispatcher that calls it.<\/li>\n<li>Table names in the AIOSEO import and conflict detection are passed through\n$wpdb-&gt;prepare()'s %i identifier placeholder rather than being interpolated\ninto the query string.<\/li>\n<li>Structured data is printed through WordPress's own inline script tag API\n(wp_print_inline_script_tag). The JSON-LD output itself is unchanged.<\/li>\n<\/ul>\n\n<h4>0.9.9.35<\/h4>\n\n<ul>\n<li>Form input is now sanitized with core WordPress functions at the point it is\nread, before the plugin's own template sanitizers run. Percent signs in\n%variable% tokens and percent-encoded URLs are still kept intact.<\/li>\n<li>Custom schema JSON is sanitized after decoding: HTML tags are removed from\nevery value and property name.<\/li>\n<li>Fixed: sitemap URL exclusions did not work for percent-encoded (non-Latin)\nslugs. Exclusion rules now match regardless of letter case in the encoding\nand also accept the plain, decoded characters.<\/li>\n<li>Fixed: uninstalling the plugin now also removes the sitemap, onboarding, AI\nbot and AI usage\/log settings, and the dismissed-notice state.<\/li>\n<\/ul>\n\n<h4>0.9.9.34<\/h4>\n\n<ul>\n<li>Added \"Generate with AI\" buttons to the llms.txt tab (title, description,\nintroduction and footer).<\/li>\n<\/ul>\n\n<h4>0.9.9.33<\/h4>\n\n<ul>\n<li>Removed the Custom Code tab (header\/body\/footer snippet injection), following\nthe WordPress.org plugin review \u2014 arbitrary code insertion is not allowed in\nplugins hosted in the directory.<\/li>\n<li>Added site ownership verification fields for Google Search Console, Bing\nWebmaster Tools, Yandex, Pinterest, Baidu and Meta\/Facebook to the\nIntegrations tab. These cover the legitimate reason most people reached for\nheader snippets: pasting a verification meta tag. Each field is validated and\nsanitized, and outputs a single <code>&lt;meta&gt;<\/code> tag.<\/li>\n<li>Verification codes entered in the admin are now sanitized at the point the\nform is read, not only when they are stored.<\/li>\n<\/ul>\n\n<h4>0.9.9.32<\/h4>\n\n<p>Collective entry covering the main changes since 0.9.5, most of them made in\nresponse to the WordPress.org plugin review.<\/p>\n\n<ul>\n<li>No feature in the free plugin is gated behind a licence any more. Per-language\nOrganization overrides, schema property overrides for a forced node, the\nform-based node builder, and AI translation of meta fields moved to the Pro\nadd-on; the llms.txt footer, publication dates and caching, plus AI alt text\nfrom image analysis, are now permanently free.<\/li>\n<li>Source strings are English. Polish and Spanish translations are served from\ntranslate.wordpress.org instead of being bundled with the plugin.<\/li>\n<li>Removed the <code>anthropic-ai\/sdk<\/code> Composer dependency \u2014 all four AI providers now\ntalk to their APIs through the WordPress HTTP API. The plugin ships with no\nproduction dependencies at all.<\/li>\n<li>Security: AI provider API keys are encrypted with a key derived from\n  wp_salt('auth'), unique per install; the older key derivation and its\nhard-coded fallback have been removed.<\/li>\n<li>Security: JSON-LD output is escaped with <code>JSON_HEX_TAG<\/code> against <code>&lt;\/script&gt;<\/code>\nbreakout, and user-authored schema nodes now pass through a recursive\nsanitizer after decoding.<\/li>\n<li>Google Tag Manager and Hotjar snippets are emitted through the WordPress\nscript enqueue API instead of raw <code>&lt;script&gt;<\/code> tags.<\/li>\n<li>Manual override of the main schema node type per post, AI generation of full\narticle content, automatic connection test for the active AI provider, and a\ndeclared search intent used as AI context.<\/li>\n<li>Fixed the Hotjar terms and privacy links under \"External services\" (Hotjar is\nnow part of Contentsquare).<\/li>\n<\/ul>\n\n<h4>0.9.5<\/h4>\n\n<ul>\n<li>Internal: added a generic <code>AiGenerationService::generate_for_filtered_field()<\/code>\nentry point for AI fields whose context isn't a post (used by the Pro\naddon's new AI redirect-target suggestions) \u2014 no user-facing change in\nthe free plugin.<\/li>\n<\/ul>\n\n<h4>0.9.4<\/h4>\n\n<ul>\n<li>Added \"Generuj przez AI\" for the focus keyword field (\"Fraza kluczowa\"),\nin both the Classic meta box and the Gutenberg sidebar \u2014 free feature,\nsame as the existing title\/description generation.<\/li>\n<\/ul>\n\n<h4>0.9.3<\/h4>\n\n<ul>\n<li>AI Providers: fixed a bug where a configured-and-tested provider that\nwasn't (yet) set as the \"Aktywny dostawca\" disappeared from the tab on\nthe next visit, looking like the save had silently failed \u2014 a provider\ncard now stays visible whenever it has a saved API key, not only when\nit's the active one.<\/li>\n<li>Fixed two related markup bugs: a duplicate id=\"model\" shared by all three\nprovider cards, and a duplicate class=\"\" attribute on the provider \"Zapisz\"\nbutton that silently dropped its custom class.<\/li>\n<\/ul>\n\n<h4>0.9.2<\/h4>\n\n<ul>\n<li>AI Providers: after a successful \"Testuj po\u0142\u0105czenie\" test, the provider\ncard now shows up to 10 of the provider's most recent models to pick from\n\u2014 selecting one fills the \"Model\" field, so both the API key and the\nchosen model are saved together on \"Zapisz\".<\/li>\n<\/ul>\n\n<h4>0.9.1<\/h4>\n\n<ul>\n<li>AI Providers: added a \"Roz\u0142\u0105cz i usu\u0144 klucz API\" (Disconnect &amp; delete API key)\nbutton per provider card, so a connected provider's key, model and tested\nstatus can be fully erased from the database, with a confirmation prompt.<\/li>\n<\/ul>\n\n<h4>0.8.7<\/h4>\n\n<ul>\n<li>Current feature set as of this release: Schema.org\/meta engine, Location\nRules, AI generation on your own key, robots.txt\/llms.txt editors,\nmultilingual support, SEO-data importers, ACF integration, and the optional\nPro add-on.<\/li>\n<\/ul>","raw_excerpt":"Schema.org, meta tags &amp; AI-powered SEO for WordPress \u2014 your own AI key, no lock-in.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/358069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=358069"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/acezworld"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=358069"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=358069"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=358069"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=358069"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=358069"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=358069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}