{"id":370838,"date":"2026-09-21T11:28:43","date_gmt":"2026-09-21T11:28:43","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/geo-local-fr\/"},"modified":"2026-09-21T11:48:13","modified_gmt":"2026-09-21T11:48:13","slug":"geolys","status":"publish","type":"plugin","link":"https:\/\/mr.wordpress.org\/plugins\/geolys\/","author":23567444,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.0.1","stable_tag":"trunk","tested":"7.1.2","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Geolys","header_author":"Fred","header_description":"Analyse la structure de vos contenus pour l'IA (GEO), g\u00e9n\u00e8re automatiquement le schema.org (FAQPage, HowTo) sans API externe, propose des corrections concr\u00e8tes en fran\u00e7ais, et priorise les pages \u00e0 corriger. Corrections m\u00e9caniques 100% locales et illimit\u00e9es. 100% local, compatible Yoast SEO \/ Rank Math.","assets_banners_color":"","last_updated":"2026-09-21 11:48:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":52,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":[],"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":3705522,"resolution":"128x128","location":"assets","locale":"","width":300,"height":300},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3705522,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":[],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Tableau de bord principal Geolys avec la vue d'ensemble des optimisations SEO.","2":"Outil de correction permettant d'appliquer rapidement les recommandations d\u00e9tect\u00e9es.","3":"Analyse quotidienne du site avec suivi des points \u00e0 am\u00e9liorer.","4":"Int\u00e9gration de l'API Ims et IndexNow pour acc\u00e9l\u00e9rer l'indexation des contenus.","5":"Gestion avanc\u00e9e des options de l'API avec traitement des limites de requ\u00eates Ims.","6":"Robot d'audit IA et suivi des visites automatis\u00e9es du site."}},"plugin_section":[],"plugin_tags":[244526,2353,2591,1117,186],"plugin_category":[49,55],"plugin_contributors":[281824],"plugin_business_model":[],"class_list":["post-370838","plugin","type-plugin","status-publish","hentry","plugin_tags-aeo","plugin_tags-ai","plugin_tags-geo","plugin_tags-schema","plugin_tags-seo","plugin_category-maps-and-location","plugin_category-seo-and-marketing","plugin_contributors-wordfredericpress","plugin_committers-wordfredericpress"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/geolys\/assets\/icon-128x128.jpg?rev=3705522","icon_2x":"https:\/\/ps.w.org\/geolys\/assets\/icon-256x256.png?rev=3705522","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Geolys helps WordPress sites optimize their content for AI answer engines\n(ChatGPT, Perplexity, Gemini, etc.), without relying on a paid third-party API\nand with no usage limit.<\/p>\n\n<p>Features, all free and unlimited:<\/p>\n\n<ol>\n<li><p>GEO Score \/100 automatically calculated every time a post or page is saved,\nbased on heading structure, the presence of a summary at the top of the article,\nthe use of lists\/tables, paragraph length, and the presence of a meta description.<\/p><\/li>\n<li><p>Automatic generation of schema.org FAQPage or HowTo markup from existing content\n(detection of question\/answer pairs and step lists), with manual validation by\nthe user before publishing \u2014 no data is ever sent to an external service.<\/p><\/li>\n<li><p>One-click automatic fixes (duplicate H1, heading hierarchy jump, paragraph too\nlong, enumerative passage turned into a list, question turned into an H2 heading<\/p>\n\n<ul>\n<li>answer, generation of a missing meta description): mechanical, 100% local, no\ngenerative AI, no account needed, no page limit.<\/li>\n<\/ul><\/li>\n<li><p>Prioritization dashboard: lists all content with its score, sorted by importance\n(cross-referenced with traffic data if Google Site Kit is active, otherwise by\nage and absence of schema).<\/p><\/li>\n<\/ol>\n\n<p>Compatible with Yoast SEO and Rank Math without replacing them (the plugin reads\ntheir existing meta description instead of duplicating it).<\/p>\n\n<p>This plugin never makes any outbound network request: everything runs in local\nPHP, no content data ever leaves your site.<\/p>\n\n<h3>Pro extension (sold separately)<\/h3>\n\n<p>An optional, paid extension, <strong>\"Geolys \u2014 Advanced AI &amp; GEO\"<\/strong>, distributed\noutside WordPress.org (dedicated portal), adds features that don't exist in this\nfree plugin: fix rewriting via generative AI, publishing of aligned sitewide\nJSON-LD entities (Organization\/LocalBusiness), automatic generation and updating\nof an llms.txt file, an AI bot detection dashboard (GPTBot, ClaudeBot...), and URL\nsubmission to indexers via the IndexNow protocol.<\/p>\n\n<p>This free plugin remains 100% functional and unlimited without it; the extension\nonly hooks into it via documented extension points (<code>geolys_corrector_instance<\/code>,\n    geolys_faq_schema, <code>geolys_howto_schema<\/code> filters, <code>geolys_dashboard_upsell<\/code> action).<\/p>\n\n<h3>Technical notes<\/h3>\n\n<ul>\n<li>No outbound network request: all analysis is done in local PHP (DOMDocument,\nregular expressions).<\/li>\n<li>The generated schema.org markup is stored as post meta (<code>_geolys_validated_schema<\/code>)\nand injected into the <code>&lt;head&gt;<\/code> of the corresponding public page.<\/li>\n<li>Question\/answer detection relies on: H2\/H3 headings ending with \"?\" or starting\nwith French interrogative phrases (\"Comment\", \"Pourquoi\", \"Qu'est-ce que\"...).<\/li>\n<li>Automatic fixes manipulate Gutenberg blocks directly via <code>parse_blocks()<\/code> \/\n  serialize_blocks() so the editor structure is never corrupted. As a precaution,\nthey don't touch nested blocks (columns, groups), and may simplify internal\nformatting (bold, links) on the affected passage \u2014 a confirmation is always\nrequested before applying a fix.<\/li>\n<li>Interchangeable fix engine architecture (<code>GEOLYS_Corrector_Interface<\/code>): the local\nmechanical engine (<code>GEOLYS_Rule_Based_Corrector<\/code>) is the default and only engine\nincluded in this plugin. The <code>geolys_corrector_instance<\/code> filter lets the optional\nPro extension provide an AI engine instead, with no changes to this code.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>geolys<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin from the WordPress \"Plugins\" menu.<\/li>\n<li>Open a post or page: the \"GEO Score\" box appears in the sidebar.<\/li>\n<li>Check the \"Geolys\" menu in the admin area for the overview.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>3.0.1<\/h4>\n\n<ul>\n<li>Renamed the plugin from \"GEO Local FR\" to <strong>Geolys<\/strong> (display name, slug,\ntext domain, PHP classes, hooks, CSS classes) following a WordPress.org\nplugin review requesting a more distinctive name, less likely to be\nconfused with other GEO\/AI-search optimization plugins in the directory.<\/li>\n<li>Fixed: plugin activation no longer runs a synchronous, unbounded analysis\nof every published post\/page (<code>posts_per_page =&gt; -1<\/code>), which could exhaust\nmemory or time out on sites with a large amount of content. The initial\nanalysis now runs in the background, in small batches of 20 items via\nWP-Cron, without blocking activation.<\/li>\n<li>Security hardening: the JSON-LD schema output in <code>&lt;head&gt;<\/code> is now\nre-encoded with <code>wp_json_encode()<\/code> right before output instead of relying\non a case-sensitive string replacement, removing a theoretical\ncase-based bypass (e.g. an uppercase <code>&lt;\/SCRIPT&gt;<\/code> sequence).<\/li>\n<li>Security hardening: the annotated preview screen now runs the rendered\ncontent through <code>wp_kses_post()<\/code> as a final allowlist sanitization step\nright before output, in addition to the existing <code>the_content<\/code> filtering.<\/li>\n<li>Removed the bundled <code>languages\/<\/code> translation files (<code>.po<\/code>\/<code>.mo<\/code>\/<code>.pot<\/code>):\ntranslations are now handled entirely through translate.wordpress.org, as\nrecommended for plugins hosted on WordPress.org.<\/li>\n<li>Added the plugin author as a listed contributor in this readme.<\/li>\n<\/ul>\n\n<h4>3.0.0<\/h4>\n\n<ul>\n<li>Brought into compliance with the WordPress.org Detailed Plugin Guidelines (\u00a75,\n\"Trialware is not permitted\"): the 4-free-page quota and the licensing system\nhave been completely removed \u2014 automatic fixes, previously limited, are now\nfully free and unlimited for everyone, with no Free\/Pro distinction.<\/li>\n<li>Generative-AI fixing (Google Gemini), the \"Advanced AI &amp; GEO\" module (JSON-LD\nentities, llms.txt, AI bot detection, IndexNow submission) and Freemius license\nmanagement have been removed from this plugin and moved to a separate Pro\nextension, sold and distributed separately (outside WordPress.org) \u2014 see the\n\"Pro extension\" section above.<\/li>\n<li>New extension points for this Pro extension: <code>geolys_corrector_instance<\/code> filter\n(replace the fix engine), <code>geolys_faq_schema<\/code> \/ <code>geolys_howto_schema<\/code> filters\n(align JSON-LD schemas with an external entity), <code>geolys_dashboard_upsell<\/code> action.<\/li>\n<li>Removed the manual <code>load_plugin_textdomain()<\/code> call: WordPress automatically\nloads this plugin's translations, no code needed.<\/li>\n<li>Hardened output escaping and input sanitization (nonces, AJAX inputs) per the\nWordPress Plugin Check tool's recommendations.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>New: full \"Advanced AI &amp; GEO\" module (per-site\/volume license, JSON-LD entities,\nllms.txt, AI bot detection, IndexNow submission) \u2014 removed in 3.0.0, see above.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New: \"managed AI service\" mode in addition to a personal Gemini key \u2014 prepared\nfor a +\u20ac2\/month offer without the customer having to manage an API key. Requires\nan external proxy server (not provided by this plugin) that holds the real key\nserver-side.<\/li>\n<li>New: automatic daily analysis via WordPress cron, which recalculates the GEO\nscore of all published content.<\/li>\n<li>New: email alert if a page's score drops by more than 10 points compared to the\nprevious analysis. No fix is ever applied automatically \u2014 only the score and the\nalert; the fix remains manual.<\/li>\n<li>Added the missing deactivation hook to clean up the cron task if the plugin is\ndeactivated (avoids an orphaned background task).<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>New: integration of an AI-based fix engine (Google Gemini) \u2014 removed in 3.0.0,\nmoved to the Pro extension.<\/li>\n<li>Automatic, silent fallback to the mechanical engine if the AI call fails\n(invalid key, Gemini quota reached, network unavailable, unexpected response):\nthe user always gets a result.<\/li>\n<li>The duplicate-heading safeguard also applies to AI-generated headings.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Important fix: the \"bullet list\" conversion could split an entire sentence into\nbullets as soon as it contained several commas, even when it wasn't a genuine\nenumeration (loss of meaning). Detection now distinguishes an introductory\nsentence (typically before a \":\") from the list itself: only the true\nenumeration becomes bullets, and the introduction is kept in full in a separate\nparagraph right before it. A candidate item longer than 12 words now cancels\nthe whole conversion, instead of fragmenting a complete sentence into fake\nbullets.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fix: the GEO score was only calculated when a page was saved \u2014 any content that\nexisted before the plugin was installed (or was never re-saved since) stayed\nstuck on \"Not analyzed\" indefinitely. Added an automatic analysis on plugin\nactivation, and an \"Analyze pages not yet scored\" \/ \"Re-analyze all pages\"\nbutton in the dashboard for sites where the plugin was already active before\nthis update.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Security: automatic fixes can no longer create a duplicate heading \u2014 before\nsuggesting (and before applying) a \"question \u2192 heading\" conversion, the engine\nchecks that no existing heading in the article (nor the page title itself)\nalready has exactly that text.<\/li>\n<li>Introduction (then removal in 3.0.0) of a 4-free-fix limit \u2014 see the 3.0.0\nchangelog for the compliance update.<\/li>\n<li>Architecture: the fix engine is now interchangeable (GEOLYS_Corrector_Interface).\nThe current engine is renamed GEOLYS_Rule_Based_Corrector.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Improvement: automatically splitting a long paragraph now avoids starting the\nsecond paragraph with an isolated pronoun (e.g. \"It\", \"This\") with no nearby\nantecedent, for a more natural break when reading.<\/li>\n<li>Improvement: automatically generated list items are now systematically cleaned\nup (multiple spaces, trailing punctuation) for a consistent presentation.<\/li>\n<li>Fix: bullets in generated lists were invisible in the preview because of\nWordPress admin's default styling \u2014 they are now explicitly restored, with\nconsistent vertical rhythm between headings, paragraphs and lists.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: annotated preview page showing the passages to fix highlighted in color,\nwith a concrete suggestion below each one.<\/li>\n<li>New: one-click automatic fixes, with confirmation before applying and immediate\nscore recalculation.<\/li>\n<li>The dashboard now opens the annotated preview via the \"Fix\" button (a separate\n\"Edit\" button remains available to open the editor directly).<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: GEO score, FAQPage\/HowTo schema generation, text suggestions,\nprioritization dashboard.<\/li>\n<\/ul>","raw_excerpt":"Analyzes your content for AI answer engines, generates schema.org, and fixes pages in one click \u2014 100% local, free, unlimited.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/370838","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=370838"}],"author":[{"embeddable":true,"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/wordfredericpress"}],"wp:attachment":[{"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=370838"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=370838"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=370838"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=370838"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=370838"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=370838"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}