=== Acez SEO AI – Schema, llms.txt & AI Meta Tags === Contributors: acezworld Tags: schema, json-ld, llms-txt, ai-seo, schema-markup Requires at least: 6.4 Tested up to: 7.1 Requires PHP: 8.1 Stable tag: 0.9.9.38 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html Schema.org JSON-LD, meta tags, llms.txt and robots.txt for search engines and AI crawlers. AI titles, descriptions and alt text on your own API key. == Description == Acez SEO AI is a free SEO plugin built for both search engines and AI assistants: Schema.org JSON-LD, meta tags, an llms.txt generator and a robots.txt editor with AI-bot controls — plus AI-generated titles, descriptions and alt text using your own Anthropic, OpenAI, Gemini or OpenRouter key. Acez SEO AI generates the meta tags and Schema.org (JSON-LD) structured data search engines and AI assistants need to understand your site — titles, descriptions, Open Graph, Twitter Cards, canonical URLs, and a growing library of Schema.org types — all fully configurable, with sensible automatic defaults. = Structured data, out of the box = * Article, WebSite, Organization, BreadcrumbList, Person, FAQPage (auto-detected from native `core/details` blocks), HowTo, Product (with WooCommerce data when active), and LocalBusiness * A full JSON graph override and a custom-node repeater for anything the built-in types don't cover, with a local schema validator against Google's Rich Results requirements * Location Rules (AND/OR condition groups) to control exactly which templates, post types, or pages get which schema and meta output = AI generation on your own key = Connect your own Anthropic, OpenAI, Google Gemini, or OpenRouter account and generate SEO titles, meta descriptions, image alt text, FAQ/HowTo schema nodes, and product descriptions with one click, directly in the block editor or Classic Editor. Every result lands in an editable field for review — nothing is ever saved automatically. Because it runs on your own API key, there are no extra credits or subscriptions to buy for AI features. = Feeding both search engines and AI crawlers = * A graphical robots.txt editor with one-click blocking for known search and AI bots (GPTBot, Google-Extended, ClaudeBot, and more) * A dedicated llms.txt generator (the llmstxt.org standard) — a concise guide to your site's most important content, built for language models * A site-wide noai/noimageai opt-out signal for AI training = Multilingual sites = Works alongside WPML, Polylang, and TranslatePress: per-post `inLanguage` in the JSON-LD graph, and no duplicate hreflang output when your multilingual plugin already generates it. = Migrate in minutes = A dry-run importer reads existing SEO data from Slim SEO, Yoast SEO, and All in One SEO — titles, descriptions, canonical URLs, robots settings, and Open Graph images — so switching plugins doesn't mean starting from zero. = Plays well with others = Acez SEO AI automatically detects other active SEO plugins (Yoast, Rank Math, All in One SEO, SEOPress, Slim SEO) and steps aside for anything they already handle, to avoid duplicate meta tags or conflicting signals. = Also included = Advanced Custom Fields integration (a `%acf:field%` template variable and an ACF image field as an Open Graph fallback), site ownership verification for Google, Bing, Yandex, Pinterest, Baidu and Meta, Google Tag Manager/Analytics/Hotjar integration fields, per-post-type feature toggles, and full Polish and English localization. = Pro add-on = An optional, separately distributed Pro add-on extends Acez SEO AI with a redirect manager and 404 monitor, in-editor content analysis with Polish-aware readability scoring, bulk AI generation, Google Search Console dashboards with OAuth, premium schema types (Recipe, Event, JobPosting, Course, VideoObject), AI-assisted internal linking, per-language Organization overrides, and AI translation of meta fields. The free plugin above is fully functional on its own — the Pro add-on only adds capabilities, it never takes any away. == Installation == 1. Upload the plugin files to `/wp-content/plugins/acez-seo`, or install it directly through the Plugins screen in WordPress. 2. Activate the plugin through the "Plugins" screen. 3. Open "Acez SEO AI" in the admin menu to configure your Organization details, review the per-post-type meta/schema settings, and (optionally) connect an AI provider. == Frequently Asked Questions == = Do I need an AI provider account to use this plugin? = No. Every AI feature is optional and off by default until you connect an Anthropic, OpenAI, Google Gemini, or OpenRouter account with your own API key. All core SEO features (meta tags, schema, robots.txt, llms.txt, importers, ACF integration) work fully without any AI provider configured. = Does this conflict with Yoast SEO / Rank Math / other SEO plugins? = Acez SEO AI detects other active SEO plugins and automatically stops printing its own meta tags, canonical URLs, and sitemap/llms.txt entries where they would duplicate what the other plugin already outputs, so you can safely run it alongside another plugin during a migration. = Is the free version limited or a trial? = No. The free version is fully functional and not time-limited or feature-capped. The optional Pro add-on adds extra tools (redirects, bulk AI, Search Console dashboards, premium schema types, AI linking) — it never removes anything from the free version. = What data does the plugin send to third parties? = Only what you explicitly configure — see "External services" below for the full list. There is no telemetry and no data collection beyond that. == External services == This plugin can connect to the following third-party services, but only when you explicitly configure and use the corresponding feature. No data is sent to any of these services unless you take the described action. * **AI content generation (Anthropic / OpenAI / Google Gemini / OpenRouter)** — when you connect a provider with your own API key and click a "Generate with AI" button, the relevant field's context (e.g. post title and excerpt) is sent to that provider's API to generate the requested text. This only happens when you click the button; nothing is sent automatically. Anthropic: https://www.anthropic.com/legal/consumer-terms | https://www.anthropic.com/legal/privacy OpenAI: https://openai.com/policies/terms-of-use | https://openai.com/policies/privacy-policy Google Gemini: https://ai.google.dev/gemini-api/terms | https://policies.google.com/privacy OpenRouter: https://openrouter.ai/terms | https://openrouter.ai/privacy * **Google Tag Manager / Google Analytics (GA4)** — only loaded on your site's front end once you enter a Container ID or Measurement ID in the Integrations tab. Loads a script from googletagmanager.com. Terms: https://marketingplatform.google.com/about/analytics/terms/us/ | Privacy: https://policies.google.com/privacy * **Hotjar** — only loaded once you enter a Site ID in the Integrations tab. Loads a script from static.hotjar.com. Hotjar is now part of Contentsquare, which publishes the governing terms and privacy policy. Terms: https://contentsquare.com/legal/terms-conditions/ | Privacy: https://contentsquare.com/privacy-center/services-privacy-policy/ == Screenshots == 1. Dashboard — per-post-type overview and feature toggles. 2. Schema.org settings — Organization, LocalBusiness, and structured data. 3. Post editor SEO box — SEO title/description, SERP preview, and AI generation. 4. AI Providers — connect your own Anthropic/OpenAI/Gemini key. 5. Graphical robots.txt editor with known-bot blocking. == Changelog == = 0.9.9.38 = * Settings → Plugin language: when the Polish translation is not installed on the site, the "Polish" option now says so and a notice explains how WordPress gets the translation, instead of silently keeping the panel in English. = 0.9.9.37 = * Fixed: a home page showing your latest posts got no meta description, canonical link, Open Graph/Twitter tags or structured data. It now uses the site tagline as its description and a CollectionPage schema node. * Fixed: the page assigned as "Posts page" ignored the SEO title, description, canonical URL and robots settings entered in its editor box. They now apply, and paginated pages get their own canonical URL and a page number in the title. * Taxonomy archive structured data now includes the WebSite (and, depending on its scope, Organization) node it references, and omits an empty description. * AI Providers: a model can now be chosen for full article generation in the "Model per task" card. = 0.9.9.36 = * Every settings screen now verifies the form nonce in its own save handler, instead of relying only on the shared dispatcher that calls it. * Table names in the AIOSEO import and conflict detection are passed through $wpdb->prepare()'s %i identifier placeholder rather than being interpolated into the query string. * Structured data is printed through WordPress's own inline script tag API (wp_print_inline_script_tag). The JSON-LD output itself is unchanged. = 0.9.9.35 = * Form input is now sanitized with core WordPress functions at the point it is read, before the plugin's own template sanitizers run. Percent signs in %variable% tokens and percent-encoded URLs are still kept intact. * Custom schema JSON is sanitized after decoding: HTML tags are removed from every value and property name. * Fixed: sitemap URL exclusions did not work for percent-encoded (non-Latin) slugs. Exclusion rules now match regardless of letter case in the encoding and also accept the plain, decoded characters. * Fixed: uninstalling the plugin now also removes the sitemap, onboarding, AI bot and AI usage/log settings, and the dismissed-notice state. = 0.9.9.34 = * Added "Generate with AI" buttons to the llms.txt tab (title, description, introduction and footer). = 0.9.9.33 = * Removed the Custom Code tab (header/body/footer snippet injection), following the WordPress.org plugin review — arbitrary code insertion is not allowed in plugins hosted in the directory. * Added site ownership verification fields for Google Search Console, Bing Webmaster Tools, Yandex, Pinterest, Baidu and Meta/Facebook to the Integrations tab. These cover the legitimate reason most people reached for header snippets: pasting a verification meta tag. Each field is validated and sanitized, and outputs a single `` tag. * Verification codes entered in the admin are now sanitized at the point the form is read, not only when they are stored. = 0.9.9.32 = Collective entry covering the main changes since 0.9.5, most of them made in response to the WordPress.org plugin review. * No feature in the free plugin is gated behind a licence any more. Per-language Organization overrides, schema property overrides for a forced node, the form-based node builder, and AI translation of meta fields moved to the Pro add-on; the llms.txt footer, publication dates and caching, plus AI alt text from image analysis, are now permanently free. * Source strings are English. Polish and Spanish translations are served from translate.wordpress.org instead of being bundled with the plugin. * Removed the `anthropic-ai/sdk` Composer dependency — all four AI providers now talk to their APIs through the WordPress HTTP API. The plugin ships with no production dependencies at all. * Security: AI provider API keys are encrypted with a key derived from `wp_salt('auth')`, unique per install; the older key derivation and its hard-coded fallback have been removed. * Security: JSON-LD output is escaped with `JSON_HEX_TAG` against `` breakout, and user-authored schema nodes now pass through a recursive sanitizer after decoding. * Google Tag Manager and Hotjar snippets are emitted through the WordPress script enqueue API instead of raw `