{"id":355449,"date":"2026-08-19T08:15:18","date_gmt":"2026-08-19T08:15:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/octoplug-geo-suite\/"},"modified":"2026-08-19T08:15:04","modified_gmt":"2026-08-19T08:15:04","slug":"octoplug-geo-suite","status":"publish","type":"plugin","link":"https:\/\/test.wordpress.org\/plugins\/octoplug-geo-suite\/","author":23530674,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.28.0","stable_tag":"1.28.0","tested":"7.0.4","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Octoplug GEO Suite","header_author":"Octoplug","header_description":"Takes a WordPress site from zero to \"GEO-ready\": generates the technical files for AI (llms.txt & co.), enriches structured data and measures the state with an actionable GEO Score. Extendable with the GEO Suite Pro add-on.","assets_banners_color":"0d2137","last_updated":"2026-08-19 08:15:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/octoplug.net\/geo-suite-plugin\/","header_author_uri":"https:\/\/octoplug.net\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":20,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.28.0":{"tag":"1.28.0","author":"octoplug","date":"2026-08-19 08:15:04"}},"upgrade_notice":{"1.0.0":"<p>First release of the Octoplug Free edition of GEO Suite.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3654125,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3654125,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3654890,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3654890,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.28.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3654748,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3654758,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3654748,"resolution":"3","location":"assets","locale":"","width":1280,"height":800},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3654748,"resolution":"4","location":"assets","locale":"","width":1280,"height":800},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3654748,"resolution":"5","location":"assets","locale":"","width":1280,"height":800},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3654748,"resolution":"6","location":"assets","locale":"","width":1280,"height":800},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3654748,"resolution":"7","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The dashboard. One number, the six pillars that make it up, and the few things worth doing next \u2014 each with the points it is worth and a link to where you fix it.","2":"Technical files. Every address with its state, a preview of the content, and the check that asks them from the outside the way a crawler would: present is not the same as reachable.","3":"The trend. Your score from the day you installed the plugin to today, with the reading that changed it and what caused each change.","4":"Settings. Who you are in one sentence, your official profiles, and the content you have hidden from AI.","5":"AI crawlers. For each bot, allow or block. The ones that answer people's questions are on by default; the ones that harvest content to train models are not.","6":"The guide, inside the plugin. Every recommendation the dashboard can give you, and exactly what to do about it \u2014 with a button that does it for you where it can be done from here.","7":"Pages, posts and products carry a \"Visible to AI\" column, a link under each title and two bulk actions: taking content out of the AI files is done where you already work."}},"plugin_section":[],"plugin_tags":[2353,2591,244604,1117,1121],"plugin_category":[49,55],"plugin_contributors":[275932],"plugin_business_model":[],"class_list":["post-355449","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-geo","plugin_tags-llms-txt","plugin_tags-schema","plugin_tags-structured-data","plugin_category-maps-and-location","plugin_category-seo-and-marketing","plugin_contributors-octoplug","plugin_committers-octoplug"],"banners":{"banner":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/banner-772x250.png?rev=3654890","banner_2x":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/banner-1544x500.png?rev=3654890","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/icon-128x128.png?rev=3654125","icon_2x":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/icon-256x256.gif?rev=3654125","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/screenshot-1.png?rev=3654748","caption":"The dashboard. One number, the six pillars that make it up, and the few things worth doing next \u2014 each with the points it is worth and a link to where you fix it."},{"src":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/screenshot-2.png?rev=3654758","caption":"Technical files. Every address with its state, a preview of the content, and the check that asks them from the outside the way a crawler would: present is not the same as reachable."},{"src":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/screenshot-3.png?rev=3654748","caption":"The trend. Your score from the day you installed the plugin to today, with the reading that changed it and what caused each change."},{"src":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/screenshot-4.png?rev=3654748","caption":"Settings. Who you are in one sentence, your official profiles, and the content you have hidden from AI."},{"src":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/screenshot-5.png?rev=3654748","caption":"AI crawlers. For each bot, allow or block. The ones that answer people's questions are on by default; the ones that harvest content to train models are not."},{"src":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/screenshot-6.png?rev=3654748","caption":"The guide, inside the plugin. Every recommendation the dashboard can give you, and exactly what to do about it \u2014 with a button that does it for you where it can be done from here."},{"src":"https:\/\/ps.w.org\/octoplug-geo-suite\/assets\/screenshot-7.png?rev=3654748","caption":"Pages, posts and products carry a \"Visible to AI\" column, a link under each title and two bulk actions: taking content out of the AI files is done where you already work."}],"raw_content":"<!--section=description-->\n<p>Most plugins in this space write an <code>llms.txt<\/code> and stop there. GEO Suite starts from the opposite end: it <strong>measures<\/strong> the site, tells you in plain words what is holding it back, and only then writes the files \u2014 and afterwards it <strong>goes and checks from the outside<\/strong> that what it wrote is actually being served.<\/p>\n\n<p>That measure-then-verify loop is what the plugin is built around:<\/p>\n\n<ol>\n<li><strong>A GEO Score you can argue with.<\/strong> Six pillars, every check named, every recommendation carrying the points it is worth and a link to exactly where you fix it. No black box and no external service: the score is computed on your own site, from data WordPress already has.<\/li>\n<li><strong>The files and the structured data.<\/strong> <code>llms.txt<\/code> and <code>llms-full.txt<\/code> kept up to date on their own, a Markdown copy of every page at <code>&lt;permalink&gt;.md<\/code>, JSON-LD (Organization, WebSite, Article, Breadcrumb, FAQPage, Person) written only where your SEO plugin has not already written it.<\/li>\n<li><strong>The outside check.<\/strong> The plugin asks its own addresses the way a crawler would and reports what really comes back \u2014 a redirect, a firewall, a cache serving something else. A file that exists is not the same as a file that is reachable, and this is the part that usually explains why nothing was working.<\/li>\n<li><strong>The trend.<\/strong> Your score is recorded from the day you install, along with the \"before\" picture of the site, so you can see whether the work is paying off month after month. It is recorded <strong>and shown<\/strong>, in the free plugin.<\/li>\n<\/ol>\n\n<p>Everything above is in this plugin, free, with no account, no license key, no time limit and no quota.<\/p>\n\n<p>Also included:<\/p>\n\n<ul>\n<li><strong>Content the plugin cannot read is not silently scored as empty<\/strong> \u2014 pages built with Elementor, Oxygen, Bricks, Breakdance, Beaver, Divi, WPBakery or Avada keep their text where the builder put it. GEO Suite reads it there, without ever executing third-party shortcodes while it builds the files.<\/li>\n<li><strong>AI crawler management<\/strong> \u2014 decide which AI bots may read the site, written into robots.txt with labels a human can understand: the ones that answer people's questions are separated from the ones that harvest content to train models.<\/li>\n<li><strong>You decide what AI can see<\/strong> \u2014 a column and two bulk actions on pages, posts and products: take anything out of the AI files without hiding it from your site or from Google.<\/li>\n<li><strong>Setup wizard<\/strong> \u2014 four steps, a couple of minutes, no jargon.<\/li>\n<li><strong>In-app documentation<\/strong> \u2014 every recommendation the dashboard can give you has a card explaining exactly what to do about it.<\/li>\n<li><strong>Multilingual (WPML and Polylang)<\/strong> \u2014 one set of files and structured data per active language, each at its own address, with headings resolved in that file's language.<\/li>\n<li><strong>A diagnostic report you can copy<\/strong> \u2014 for when you need to write to somebody. Nothing is ever sent anywhere.<\/li>\n<\/ul>\n\n<p>GEO Suite works alongside Yoast, Rank Math and SEOPress without conflicts and reuses their data where it can. No dependency on WooCommerce. No external calls, no tracking, no phoning home.<\/p>\n\n<p>There is a separate, optional add-on (<strong>GEO Suite Pro<\/strong>) that adds per-page analysis, bulk editing, advanced schema and detailed AI crawler monitoring. It is a different plugin: none of its code is in here, and nothing in this plugin is switched off waiting for it.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>octoplug-geo-suite<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin from the WordPress Plugins screen.<\/li>\n<li>Activate the plugin from the Plugins menu.<\/li>\n<li>Open the <strong>GEO<\/strong> menu item and follow the setup wizard (about 2 minutes).<\/li>\n<li>Recommended: use \"pretty\" permalinks (Settings \u2192 Permalinks) to serve the files through the <code>\/llms.txt<\/code> and <code>\/llms-full.txt<\/code> URLs.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20granting%20access%20to%20ai%20crawlers%20hurt%20my%20google%20ranking%3F\"><h3>Does granting access to AI crawlers hurt my Google ranking?<\/h3><\/dt>\n<dd><p>No. AI crawler access and traditional Google ranking are separate things: letting AI bots read the site does not affect organic ranking.<\/p><\/dd>\n<dt id=\"does%20geo%20suite%20conflict%20with%20my%20seo%20plugin%3F\"><h3>Does GEO Suite conflict with my SEO plugin?<\/h3><\/dt>\n<dd><p>No. GEO Suite detects Yoast, Rank Math or SEOPress and works alongside them, avoiding duplication of the structured data the SEO plugin already generates.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20store%20visitors%27%20personal%20data%3F\"><h3>Does the plugin store visitors' personal data?<\/h3><\/dt>\n<dd><p>No, and it makes no external calls at all. The plugin counts how many times known AI bots passed by, as a daily total: no IP addresses, no visitor data, nothing that identifies anybody. The score history it keeps is a number and a date, stored in your own database.<\/p><\/dd>\n<dt id=\"the%20llms.txt%20files%20don%27t%20show%20at%20their%20url.%20what%20should%20i%20do%3F\"><h3>The llms.txt files don't show at their URL. What should I do?<\/h3><\/dt>\n<dd><p>Make sure \"pretty\" permalinks are active (Settings \u2192 Permalinks). If pretty permalinks are not available, the <code>?opgs_file=llms<\/code> fallback is provided, and it is also reported in the settings.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20multilingual%20sites%3F\"><h3>Does it work with multilingual sites?<\/h3><\/dt>\n<dd><p>Yes, with both WPML and Polylang: files and structured data are generated for every active language, each at its own address (\/llms.txt for the main language, \/en\/llms.txt for English, and so on).<\/p><\/dd>\n<dt id=\"is%20anything%20in%20this%20plugin%20locked%2C%20limited%20or%20time-based%3F\"><h3>Is anything in this plugin locked, limited or time-based?<\/h3><\/dt>\n<dd><p>No. There is no license key, no trial, no quota and no expiry. Every feature described above works from the moment you activate it. A separate add-on exists for per-page analysis, bulk editing, advanced schema and detailed crawler monitoring, but that is a different plugin with its own code: nothing here is disabled waiting for it.<\/p><\/dd>\n<dt id=\"where%20does%20my%20score%20history%20end%20up%3F\"><h3>Where does my score history end up?<\/h3><\/dt>\n<dd><p>In a table in your own database, on your own site. One reading a day plus one every time you regenerate or recalculate, each a number, a date and what triggered it. You can see the whole thing under GEO Suite \u2192 Trend, change how long it is kept, or switch the recording off entirely, in Settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.28.0<\/h4>\n\n<ul>\n<li><strong>New: the Trend screen \u2014 and your score history is now yours.<\/strong> The plugin has always recorded your GEO Score from the day you installed it, and captured the \"before\" picture of the site at that moment. Until now there was no screen for it. There is one: GEO Suite \u2192 Trend shows where you started, where you are, the curve over 30 days \/ 90 days \/ 12 months \/ everything, and a table of every reading with what caused it \u2014 a scheduled reading, a recalculation you asked for, or a plugin update that changed how the score is worked out.<\/li>\n<li><strong>Removed: the \"Pro\" page in the admin.<\/strong> The comparison table, the prices and the greyed-out tiles on the dashboard are gone. If you want to know about the separate add-on there is one link, on the plugin's row in the Plugins list, and nothing anywhere else.<\/li>\n<li>Fixed: structured data is now printed through the WordPress core helper, with JSON encoded so that a title or an author name can never break out of the script tag.<\/li>\n<li>Fixed: post type headings in <code>llms.txt<\/code> no longer borrow WordPress' own translation domain; they come from the public core API instead, and still follow the language of each file.<\/li>\n<li>Housekeeping for the directory: the runtime brand image moved out of the folder reserved for the WordPress.org listing graphics, and the stylesheet no longer carries the rules of the removed page.<\/li>\n<\/ul>\n\n<h4>1.27.3<\/h4>\n\n<ul>\n<li>New <code>opgs_contenuto_sorgente<\/code> filter: a theme or plugin can now hand over the real text of a page the plugin cannot read on its own \u2014 an archive, a product list, a portfolio, anything whose content is a shortcode that fills in at render time. The plugin still never executes third-party shortcodes while building the files, which is exactly why the filter exists.<\/li>\n<li>Fixed: filled buttons were picking up the outline button's corner radius and padding, so the primary action looked subtly different from the buttons next to it.<\/li>\n<li>Fixed: on multilingual sites (Polylang\/WPML) the section headings in the per-language <code>llms.txt<\/code> now follow the language of the file. The English <code>\/llms.txt<\/code> no longer printed the site-language post-type labels (e.g. \"## Articoli\" instead of \"## Articles\"); each file's headings are resolved in that file's locale. No change on single-language sites.<\/li>\n<\/ul>\n\n<h4>1.27.2<\/h4>\n\n<ul>\n<li>Changed: the admin top-level menu now reads \"GEO Suite\" instead of \"GEO\", for clearer branding \u2014 consistent across all bundled languages.<\/li>\n<\/ul>\n\n<h4>1.27.1<\/h4>\n\n<ul>\n<li>Fixed: hardened input sanitization on the author \"Official profiles (sameAs)\" field so it clears WordPress.org's static analysis. No functional change \u2014 every address is still validated as an http(s) profile URL before it is saved.<\/li>\n<\/ul>\n\n<h4>1.27.0<\/h4>\n\n<ul>\n<li>Fixed: on multilingual sites (Polylang) the per-page Markdown endpoint (<code>&lt;permalink&gt;.md<\/code>) could serve the same content for every language when translations shared the same slug. The resolved content is now constrained to the language requested in the URL. No change on single-language sites or with WPML.<\/li>\n<li>New: structured data (WebSite, Article\/WebPage) now declares <code>inLanguage<\/code> with the real content language.<\/li>\n<li>New: the BreadcrumbList now builds a real hierarchy on its own \u2014 parent chain for hierarchical pages, and the primary category (with its ancestors) for posts and custom post types \u2014 instead of just Home \u203a Content. A primary term elected in Yoast or Rank Math is honoured; names and URLs come out in the content language on Polylang\/WPML sites. Falls back to the previous Home \u203a Content chain when no hierarchy can be determined.<\/li>\n<li>New: filter <code>opgs_breadcrumb_items<\/code> lets a site (or add-on) supply its own breadcrumb chain \u2014 useful when navigation follows a taxonomy silo that WordPress' own hierarchy doesn't reflect. Positions are renumbered automatically.<\/li>\n<\/ul>\n\n<h4>1.26.0<\/h4>\n\n<ul>\n<li>New: full German, French and Spanish translations for the European launch. The whole interface, setup wizard and in-app manual are now available in de\/fr\/es alongside Italian, with native-quality wording. (Free translations are served through translate.wordpress.org.)<\/li>\n<\/ul>\n\n<h4>1.25.0<\/h4>\n\n<ul>\n<li>New: two filters \u2014 <code>opgs_llms_site_intro<\/code> and <code>opgs_llms_item_description<\/code> \u2014 let an add-on supply the site intro line and a per-item description for the llms.txt file. Used by the Pro's AI summaries; additive and invisible on a standalone Free install, where the generated files are unchanged.<\/li>\n<li>Fixed: raised the contrast of the hero gradient on the dashboard so its text meets the AA readability standard.<\/li>\n<\/ul>\n\n<h4>Earlier versions<\/h4>\n\n<ul>\n<li>Only recent releases are listed here. WordPress.org trims changelogs past 5,000 characters, so older entries have been dropped from this file.<\/li>\n<\/ul>","raw_excerpt":"Measures how ready your site is to be cited by AI, tells you what to fix, and generates the llms.txt files and structured data it needs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/355449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=355449"}],"author":[{"embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/octoplug"}],"wp:attachment":[{"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=355449"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=355449"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=355449"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=355449"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=355449"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/test.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=355449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}