{"id":307529,"date":"2026-07-15T13:06:17","date_gmt":"2026-07-15T13:06:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/geo-cite-22\/"},"modified":"2026-07-16T17:10:51","modified_gmt":"2026-07-16T17:10:51","slug":"innova-geo-ai-indexer","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/innova-geo-ai-indexer\/","author":23489346,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.0.0","stable_tag":"3.0.0","tested":"7.0.1","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Innova GEO AI Indexer","header_author":"Alessandro Angelotti \u2014 Innova.ms","header_description":"Fatti menzionare e indicizzare dalle AI. Ottimizzazione Generative Engine Optimization (GEO) per WordPress con AI multi-provider.","assets_banners_color":"8a98af","last_updated":"2026-07-16 17:10:51","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/buy.stripe.com\/8x29ATdg3cKU1qC4fV0kE00","header_plugin_uri":"https:\/\/geocite22.com","header_author_uri":"https:\/\/innova.ms","rating":0,"author_block_rating":0,"active_installs":0,"downloads":58,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"alessandroang","date":"2026-07-15 13:06:09"},"3.0.0":{"tag":"3.0.0","author":"alessandroang","date":"2026-07-16 17:10:51"}},"upgrade_notice":{"1.4.4":"<p>Final 2 Plugin Check warnings resolved (ContentStats GEO coverage query). No functional changes.<\/p>","1.4.3":"<p>Plugin Check warnings cleanup: phpcs:ignore on direct DB queries for custom tables, $_POST\/$_GET annotations, removed load_plugin_textdomain() (WP 4.6+ auto-loads). composer.json now bundled in the zip. No functional changes.<\/p>","1.4.2":"<p>Compatibility e hardening richieste dal Plugin Check WordPress.org. Nessun cambiamento funzionale: aggiornamento consigliato.<\/p>","1.4.1":"<p>Fix: il selettore &quot;Lingua Interfaccia&quot; non aveva effetto immediato su WordPress 6.7+. Aggiornamento consigliato.<\/p>","1.4.0":"<p>Added English translation and &quot;Interface Language&quot; setting. Default: Italian if WordPress is in Italian, English otherwise. No DB migration required.<\/p>","1.3.1":"<p>Added screenshots to the plugin panel and optional donation link in the readme. No changes to database or settings.<\/p>","1.3.0":"<p>Direct Definition, Key Takeaways, and Key Statistics are now output in the JSON-LD `` (previously populated in the metabox but silenced in the schema). Check with a structured data validator after upgrading.<\/p>","1.0.0":"<p>First stable release. Configure a strong <code>AUTH_KEY<\/code> in <code>wp-config.php<\/code> (required for API key encryption) and activate pretty permalinks (required for <code>\/llms.txt<\/code>).<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3608921,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3608921,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3608921,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3608921,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.0.0","3.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3608921,"resolution":"1","location":"assets","locale":"","width":1200,"height":668},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3608921,"resolution":"2","location":"assets","locale":"","width":1200,"height":922},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3608921,"resolution":"3","location":"assets","locale":"","width":1146,"height":2122},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3608921,"resolution":"4","location":"assets","locale":"","width":1448,"height":2605}},"screenshots":{"1":"License page.","2":"Dashboard with stats for the last 30 days via the chosen AI provider.","3":"Organization data page.","4":"Metaboxes in CPTs."}},"plugin_section":[],"plugin_tags":[2353,245227,244604,1117,186],"plugin_category":[55],"plugin_contributors":[271695],"plugin_business_model":[],"class_list":["post-307529","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-generative-engine-optimization","plugin_tags-llms-txt","plugin_tags-schema","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-alessandroang","plugin_committers-alessandroang"],"banners":{"banner":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/banner-772x250.png?rev=3608921","banner_2x":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/banner-1544x500.png?rev=3608921","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/icon-128x128.png?rev=3608921","icon_2x":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/icon-256x256.png?rev=3608921","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/screenshot-1.png?rev=3608921","caption":"License page."},{"src":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/screenshot-2.png?rev=3608921","caption":"Dashboard with stats for the last 30 days via the chosen AI provider."},{"src":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/screenshot-3.png?rev=3608921","caption":"Organization data page."},{"src":"https:\/\/ps.w.org\/innova-geo-ai-indexer\/assets\/screenshot-4.png?rev=3608921","caption":"Metaboxes in CPTs."}],"raw_content":"<!--section=description-->\n<p><strong>Innova GEO AI Indexer<\/strong> adds the essential GEO fields and structures to WordPress for optimizing content for Generative Search Engines (<strong>ChatGPT, Claude, Gemini, Perplexity, Mistral, Kimi<\/strong>). It features single-field AI population using your own provider API keys (BYOK), multi-stack <strong>Schema.org JSON-LD<\/strong> output, and site-level <code>llms.txt<\/code> file management.<\/p>\n\n<p>Fully free with no account, no license, no subscription \u2014 you bring your own API key and the plugin calls the provider directly. Nothing goes through geocite22.com.<\/p>\n\n<h4>What the free version does<\/h4>\n\n<ul>\n<li><strong>5 core Post-level GEO fields<\/strong>: Quick Answer, FAQ, Direct Definition, Reading Time, Author Override.<\/li>\n<li><strong>Multi-stack Schema.org JSON-LD<\/strong>: Organization + BreadcrumbList + Article\/BlogPosting\/NewsArticle\/HowTo\/Product\/Review\/Recipe\/Event + FAQPage (optional) \u2014 all within a single <code>@graph<\/code> in the <code>&lt;head&gt;<\/code>.<\/li>\n<li><strong>Dynamic llms.txt<\/strong>: Automatically generated with pillar content + contact email + topical clusters.<\/li>\n<li><strong>AI generation via BYOK<\/strong>: single-field \u2728 Generate button next to each AI-generable field, using your own API key from any of the 5 supported providers (Anthropic Claude, OpenAI ChatGPT, Google Gemini, Mistral, Kimi\/Moonshot). Native structured tool use per provider.<\/li>\n<li><strong>Model auto-discovery<\/strong>: click Test on a saved provider key and the plugin fetches the current list of available models from the provider's own <code>\/v1\/models<\/code> endpoint. The Model field becomes an autocompleted dropdown \u2014 no need to remember exact model names as they change.<\/li>\n<li><strong>User-friendly errors<\/strong>: connection errors are translated to human-readable suggestions (\"Il provider \u00e8 momentaneamente sovraccarico, riprova tra qualche secondo\") with the raw technical detail available on a <code>\u24d8<\/code> tooltip for debugging.<\/li>\n<li><strong>API keys encrypted at-rest<\/strong> using Sodium secretbox (derived from <code>AUTH_KEY<\/code>).<\/li>\n<li><strong>AI generation audit log<\/strong>: full tracking of generations in a dedicated DB table.<\/li>\n<li><strong>Automatic reading time<\/strong> calculation from post content (~200 words\/min).<\/li>\n<li><strong>Extendable<\/strong>: exposes hooks that a Pro add-on (or your own code) can use to add fields, sections, post types, and features.<\/li>\n<\/ul>\n\n<h4>Not in the free version \u2014 Pro add-on<\/h4>\n\n<p>There is an optional <strong>Innova GEO AI Indexer Pro<\/strong> add-on plugin distributed separately at <a href=\"https:\/\/geocite22.com\">geocite22.com<\/a> that adds \u2014 on top of everything the free plugin does:<\/p>\n\n<ul>\n<li>9 additional GEO fields (Key Takeaways, Target Queries, Citation Sources, Key Statistics, Related Entities, Schema Type, Expertise Level, Last Fact Check, ItemList Entries)<\/li>\n<li>Multi-field generation in a single click (batch panel above the metabox)<\/li>\n<li>Support for page builders (Elementor \/ Divi \/ Beaver Builder) \u2014 fetches the rendered HTML instead of <code>post_content<\/code><\/li>\n<li>Frontend display of GEO fields (auto-inject, shortcodes, Gutenberg blocks)<\/li>\n<li>Custom post types support + per-post-type field selection matrix<\/li>\n<li>Managed AI mode (no BYOK \u2014 credits included in the subscription)<\/li>\n<li>Roadmap features: LLM citation monitoring, AI-generated cover images, batch generation on the archive, WPML\/Polylang translations<\/li>\n<\/ul>\n\n<p>The Pro is entirely optional. The free plugin is fully functional and does not degrade in any way if the Pro is not installed.<\/p>\n\n<h4>Privacy &amp; Third-Party Services<\/h4>\n\n<p>The free plugin communicates ONLY with the AI provider you configure \u2014 geocite22.com is never contacted:<\/p>\n\n<ul>\n<li><strong>Anthropic<\/strong> (Claude) \u2014 <a href=\"https:\/\/www.anthropic.com\/legal\/consumer-terms\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/www.anthropic.com\/legal\/privacy\">Privacy Policy<\/a> \u00b7 endpoint <code>api.anthropic.com<\/code><\/li>\n<li><strong>OpenAI<\/strong> (ChatGPT) \u2014 <a href=\"https:\/\/openai.com\/policies\/terms-of-use\">Terms of Use<\/a> \u00b7 <a href=\"https:\/\/openai.com\/policies\/privacy-policy\">Privacy Policy<\/a> \u00b7 endpoint <code>api.openai.com<\/code><\/li>\n<li><strong>Google Gemini<\/strong> \u2014 <a href=\"https:\/\/policies.google.com\/terms\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a> \u00b7 endpoint <code>generativelanguage.googleapis.com<\/code><\/li>\n<li><strong>Mistral AI<\/strong> \u2014 <a href=\"https:\/\/mistral.ai\/terms\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/legal.mistral.ai\/terms\/privacy-policy\">Privacy Policy<\/a> \u00b7 endpoint <code>api.mistral.ai<\/code><\/li>\n<li><strong>Kimi \/ Moonshot AI<\/strong> \u2014 <a href=\"https:\/\/www.moonshot.cn\/terms\">Terms of Service<\/a> \u00b7 <a href=\"https:\/\/www.moonshot.cn\/privacy\">Privacy Policy<\/a> \u00b7 endpoint <code>api.moonshot.cn<\/code><\/li>\n<\/ul>\n\n<p>The plugin sends the post title + content + your prompt to the provider you selected, and receives back the AI-generated field values. No data is sent anywhere else. Your API keys are stored encrypted (Sodium secretbox) in <code>wp_options<\/code> and never leave your site except as <code>Authorization<\/code> headers in the direct provider calls.<\/p>\n\n<h4>Extension points<\/h4>\n\n<p>Filterable hooks for developers and the Pro add-on:<\/p>\n\n<ul>\n<li><code>innogai22_field_definitions<\/code> \u2014 add\/remove GEO fields.<\/li>\n<li><code>innogai22_displayable_fields<\/code> \u2014 extend the list of publicly-displayable fields.<\/li>\n<li><code>innogai22_enabled_post_types<\/code> \u2014 extend the post types where the metabox appears.<\/li>\n<li><code>innogai22_schema_output<\/code> \u2014 modify JSON-LD payload before output.<\/li>\n<li><code>innogai22_tool_schema<\/code> \u2014 modify AI tool-use schema.<\/li>\n<li><code>innogai22_ai_providers<\/code> \u2014 register custom AI providers.<\/li>\n<li><code>innogai22_license_manager<\/code> \u2014 replace the null license manager (used by the Pro add-on).<\/li>\n<li><code>innogai22_metabox_before_fields<\/code> \u2014 inject markup at the top of the metabox (used by the Pro for the multi-field panel).<\/li>\n<li><code>innogai22_settings_before_provider_section<\/code> \/ <code>innogai22_settings_before_locale_section<\/code> \u2014 inject Settings sections (used by the Pro for the advanced tabs).<\/li>\n<li><code>innogai22_dashboard_after_main_cards<\/code> \u2014 inject Dashboard widgets (used by the Pro for license status, credits, monitoring).<\/li>\n<li><code>innogai22_required_capability<\/code> \u2014 custom capability for plugin management.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>innova-geo-ai-indexer<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install directly from the WordPress Plugin Directory.<\/li>\n<li>Activate the plugin through the WordPress <strong>Plugins<\/strong> menu.<\/li>\n<li>Ensure <strong>pretty permalinks<\/strong> are active (<strong>Settings \u2192 Permalinks<\/strong> \u2192 any option other than \"Plain\") if you want the <code>\/llms.txt<\/code> endpoint.<\/li>\n<li>Configure <strong>Innova GEO AI Indexer \u2192 Dati sito<\/strong> (Organization, publisher, topical clusters, pillar content for llms.txt).<\/li>\n<li>(Optional, for AI generation) Paste at least one provider API key in <strong>Innova GEO AI Indexer \u2192 Impostazioni \u2192 API Keys<\/strong>. Click <strong>Test<\/strong> to verify the key and load the model dropdown.<\/li>\n<li>On each post, fill the GEO fields manually or use the \u2728 <strong>Genera<\/strong> button next to each AI-generable field.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20account%20or%20license%20to%20use%20the%20plugin%3F\"><h3>Do I need an account or license to use the plugin?<\/h3><\/dt>\n<dd><p><strong>No.<\/strong> The plugin is fully functional out of the box: install, activate, and use. To use the AI generation feature you need to paste your own API key from one of the supported providers in Settings \u2192 API Keys \u2014 free from us, you pay only the provider at their standard rates.<\/p><\/dd>\n<dt id=\"which%20ai%20providers%20are%20supported%3F\"><h3>Which AI providers are supported?<\/h3><\/dt>\n<dd><p>Anthropic (Claude), OpenAI (ChatGPT), Google Gemini, Mistral, and Kimi (Moonshot). The tool schema is automatically translated into each provider's native format.<\/p><\/dd>\n<dt id=\"where%20are%20api%20keys%20stored%3F\"><h3>Where are API keys stored?<\/h3><\/dt>\n<dd><p>In <code>wp_options<\/code> (<code>innogai22_providers<\/code>), encrypted with Sodium secretbox. The encryption key is derived from your <code>AUTH_KEY<\/code> (SHA-256). If <code>AUTH_KEY<\/code> changes, saved keys will become unreadable \u2014 this is by design (prevents credential theft on wp-config leaks).<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20without%20javascript%20on%20the%20frontend%3F\"><h3>Does the plugin work without JavaScript on the frontend?<\/h3><\/dt>\n<dd><p>Yes. The plugin does NOT inject JS into the frontend of client sites. The SEO\/GEO output is pure HTML + static JSON-LD in the <code>&lt;head&gt;<\/code>. The only JS is in the admin area (metaboxes + settings).<\/p><\/dd>\n<dt id=\"why%20does%20%2Fllms.txt%20return%20a%20404%3F\"><h3>Why does \/llms.txt return a 404?<\/h3><\/dt>\n<dd><p>Check: 1) Pretty permalinks are active; 2) The \"Publish \/llms.txt\" toggle is active in both Settings and Site Data; 3) Deactivate and reactivate the plugin to refresh rewrite rules.<\/p><\/dd>\n<dt id=\"i%20want%20more%20fields%20%2F%20features.%20where%27s%20the%20pro%3F\"><h3>I want more fields \/ features. Where's the Pro?<\/h3><\/dt>\n<dd><p>At <a href=\"https:\/\/geocite22.com\/pro\">geocite22.com<\/a>. The Pro is a separate add-on plugin that installs alongside the free one and extends it \u2014 it does not replace it. Your existing setup and data are preserved.<\/p><\/dd>\n<dt id=\"can%20i%20support%20the%20development%20of%20the%20plugin%3F\"><h3>Can I support the development of the plugin?<\/h3><\/dt>\n<dd><p>Yes, thank you! The free plugin is and will remain free. If you'd like to contribute to the open development, patch releases, and the evolution of AI integrations, either grab the Pro (best support) or make a donation via Stripe: <a href=\"https:\/\/buy.stripe.com\/8x29ATdg3cKU1qC4fV0kE00\">Support Innova GEO AI Indexer<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Freemium split: the plugin becomes the free \"essentials\" edition. 9 advanced fields (Key Takeaways, Target Queries, Citation Sources, Key Statistics, Related Entities, Schema Type, Expertise Level, Last Fact Check, ItemList Entries) move to the new <strong>Innova GEO AI Indexer Pro<\/strong> add-on distributed at geocite22.com. Data saved under those meta keys remains in the DB \u2014 if you later install the Pro, the fields reappear populated.<\/li>\n<li>Free version = 5 core fields (Quick Answer, FAQ, Direct Definition, Reading Time, Author Override) + JSON-LD + llms.txt + single-field AI generation via BYOK.<\/li>\n<li>Removed the \"Post Types abilitati\", \"Campi GEO per post type\" and \"Visualizzazione frontend\" sections from Settings \u2014 hardcoded to post + page + all 5 core fields always visible in the metabox. These configurability options move to the Pro add-on.<\/li>\n<li>Removed the \"Licenza\" and \"Acquista\" admin pages. The free plugin no longer talks to geocite22.com \u2014 it's fully local and offline. A new <strong>Versione PRO \u2b50<\/strong> page replaces them with a conversion funnel to the Pro add-on.<\/li>\n<li>Removed the multi-field \"Genera con AI\" panel at the top of the metabox \u2014 the free plugin generates one field at a time via the \u2728 button next to each AI-generable field. Multi-field batch generation moves to the Pro.<\/li>\n<li>Removed the \"Usa contenuto renderizzato\" checkbox \u2014 page-builder-aware content fetching (Elementor \/ Divi \/ Beaver Builder) moves to the Pro.<\/li>\n<li>Removed the <code>ManagedProvider<\/code>, <code>RemoteLicenseManager<\/code>, <code>CreditsTracker<\/code> internal classes. The free plugin is now pure BYOK.<\/li>\n<li>New extension hooks for the Pro add-on: <code>innogai22_displayable_fields<\/code>, <code>innogai22_enabled_post_types<\/code>, <code>innogai22_license_manager<\/code>, <code>innogai22_metabox_before_fields<\/code>, <code>innogai22_settings_before_provider_section<\/code>, <code>innogai22_settings_before_locale_section<\/code>, <code>innogai22_dashboard_after_main_cards<\/code>.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Rebrand to <strong>Innova GEO AI Indexer<\/strong> (previously \"GEO Cite 22\") to comply with the WordPress.org Plugin Review naming policy \u2014 the previous name was too similar to the existing \"GeoCites\" project. The backend SaaS at geocite22.com is unchanged and remains the partner service the plugin talks to.<\/li>\n<li>Slug, text domain, folder and main file all aligned to <code>innova-geo-ai-indexer<\/code>.<\/li>\n<li>License key format change: <code>GC22-XXXX-XXXX-XXXX<\/code> \u2192 <code>INNOGAI22-XXXX-XXXX-XXXX<\/code>. Existing license keys (issued before 2.0.0) are no longer accepted \u2014 request a new key from the geocite22.com dashboard.<\/li>\n<li>Consolidated internal identifiers on a single unique prefix: constants <code>INNOGAI22_*<\/code>, meta keys <code>_innogai22_*<\/code>, hook prefix <code>innogai22_<\/code>, DB tables <code>wp_innogai22_*<\/code>, JS globals <code>innogai22*<\/code>, CSS classes <code>.innogai22-*<\/code>, shortcodes <code>[innogai22_*]<\/code>. PHP namespace stays <code>Innovams\\GeoAiIndexer22\\<\/code> (already brand-tied via the vendor segment).<\/li>\n<li>Security hardening: API keys arriving from the Settings and AJAX test endpoints are now explicitly sanitized with <code>sanitize_text_field()<\/code> before use (previously only trimmed \u2014 safe against tag\/whitespace injection).<\/li>\n<li>Documentation: new readme section listing third-party AI provider endpoints and links to each provider's Terms\/Privacy pages.<\/li>\n<li>Upgrade path (no automatic migration in this release): uninstall any previous \"GEO Cite 22\" plugin, install \"Innova GEO AI Indexer\" 2.0.0, and re-enter the new license key. Custom field values stored under the old <code>_gc22_*<\/code> \/ <code>_gai22_*<\/code> meta keys are NOT read by 2.0.0 \u2014 back-fill manually if needed.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>UX: on the Purchase admin page, the \"Activate Premium\" button is replaced with a \"Coming Soon\" label \u2014 Premium plans are temporarily not purchasable. The webapp checkout blocks Premium attempts server-side too.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New: public display of the GEO fields. Six fields (Quick Answer, Key Takeaways, FAQ, Direct Definition, Key Statistics, Citation Sources) can now also be shown to readers, not just emitted in the JSON-LD. Three complementary ways: automatic output in the post content (opt-in, per-field toggle and position in Settings \u2192 \"Frontend display\"); shortcodes (<code>[innogai22_quick_answer]<\/code>, <code>[innogai22_faq]<\/code>, <code>[innogai22_key_takeaways]<\/code>, <code>[innogai22_direct_definition]<\/code>, <code>[innogai22_key_statistics]<\/code>, <code>[innogai22_citation_sources]<\/code>); and native Gutenberg blocks under the \"Innova GEO AI Indexer\" category. The FAQ uses a no-JavaScript &lt;details&gt; accordion. A field placed manually via shortcode or block is not duplicated by the automatic output.<\/li>\n<\/ul>\n\n<h4>1.5.1<\/h4>\n\n<ul>\n<li>Fix: \"Generate with AI\" failing with \"the provider did not return a valid tool_use\", especially on Gemini and when generating many fields at once. The token budget was too low (2048): structured multi-field output \u2014 plus the internal \"thinking\" of Gemini 2.x models \u2014 got truncated before the tool call was emitted. Raised to 8192.<\/li>\n<li>Fix: the Gemini error is no longer opaque \u2014 it now reports the real reason (finishReason MAX_TOKENS \/ MALFORMED_FUNCTION_CALL \/ safety block).<\/li>\n<li>Fix: the \"Primary Schema type\" field was not saved when updating\/publishing a post. The select sanitizer lowercased the value, discarding valid CamelCase options (Article, BlogPosting, HowTo, FAQPage).<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Security fix (important): removed the <code>INNOGAI22_MOCK_LICENSE<\/code> \/ <code>INNOGAI22_MOCK_TIER<\/code> \/ <code>INNOGAI22_MOCK_AI<\/code> constants entirely. Their <code>true<\/code> default meant any production install that did not redefine them in <code>wp-config.php<\/code> ran in mock mode, granting a fake Premium Unlimited license to every well-formed key. The plugin now always validates the license against the real geocite22.com server \u2014 there is no longer any way to enable development mode with a local <code>define()<\/code>.<\/li>\n<li>Changed: development mode is now the <code>premium_unlimited<\/code> license tier. A dev license issued by a geocite22.com admin unlocks unlimited credits\/sites and makes \"Generate with AI\" return zero-cost mock payloads. It replaces both removed mock constants.<\/li>\n<li>UX: Removed the technical \"Mock license active\" banner from the License admin page and the Mock diagnostics rows from the Support page.<\/li>\n<li>UX: the \"API Keys Provider AI\" box (Settings) now shows Advanced licenses a link to a step-by-step guide for creating the provider API keys.<\/li>\n<li>Compatibility: updated \"Tested up to\" flag to WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.4.6<\/h4>\n\n<ul>\n<li>UX: The Premium tier \"Generate with AI\" provider dropdown now lists only providers that the geocite22.com proxy actually has configured server-side (managed API keys with active budget). The license validation response now includes <code>available_managed_providers<\/code>, persisted in the license cache and consumed by the metabox. If the webapp temporarily has no managed key for a provider, that option disappears from the dropdown \u2014 no more failed AI calls due to a missing managed key surfacing only after the request. Backward compatible: legacy cached license states default to all 5 providers until the next refresh (~12h cron).<\/li>\n<\/ul>\n\n<h4>1.4.5<\/h4>\n\n<ul>\n<li>UX: The \"Generate with AI\" provider dropdown on the post editor now lists only providers with a configured API key (Advanced\/BYOK). Premium tier still shows all five providers (the proxy handles keys server-side). When no provider is configured, the dropdown is replaced by a notice with a direct link to Settings, and the \"Generate with AI\" button is disabled. No more confusing \"missing_api_key\" errors after picking an unconfigured provider.<\/li>\n<\/ul>\n\n<h4>1.4.4<\/h4>\n\n<ul>\n<li>Hardening: annotated the last 2 residual Plugin Check warnings on the GEO fields coverage query in <code>Support\\ContentStats<\/code> (DirectQuery + NoCaching on a JOIN over wp_posts\/wp_postmeta \u2014 live aggregate for the dashboard, no caching is useful here).<\/li>\n<\/ul>\n\n<h4>1.4.3<\/h4>\n\n<ul>\n<li>Hardening (Plugin Check warnings cleanup): annotated direct $wpdb queries on the plugin's custom tables (innogai22_ai_log, innogai22_credits_log) and admin-only diagnostics with phpcs:ignore + motivation; explicit phpcs:ignore on $_POST arrays sanitized downstream and on read-only $_GET flash params; removed the explicit load_plugin_textdomain() call (WP 4.6+ auto-loads translations from the Domain Path header). composer.json is now included in the distribution zip to prevent the \"missing composer.json\" Plugin Check warning. No functional changes for the user.<\/li>\n<\/ul>\n\n<h4>1.4.2<\/h4>\n\n<ul>\n<li>Compatibility: Updated \"Tested up to\" flag to WordPress 6.9.<\/li>\n<li>Hardening: Added translators: comments next to i18n calls with placeholders; revised output escaping in multi-stack JSON-LD and llms.txt; SQL LIKE queries now use $wpdb-&gt;esc_like() with prepared statements; enum-only files now include the ABSPATH guard. No functional changes for the user \u2014 cleanup required by the official WordPress.org Plugin Check.<\/li>\n<\/ul>\n\n<h4>1.4.1<\/h4>\n\n<ul>\n<li>Fix: The \"Interface Language\" setting now takes effect immediately. On WordPress 6.7+, \"just-in-time\" translation loading bypasses the plugin_locale filter; added a second filter on load_textdomain_mofile that always intercepts the .mo path, regardless of how WP loads the domain.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: English translation for the plugin. The interface language automatically follows WordPress (Italian if WP is in Italian, English otherwise). You can force English or Italian from Settings \u2192 \"Interface Language\".<\/li>\n<li>New: AI generation now automatically detects the post language (compatible with multilingual plugins via the <code>innogai22_post_language<\/code> filter) and instructs the model to respond in the same language.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Added 4 screenshots to the plugin's \"View details\" panel.<\/li>\n<li>Added a link to support development (optional Stripe donation).<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Expanded JSON-LD coverage: Direct Definition becomes <code>description<\/code>, Key Takeaways are added to <code>abstract<\/code>, and Key Statistics appear as <code>Claim<\/code> alongside Cited Sources.<\/li>\n<li>\"Generate with AI\" now always populates Related Entities and Cited Sources with at least 3 relevant items.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Fix: \"\u00d7 Remove\" and \"+ Add\" buttons in FAQ \/ Statistics \/ Sources \/ Entities lists now respond to clicks in all contexts, including the block editor.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fix: Repeater object rows (FAQ, Statistics, Cited Sources, Related Entities) no longer expand to abnormal heights.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix: \"Generate with AI\" on BYOK (Advanced) tiers now correctly populates metabox fields for all 5 supported providers (Anthropic, OpenAI, Gemini, Mistral, Kimi).<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: 30-day Advanced Starter free trial upon registration at geocite22.com.<\/li>\n<li>License panel and Dashboard show trial status and remaining days. Automatic downgrade to Base plan upon expiration without interruptions.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>The \"Disconnect\" button now notifies the geocite22.com server and immediately frees the plan slot in the user dashboard. Previously required a periodic cron job.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<p>First stable release. 14 post-level GEO fields, multi-stack JSON-LD in the <code>&lt;head&gt;<\/code>, automatic <code>llms.txt<\/code> generation, multi-provider AI integration, three tiers (Base \/ Advanced \/ Premium), AI generation audit log, and at-rest API key encryption.<\/p>","raw_excerpt":"Get mentioned and indexed by AI. Generative Engine Optimization (GEO) for WordPress with multi-provider AI.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/307529","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=307529"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alessandroang"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=307529"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=307529"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=307529"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=307529"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=307529"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=307529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}