{"id":389452,"date":"2026-10-30T01:12:02","date_gmt":"2026-10-30T01:12:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/nexacite-ai-answer-engine-optimization\/"},"modified":"2026-10-30T01:11:47","modified_gmt":"2026-10-30T01:11:47","slug":"summitcite","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/summitcite\/","author":23541085,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.7.3","stable_tag":"1.7.3","tested":"7.1.4","requires":"6.5","requires_php":"8.3","requires_plugins":null,"header_name":"SummitCite","header_author":"PressRoost","header_description":"WordPress-native Answer Engine Optimisation: emit AI-readable signals, measure AI crawler activity, and feed the results back into your content.","assets_banners_color":"3f8a77","last_updated":"2026-10-30 01:11:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/summitcite.com\/","header_author_uri":"https:\/\/pressroost.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":59,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.7.3":{"tag":"1.7.3","author":"pressroost","date":"2026-10-30 01:11:47","revision":3774257}},"upgrade_notice":{"1.7.2":"<p>Renamed to SummitCite, and the first release submitted to the WordPress.org\ndirectory. Upgrade in place. Your data is untouched: the database tables, option\nkeys and cron events keep their <code>aive_<\/code> names, so crawler history, scores and\nevery setting survive. The robots.txt block markers change to <code># BEGIN SummitCite<\/code>\n\/ <code># END SummitCite<\/code>; a block written under the old markers is replaced in place on\nthe next request, and text outside the block is still never modified. No\nmigration, no re-scan, no settings reset.<\/p>","1.7.1":"<p>Shows the values behind an Answer Density score. No schema change and no re-scan\nneeded; existing results are re-rendered with the new fields on the next screen\nload. Equal scores now sort by the site&#039;s own language instead of the database&#039;s\ndefault collation.<\/p>","1.7.0":"<p>Adds the Dashboard and consolidates every module&#039;s controls onto one Settings\nscreen. No table or option changes; the Dashboard reads what the modules already\nstore, so an existing site shows its real history immediately.<\/p>","1.6.0":"<p>Adds the Conflict Detector. No table or option changes and nothing else changes\nbehaviour; the module reports on what the other modules already decided.<\/p>","1.5.0":"<p>Adds the Answer Density module and its scans. No table changes beyond the ones\nactivation already created; the six-hourly sweep is scheduled on activation and\nexisting content is scanned on the first pass.<\/p>","1.4.0":"<p>Adds llms.txt, its three settings and its route. Upgrade in place; no table or\ncolumn changes and no settings are reset. llms.txt is enabled after the upgrade,\nso a site with a permalink structure, search engines not discouraged, no\nllms.txt in its site root and no Yoast or Rank Math llms.txt feature switched on\nwill start serving a generated document at \/llms.txt. Until you choose content\nunder SummitCite &gt; Settings &gt; llms.txt it lists up to 20 pages and your 20\nmost recent posts. Switch llms.txt off there if that is not wanted. Upgrading by\noverwriting files fires no activation hook, so the route is repaired on the first\nadmin request after the upgrade rather than immediately; re-saving Settings &gt;\nPermalinks has the same effect.<\/p>","1.3.0":"<p>Adds the schema engine, its admin screen and its enable setting. Upgrade in\nplace; no table or column changes and no settings are reset. The schema engine\nis enabled after the upgrade, so a site where no evaluated SEO plugin is\nemitting content-level structured data will start serving Article JSON-LD on\neligible published content from the next request. Switch Schema Engine off under\nSummitCite &gt; Settings if that is not wanted. If one of the five evaluated SEO\nplugins is active, SummitCite emits nothing and SummitCite &gt; Schema says why.<\/p>","1.2.0":"<p>Adds the per-bot robots policy, the Robots Audit screen and robots conflict\ndetection. Upgrade in place; no table or column changes and no settings are\nreset. The robots policy is enabled after the upgrade, so a site where SummitCite owns\nrobots.txt will start serving a marked AI bot block on the next request for\n\/robots.txt. Switch Robots policy off under SummitCite &gt; Settings if that is\nnot wanted.<\/p>","1.1.0":"<p>Adds the AI crawler log, its admin screen, and the two settings that control it.\nUpgrade in place; the schedule and settings are reused as-is. The crawler log\ntable gains a canonical UTC timestamp column, and any crawler log rows written\nbefore it are deleted during the upgrade because their original instants cannot\nbe reconstructed. No other data is affected.<\/p>","1.0.0":"<p>First release. Plugin foundation only: no admin screens and no front-end output yet.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3774257,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3774257,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3774257,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3774257,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.7.3"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The Dashboard: an operational-evidence score with a colour-coded gauge, four summary cards and a per-component breakdown.","2":"Fourteen days of AI crawler activity as a bar chart, with the same values in an accessible table underneath.","3":"Crawler Log: visits by bot over seven days, and every request newest first, filterable by crawler.","4":"Robots Audit: what you configured for each bot against what the live <code>\/robots.txt<\/code> actually grants.","5":"Schema: who owns the structured data graph, per-plugin evidence, and a preview of the exact JSON-LD SummitCite would emit.","6":"Answer Density: coverage, quality and structure scored separately, worst-first, with the raw values behind each score.","7":"Conflict Detector: one inventory of every plugin and file that touches robots.txt, structured data and llms.txt.","8":"Settings: every module's controls on one screen, saved once."}},"plugin_section":[],"plugin_tags":[244526,2353,244604,1117,186],"plugin_category":[55],"plugin_contributors":[289615],"plugin_business_model":[],"class_list":["post-389452","plugin","type-plugin","status-publish","hentry","plugin_tags-aeo","plugin_tags-ai","plugin_tags-llms-txt","plugin_tags-schema","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_contributors-pressroost","plugin_committers-pressroost"],"banners":{"banner":"https:\/\/ps.w.org\/summitcite\/assets\/banner-772x250.png?rev=3774257","banner_2x":"https:\/\/ps.w.org\/summitcite\/assets\/banner-1544x500.png?rev=3774257","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/summitcite\/assets\/icon-128x128.png?rev=3774257","icon_2x":"https:\/\/ps.w.org\/summitcite\/assets\/icon-256x256.png?rev=3774257","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>SummitCite treats Answer Engine Optimization as a closed loop rather than a\none-way broadcast: emit the signals AI engines read, measure which AI crawlers\nactually arrive, score the content they lift answers from, and show you where\nthe two disagree.<\/p>\n\n<p>Everything runs inside your own WordPress. No API key, no account, no\nsubscription, and nothing sent to PressRoost servers.<\/p>\n\n<p><strong>Six things it does<\/strong><\/p>\n\n<ul>\n<li><strong>Crawler log.<\/strong> Records requests from known AI crawlers - training,\nsearch and assistant bots - and reports them on one screen: which bots\narrived in the last seven days, how often, when each was last seen, and the\nindividual requests newest first. Retention is yours to set, from 1 to 3,650\ndays, pruned daily; 90 by default.<\/li>\n<li><strong>Robots policy.<\/strong> Declares, per bot, whether it may read your site - Allow,\nBlock, or don't manage - and writes that into the robots.txt WordPress\nalready generates, inside one marked block. A separate audit screen fetches\nyour live <code>\/robots.txt<\/code> and reports, per bot, what you configured against what\nthe file actually grants, and names the mismatch when there is one.<\/li>\n<li><strong>Schema engine.<\/strong> Emits one Article or BlogPosting block on every eligible\npublished record, plus a FAQPage and a HowTo block when the content qualifies.\nIt stands aside entirely when an SEO plugin is already emitting content-level\nstructured data, and the Schema screen shows that decision per plugin with the\nevidence it used. A preview shows the exact JSON-LD it would build for any\nrecord you pick.<\/li>\n<li><strong>llms.txt.<\/strong> Serves a plain-text inventory of your public content at\n  \/llms.txt - a bounded, deterministic document that lists only what you\nchoose, or a sensible automatic selection until you do. It stands aside when\na file already exists in your site root or when Yoast SEO or Rank Math is set\nto provide one.<\/li>\n<li><strong>Answer density.<\/strong> Classifies and scores every post for how well it can\nanswer a question: coverage, quality and structure, each scored separately and\nshown with the raw coverage ratio, the per-dimension points and the algorithm\nversion that produced them. Scan one post or the whole library, results are\nversioned and re-scanned when content changes, and the list is ordered\nworst-first so the work that pays is at the top.<\/li>\n<li><strong>Conflict detector.<\/strong> One inventory of what else on the site touches\nrobots.txt, structured data, llms.txt and answer scoring - five SEO plugin\nfamilies, each with the evidence for who owns what, and a recommendation\nwhere ownership is contested. Retest on demand.<\/li>\n<\/ul>\n\n<p><strong>One dashboard, one settings screen.<\/strong> The Dashboard rolls the six modules into\na single operational-evidence score with a colour-coded gauge, four summary\ncards, a per-component breakdown and 14 days of crawler activity as a bar chart\nwith the same numbers in an accessible table underneath. Every module's\ncontrols live on one Settings screen, in one form, saved once.<\/p>\n\n<p><strong>What the numbers do not mean<\/strong><\/p>\n\n<p>Stated here because every figure on the screen is bounded by them:<\/p>\n\n<ul>\n<li><strong>A recorded visit is a User-Agent claim, not a verified identity.<\/strong> Any\nclient can send any header, and SummitCite performs no reverse-DNS or IP\nreputation check.<\/li>\n<li><strong>The log is a lower bound.<\/strong> SummitCite measures inside WordPress, so a request\nanswered by a CDN, a reverse proxy or a full-page cache never reaches PHP and\nis never counted.<\/li>\n<li><strong>A Block rule asks; it does not enforce.<\/strong> robots.txt is a declaration,\nhonoured by the crawlers that choose to honour it.<\/li>\n<li><strong>Nothing here guarantees a citation, a ranking or a rich result.<\/strong> Those are\ndecided by the consumer, not by this plugin.<\/li>\n<\/ul>\n\n<p><strong>Three principles<\/strong><\/p>\n\n<ul>\n<li><strong>Progressive enhancement.<\/strong> Every emission feature works on WordPress 6.5\nwith no AI involvement at all. The WordPress 7.0 AI Client API enhances the\nAI-driven features where it is present.<\/li>\n<li><strong>No API keys.<\/strong> SummitCite bundles no AI provider. Where AI is used the call\ngoes through WordPress core, using the connection you configured yourself.<\/li>\n<li><strong>Coexistence first.<\/strong> SummitCite steps aside rather than emitting duplicate\noutput, and decides on evidence rather than on whether a plugin happens to be\nactive.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin does not connect to any external service and does not send data\nanywhere. There is no account, no API key, no licence check and no usage\ntelemetry, and nothing about your site leaves your server.<\/p>\n\n<p>The crawler screens link out to the published bot documentation of the\ncompanies whose crawlers are listed, so you can check which user agent a row\nrefers to:<\/p>\n\n<ul>\n<li>OpenAI - https:\/\/developers.openai.com\/api\/docs\/bots<\/li>\n<li>Anthropic - https:\/\/support.claude.com\/en\/articles\/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler<\/li>\n<li>Perplexity - https:\/\/docs.perplexity.ai\/guides\/bots<\/li>\n<li>Meta - https:\/\/developers.facebook.com\/docs\/sharing\/webmasters\/web-crawlers\/<\/li>\n<li>Common Crawl - https:\/\/commoncrawl.org\/ccbot<\/li>\n<\/ul>\n\n<p>These are plain hyperlinks. They open in a new tab when clicked and are never\nrequested by the plugin itself, so no request, referrer or site data is sent to\nthose services. Each site is governed by its own terms of service and privacy\npolicy.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/summitcite<\/code>, or install the\nZIP through Plugins &gt; Add New.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<\/ol>\n\n<p>Activation creates three custom database tables, stores the default settings in\na single <code>aive_settings<\/code> option and schedules two maintenance events. Everything\nis on from the moment you activate; every module can be switched off under\n<strong>SummitCite &gt; Settings<\/strong>.<\/p>\n\n<p>Crawler logging records from the first matching request. Find the results under\n<strong>SummitCite &gt; Crawler Log<\/strong>. The screens need the <code>manage_options<\/code> capability, so\nan administrator sees them and no one else does.<\/p>\n\n<p>The robots policy writes into the robots.txt WordPress generates, inside one\nmarked block, and only when nothing else owns robots.txt - no file in the site\nroot, no SEO plugin with its own robots editor switched on, and search engines\nnot discouraged under Settings &gt; Reading. Edit the rules under <strong>SummitCite &gt;\nSettings &gt; Robots<\/strong>, and see what the live file grants each bot under\n<strong>SummitCite &gt; Robots Audit<\/strong>.<\/p>\n\n<p>The schema engine emits on every eligible published post, page or public custom\npost type, unless evidence shows Yoast SEO, Rank Math, SEOPress, All in One SEO\nor The SEO Framework is already emitting content-level structured data, in which\ncase SummitCite emits nothing. <strong>SummitCite &gt; Schema<\/strong> lists the generation rules,\nnames who owns the graph and why, and previews the JSON-LD it would build.<\/p>\n\n<p>llms.txt needs a permalink structure other than Plain, because the route is a\nWordPress rewrite rule. Visit <code>\/llms.txt<\/code> at your site root to see it. By default\nit lists up to 20 pages and your 20 most recent posts; choose exactly what you\nwant under <strong>SummitCite &gt; Settings &gt; llms.txt<\/strong> instead.<\/p>\n\n<p>Answer density scans on a six-hourly schedule and on demand under <strong>SummitCite &gt;\nAnswer Density<\/strong>. A scan reads stored content only - it never renders a page,\nruns a shortcode or calls a provider - so a large library takes a while on the\nfirst pass and little afterwards.<\/p>\n\n<p>Nothing arrives instantly. A crawler row appears the next time an AI crawler\nrequests a published page, which is outside your control and can take days on a\nnew or low-traffic site. An empty screen after activation is the expected state,\nnot a fault.<\/p>\n\n<p>Deactivating the plugin clears its scheduled events but keeps your data and\nsettings. Only deleting the plugin removes them.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20need%20an%20ai%20api%20key%3F\"><h3>Does this need an AI API key?<\/h3><\/dt>\n<dd><p>No. SummitCite ships no AI provider. Features that use AI go through the\nWordPress 7.0 AI Client API and the connection you configure in WordPress\nitself. Every other feature works with no AI at all.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20my%20seo%20plugin%3F\"><h3>Will it conflict with my SEO plugin?<\/h3><\/dt>\n<dd><p>No, by design - and for every feature SummitCite decides on evidence rather than\non whether a plugin happens to be installed.<\/p>\n\n<p>For structured data, SummitCite checks Yoast SEO, Rank Math, SEOPress, All in One\nSEO and The SEO Framework against a stated version profile. If one of them is\nemitting content-level structured data, SummitCite emits none of its own. If one\nis active and SummitCite cannot establish what it emits, SummitCite still stands\ndown: a missing graph is recoverable, a duplicated one confuses every consumer\nthat reads it. <strong>SummitCite &gt; Schema<\/strong> shows that reasoning per plugin, including\nwhich adapters have been exercised against a running copy of the plugin and\nwhich were written from its documented settings. An SEO plugin outside those\nfive is not evaluated and does not stop SummitCite; the <code>aive_schema_conflict<\/code>\nfilter exists for sites that need one accounted for.<\/p>\n\n<p>For robots.txt, before writing anything, SummitCite checks for a robots.txt file\nin the site root and for evidence that Rank Math, All in One SEO or SEOPress Pro\nhas its own robots editor switched on. In any of those cases it writes nothing\nand the Robots Audit screen tells you which system owns the file and where to\nset the rules instead. Being active is never enough on its own: all three ship\nwith robots management off, and SummitCite keeps managing robots.txt on a site\nthat runs one of them for other features.<\/p>\n\n<p>For llms.txt, SummitCite checks for an llms.txt file in the site root, for Yoast\nSEO's own llms.txt setting, and for Rank Math's llms.txt module. Any one of\nthose and SummitCite generates nothing. Yoast's feature writes a real file into\nyour site root, so that case is caught by the file check whatever the setting\nsays.<\/p>\n\n<p>SummitCite never claims that another owner is successfully serving a valid file: a\nfile in your web root is served before WordPress runs, and a cache or CDN can sit\nin front of any plugin's output, so neither is something a plugin can see from\ninside WordPress. <strong>SummitCite &gt; Conflicts<\/strong> is the single screen that reports all\nof it in one place.<\/p><\/dd>\n<dt id=\"does%20the%20answer%20density%20score%20decide%20whether%20my%20content%20ranks%3F\"><h3>Does the answer density score decide whether my content ranks?<\/h3><\/dt>\n<dd><p>No. It measures how well a post is shaped to answer a question - whether the\nclaims have support, whether the structure is scannable, whether the coverage is\nthere - and it reports each part separately so you can see which one is weak. It\nis a writing aid with its arithmetic shown, not a prediction. The algorithm\nversion and every raw and per-dimension value that produced a score are on the\nscreen, so a score can be traced rather than trusted.<\/p><\/dd>\n<dt id=\"why%20is%20there%20no%20faq%20or%20howto%20block%20on%20my%20page%3F\"><h3>Why is there no FAQ or HowTo block on my page?<\/h3><\/dt>\n<dd><p>Because the content did not meet the rules, or something else owns the graph.\nSummitCite never invents a question or a step. Without markers it needs at least\ntwo distinct question headings, or a procedure heading followed immediately by\nan ordered list. Wrap the region in <code>&lt;!-- aive:faq:start --&gt;<\/code> and\n     - or the <code>aive:howto<\/code> pair - and every heading inside it\ncounts whatever its wording and whatever language it is in. <strong>SummitCite &gt; Schema<\/strong>\npreviews the result for any record and names what was missing.<\/p><\/dd>\n<dt id=\"does%20the%20schema%20preview%20prove%20what%20my%20visitors%20receive%3F\"><h3>Does the schema preview prove what my visitors receive?<\/h3><\/dt>\n<dd><p>No, and it is labelled so. The preview is what SummitCite's generator produces for\nthat record right now. A theme, another plugin, a later hook or a page cache all\nsit between the generator and a browser.<\/p><\/dd>\n<dt id=\"why%20does%20my%20robots.txt%20have%20a%20summitcite%20block%20in%20it%3F\"><h3>Why does my robots.txt have a SummitCite block in it?<\/h3><\/dt>\n<dd><p>Because SummitCite owns the file on your site and the robots policy is on.\nEverything it writes sits between <code># BEGIN SummitCite<\/code> and <code># END SummitCite<\/code>, and\nnothing outside those lines is touched. Edit the rules under SummitCite &gt; Settings<\/p>\n\n<blockquote>\n  <p>Robots, or switch Robots policy off there to remove the block on the next\n  request.<\/p>\n<\/blockquote><\/dd>\n<dt id=\"does%20it%20add%20javascript%20to%20my%20site%27s%20front%20end%3F\"><h3>Does it add JavaScript to my site's front end?<\/h3><\/dt>\n<dd><p>No. All output is generated on the server, and no script or stylesheet is loaded\non the front end - the admin screens are built from WordPress's own markup, and\nthe one script the plugin ships is loaded on its own admin screens only. The\nJSON-LD blocks are <code>&lt;script type=\"application\/ld+json\"&gt;<\/code> elements, which hold\ndata rather than executable code and run nothing in a browser.<\/p><\/dd>\n<dt id=\"does%20a%20block%20rule%20stop%20an%20ai%20company%20reading%20my%20site%3F\"><h3>Does a Block rule stop an AI company reading my site?<\/h3><\/dt>\n<dd><p>No. robots.txt is a declaration, honoured by the crawlers that choose to honour\nit. A Block rule asks; it does not enforce. Anything that must be enforced needs\nserver or application access control instead.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20data%20if%20i%20delete%20the%20plugin%3F\"><h3>What happens to my data if I delete the plugin?<\/h3><\/dt>\n<dd><p>Deleting removes everything SummitCite created: its three tables, its options, its\ncached transients and its scheduled events. Deactivating alone removes nothing\nbut the schedule.<\/p><\/dd>\n<dt id=\"does%20the%20crawler%20log%20prove%20a%20particular%20ai%20company%20visited%20my%20site%3F\"><h3>Does the crawler log prove a particular AI company visited my site?<\/h3><\/dt>\n<dd><p>No, and it is worth being clear about why. Identification matches the request's\nUser-Agent header against a registry of publisher-documented crawler tokens, and\nany client can put any text in that header. A row means a request arrived\n<em>claiming<\/em> to be that crawler. SummitCite runs no reverse-DNS or IP reputation\ncheck, so treat the data as traffic measurement, not as verified identity.<\/p><\/dd>\n<dt id=\"why%20does%20the%20log%20show%20fewer%20visits%20than%20my%20server%20or%20cdn%20logs%3F\"><h3>Why does the log show fewer visits than my server or CDN logs?<\/h3><\/dt>\n<dd><p>Because SummitCite measures inside WordPress. A request answered by a CDN, a\nreverse proxy or a full-page cache never reaches PHP, so SummitCite never sees it.\nThe log is a lower bound on AI crawler activity, and on a heavily cached site it\ncan be far below the true figure. Any plugin measuring at this level has the same\nlimit.<\/p><\/dd>\n<dt id=\"why%20is%20there%20no%20bytespider%20in%20my%20log%3F\"><h3>Why is there no Bytespider in my log?<\/h3><\/dt>\n<dd><p>Five registry entries - Google-Extended, Applebot-Extended, anthropic-ai,\ncohere-ai and Bytespider - carry a robots.txt rule only. Their publishers\ndocument no crawler, or no AI purpose, that SummitCite is willing to attribute\ntraffic to, so they are deliberately unmatchable and no header can produce a row\nfor them. Bytespider is a high-volume crawler, so its absence is noticeable; it\nis a decision, not a gap.<\/p><\/dd>\n<dt id=\"does%20logging%20slow%20down%20my%20site%3F\"><h3>Does logging slow down my site?<\/h3><\/dt>\n<dd><p>A logged request adds one INSERT. Nothing is added to pages served to humans: the\ncheck rejects a non-crawler request before any query runs, and the aggregates are\ncomputed only on the admin screen. If you would still rather not have it, switch\nit off in Settings and the hook stops recording.<\/p><\/dd>\n<dt id=\"which%20ip%20addresses%20are%20stored%3F\"><h3>Which IP addresses are stored?<\/h3><\/dt>\n<dd><p>Whatever <code>REMOTE_ADDR<\/code> reports, in a 45-character column, deleted with the row\nwhen retention prunes it. Forwarding headers such as <code>X-Forwarded-For<\/code> are\nignored, because on a site that is not behind a proxy that rewrites them, a\nvisitor sets their own value. If your site <em>is<\/em> behind a proxy, expect to see the\nproxy's address rather than the crawler's.<\/p><\/dd>\n<dt id=\"does%20llms.txt%20work%20without%20pretty%20permalinks%3F\"><h3>Does llms.txt work without pretty permalinks?<\/h3><\/dt>\n<dd><p>No. The route is a WordPress rewrite rule, so a Plain permalink structure has no\nroute to match and <code>\/llms.txt<\/code> is not served. Every other feature works\nregardless.<\/p><\/dd>\n<dt id=\"do%20i%20need%20wordpress%207.0%3F\"><h3>Do I need WordPress 7.0?<\/h3><\/dt>\n<dd><p>No. WordPress 6.5 is enough for everything shipping today. The 7.0 AI Client API\nis used where it exists and is absent without error where it does not.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.7.3<\/h4>\n\n<ul>\n<li>First WordPress.org release, published as SummitCite.<\/li>\n<li>No behavioural change and no database migration: tables, the <code>aive_settings<\/code>\noption, transients and cron hooks keep their <code>aive_<\/code> prefix, so nothing is\nre-scanned or reset on update.<\/li>\n<li>robots.txt markers are <code># BEGIN SummitCite<\/code> \/ <code># END SummitCite<\/code>. A block\nwritten under the previous markers is recognised and replaced in place on the\nnext request; a pair that does not match still stops the module with an admin\nnotice instead of being edited on a guess.<\/li>\n<li>The plugin description spells out \"WordPress\" instead of \"WP\", and the readme\ngains an External services section stating that the plugin contacts no\nexternal service and that the crawler documentation links are plain\nhyperlinks the plugin never requests.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Answer Density now shows the values its score is built from. The admin\nlisting's AJAX payload and the rendered table both carry the algorithm\nversion, the raw coverage ratio and the per-dimension points - coverage,\nquality and structure - so a score can be traced to its arithmetic instead of\nbeing taken on trust.<\/li>\n<li>Tie-break ordering for equal scores is locale-aware. Previously an equal-score\npair was ordered by the database's default collation, which orders non-English\ntitles by byte value rather than by the site's language.<\/li>\n<li>No schema change; existing rows are re-rendered with the new fields on the next\nscreen load. No re-scan required.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>New Dashboard, the parent screen for the plugin: an operational-evidence score\nwith a colour-coded gauge (good at 70 and above, fair 40 to 69, poor below 40),\nfour linked summary cards, a six-component breakdown that states why a\ncomponent is unavailable rather than showing a zero, and quick links into each\nmodule.<\/li>\n<li>Fourteen days of AI crawler activity as a bar chart drawn in pure CSS - no\nchart library, no canvas, no image - bounded to whole UTC days, with every\nplotted value repeated in a semantic table underneath and in each bar's\naccessible label.<\/li>\n<li>Settings consolidated onto one screen: crawler log, robots policy, schema,\nllms.txt, answer density and conflict detector sections in a single form,\nsaved once, with each module's state and ownership shown next to its controls.<\/li>\n<li>Existing screens and slugs are unchanged, so every bookmark and every link\ninto a specific module keeps working.<\/li>\n<li>No new tables, options or migrations. The Dashboard reads what the modules\nalready store and keeps no state of its own.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>New Conflict Detector module and screen: a closed inventory of five SEO plugin\nfamilies - Yoast SEO, Rank Math, SEOPress, All in One SEO and The SEO\nFramework - with the ownership each one delegates for robots.txt, structured\ndata and llms.txt, the evidence used to decide it, and a recommendation\nwherever ownership is contested.<\/li>\n<li>Delegated rows defer to the owning feature's own decision instead of\nre-deriving it, so the two screens can never disagree about who owns a file.<\/li>\n<li>One-hour reporting cache with an explicit Retest action; the cache is discarded\nwhen modules, settings or active plugins change, and a failed probe is reported\nas a named failure rather than an inferred status.<\/li>\n<li>Aggregate statistics feed the Dashboard. No new tables, no background work and\nno front-end output.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>New Answer Density module: deterministic per-post classification and\ntransparent scoring across coverage, quality and structure, with each\ndimension scored separately rather than collapsed into one opaque number.<\/li>\n<li>Versioned results stored per post: a result records the algorithm version that\nproduced it, so a score from before a change is never presented as though it\ncame from after one.<\/li>\n<li>Single and bulk scans on demand, plus a six-hourly scheduled sweep. A scan\nreads stored content only - it never renders a page, executes a shortcode or\ncalls a provider - and is bounded in size and time.<\/li>\n<li>Worst-first administration, so the content that most needs work is at the top\nof the list, with the supporting signals shown next to the score.<\/li>\n<li>Disabling the module preserves stored rows and stops scanning; removing a post\ntype hides its rows without deleting them; restoring either resumes from the\nexisting data rather than starting over.<\/li>\n<li>No front-end output and no new user-facing surface beyond its own admin screen.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Module 4, llms.txt: serves a plain-text inventory of eligible public content\nat the site root, from one rewrite rule matching <code>\/llms.txt<\/code> with one optional\ntrailing slash and nothing else. Handled on <code>template_redirect<\/code> at priority 1,\nbefore canonical redirection and any template, and it ends the request.<\/li>\n<li>The response is exactly HTTP 200 with <code>Content-Type: text\/plain; charset=UTF-8<\/code>\nand <code>X-Content-Type-Options: nosniff<\/code>. No theme output, no redirect and no\nfrontend JavaScript on any request.<\/li>\n<li>SummitCite serves only when the module is on, site visibility is on, no\n  ABSPATH\/llms.txt exists, and no supported plugin is positively detected as\nproviding the feature. Otherwise the route yields WordPress's ordinary 404 -\nnever an empty 200, a redirect, a second document or a public explanation of\nwho owns it.<\/li>\n<li>Fixed ownership precedence: site visibility off, a physical file, Yoast SEO's\n  enable_llms_txt setting, Rank Math's <code>llms-txt<\/code> module, then SummitCite. A plugin\nbeing active is never evidence on its own, and no request input reaches the\ndecision. An absent, unreadable or malformed signal, or an unsupported plugin,\nis reported as not established rather than as a known owner, and does not stop\nSummitCite - the physical-file rule already catches the case that produces a\nduplicate, including Yoast's, whose feature writes a real file into the site\nroot.<\/li>\n<li>Eligibility is published, public, non-attachment, non-revision,\nnon-password-protected content with a canonical HTTP(S) permalink on this\nsite. Private, draft, pending, scheduled, trashed, protected, attachment and\nnon-public content never appears, and neither does any archive, feed, search\nor taxonomy view.<\/li>\n<li>Two selection modes. An explicit, ordered selection lists exactly those of its\nitems that are still eligible and appends nothing; an item that becomes\nineligible is omitted without the stored selection being rewritten. With no\nvalid selection, automatic selection lists at most 20 pages by menu order,\ntitle then id, and at most 20 standard posts by date then id. No custom post\ntype is selected automatically. An empty section is absent.<\/li>\n<li>Deterministic output: the same effective state produces byte-identical,\nLF-terminated UTF-8. Every site name, description and title is stripped of\nmarkup, decoded, cleared of control, line-break, bidirectional-override and\nzero-width characters, bounded by characters rather than bytes, and\nbackslash-escaped, so no title can inject a heading, a list item or its own\nlink destination. Permalinks are validated to this site's host and\npercent-encoded where a Markdown destination would otherwise break.<\/li>\n<li>The response is capped at 64 KiB by omitting whole items in deterministic\norder, never by truncating: no half-written list item, no heading introducing\nnothing and no split UTF-8 character.<\/li>\n<li>A twelve-hour cache keyed on the format version, the plugin build, site\nidentity and visibility, the effective llms settings including the ordered\nselection, the ownership signature, and each item's id, title, permalink, menu\norder, date and modification instant. Ownership and visibility are determined\nbefore the cache is consulted, so a new conflict or a newly private site never\nserves a cached document. A corrupt entry reads as a miss and regenerates.<\/li>\n<li>Three bounded controls in the existing <code>aive_settings<\/code> option on the existing\nSettings screen: the enable toggle, a 500-character description, and a\ncheckbox list of up to 200 pages and 50 recent posts plus anything already\nselected outside them. Saved through the ordinary <code>options.php<\/code> capability and\nnonce path; invalid, duplicate, unknown and ineligible ids are discarded, and\nunrelated settings keys survive a save untouched. No new admin page, REST\nendpoint, custom AJAX surface, dashboard, script or stylesheet.<\/li>\n<li>The section reports who owns the route and why, with one neutral notice per\nstate and a per-plugin evidence table that distinguishes a known owner from\none SummitCite could not establish - and states that SummitCite does not verify another\nowner is serving a valid file.<\/li>\n<li>Activation and deactivation maintain the route and clear the cached document\nonly. The module never writes, edits, deletes or claims ownership of a\nphysical llms.txt, and uninstall removes its cache, its route marker and its\nsettings through the existing prefix sweep.<\/li>\n<li>The route needs a permalink structure other than Plain. Activation flushes the\nrewrite rules, and one bounded soft flush per build repairs the stored rules\non a site upgraded by overwriting plugin files, which fires no activation hook.<\/li>\n<li>No AI provider call, external request, crawler-registry change, robots or\nschema change and no unrelated setting is introduced by this release.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Module 3, Schema Engine: emits one Article or BlogPosting block for every\neligible published post, page or public custom post type viewed on its own\npage, plus one FAQPage and one HowTo block when the content qualifies. A core\npost is described as BlogPosting; a page or custom post type as Article.<\/li>\n<li>Nothing is emitted in wp-admin, AJAX, REST, feed, cron, CLI, login, embed or\npreview contexts, on a 404, search, blog index or archive, or for a revision,\nautosave, attachment, non-public post type, unpublished status or\npassword-protected record. A record appearing in the preview selector does not\noverride any of those.<\/li>\n<li>Required Article fields are all-or-nothing: headline, publication and\nmodification instants from the stored GMT dates, the canonical permalink and\nan Organization publisher. If one cannot be formed, no Article is emitted\nrather than a partial or guessed one. Author, description, image, logo and\nlanguage are optional and simply absent when unavailable.<\/li>\n<li>Explicit marker grammar for both derived types:\n   \/ <code>&lt;!-- aive:faq:end --&gt;<\/code> and the <code>aive:howto<\/code>\npair. Inside a FAQ region every heading and every details\/summary is a\nquestion whatever its wording, which is what makes the feature usable in\nlanguages the automatic rules do not cover. Markers are HTML comments, so they\nsurvive the Classic editor, the Code editor and a Custom HTML block.<\/li>\n<li>Automatic detection is bounded rather than open-ended: h2\/h3 headings and\ndetails\/summary that end in <code>?<\/code>, <code>\uff1f<\/code> or <code>\u061f<\/code> or begin with a listed English,\nChinese, Japanese or German interrogative, with at least two distinct pairs\nrequired; and a procedure heading beginning with a listed phrase whose next\nmeaningful sibling is an ordered list of two or more items. No other ordered\nlist is read as a procedure.<\/li>\n<li>Overlap precedence is fixed and deterministic: explicit HowTo, explicit FAQ,\nautomatic HowTo, then automatic FAQ. A procedure heading and its list are\nnever also published as a question and an answer.<\/li>\n<li>Bounds on everything parsed: at most 200 KiB of stored content, 20 FAQ pairs,\n20 steps, 200 characters per question or step name, 2,000 per answer or step,\nand 40,000 across one generated object. FAQ questions are deduplicated\ncase-insensitively and a duplicate cannot satisfy the automatic threshold.<\/li>\n<li>The generator reads stored content with shortcodes removed. It never calls\n  the_content, renders a block, executes a shortcode or fetches a URL, and\nlibxml runs with networking off and its diagnostics collected. A documented\n  aive_schema_source_content filter can replace the bounded source; output\nthat is not a string within the bound is ignored.<\/li>\n<li>Serialisation goes through <code>wp_json_encode()<\/code> with <code>JSON_HEX_TAG<\/code>,\n  JSON_HEX_AMP, <code>JSON_HEX_APOS<\/code> and <code>JSON_HEX_QUOT<\/code>, so no author text can\nclose the script element it sits inside. Every emitted URL is validated to an\nabsolute HTTP(S) URL; an invalid optional URL is dropped and an invalid\nrequired one suppresses its object. No frontend script or stylesheet is\nenqueued.<\/li>\n<li>Schema conflict ownership, evidenced per plugin rather than by presence. Yoast\nSEO, Rank Math, SEOPress, All in One SEO and The SEO Framework each get an\nadapter with a stated version profile, and each decision carries the detected\nversion, the setting or hook consulted and the profile used. An active plugin\nwhose schema output cannot be established is reported as unknown and SummitCite\nemits nothing, which is the deliberate conservative choice. An SEO plugin\noutside the five is not evaluated and does not block SummitCite.<\/li>\n<li>The SEO Framework's contradictory legacy requirement is resolved as an\nevidence-scoped decision: coexistence only for a configuration profile\nconfirmed to emit site-level and breadcrumb schema alone. No such profile is\nconfirmed in this release, so an active install is treated as unknown and SummitCite\nstands down.<\/li>\n<li><code>aive_schema_conflict<\/code> filters the complete ownership result. It may select\nonly a recognised state and owner, cannot force output for a disabled module\nor an ineligible record, is recorded as an override and is shown to\nadministrators. Malformed filter output falls back to SummitCite's own decision.<\/li>\n<li>Generated payloads are cached for at most twelve hours under a key carrying\npost identity and modification time, status, type, a content hash, the\nsettings hash, the site's locale, home URL, name, logo and icon, the active\ntheme, the featured image, the author identity used and the ownership\nsignature - so a stale payload is unreachable rather than merely scheduled for\ndeletion. Only normalised payloads are stored, never raw or rendered content,\nand the relevant entries are also deleted on edit, status change, featured\nimage, author, site identity, theme, settings and SEO-plugin lifecycle events.<\/li>\n<li>New Schema screen, <code>manage_options<\/code> only: the generation rules per type in\nplain language, who owns the graph with per-plugin evidence, and a preview of\nthe generated candidate for any published eligible record. The preview is\nlabelled \"Generated candidate - not proof of frontend emission\", prints JSON\nas escaped text in a labelled region rather than as an executable script,\ncarries an accessible status message and a visible empty state, and reports\ndisabled, ineligible, yielded, unknown, no-qualifying-content and encoding\noutcomes by name.<\/li>\n<li>The record selector is a read-only GET with strict integer validation. It\nlists published, unprotected, eligible records only, and a record supplied by\nid that is not eligible is reported by reason alone, without its title.<\/li>\n<li>Settings screen gains the Schema section with the Schema Engine toggle, stored\nin the existing <code>aive_settings[enable_schema]<\/code> key. Settings the form does not\nrender still survive a save. Switching the module off stops output, makes the\npreview unavailable and clears the schema cache.<\/li>\n<li>No database schema or table change. Schema cache artifacts carry the <code>aive_<\/code>\nprefix, so uninstall removes them with every other SummitCite artifact and no\nthird-party data is touched. Crawler, robots, registry, database and the\naccepted timestamp behaviour are unchanged.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Module 2, Robots policy: declares an Allow, Block or Don't manage rule for\nevery token in the crawler registry, written into the robots.txt WordPress\ngenerates. Allow contributes <code>Allow: \/<\/code> with <code>Disallow: \/wp-admin\/<\/code>; Block\ncontributes <code>Disallow: \/<\/code>; Don't manage contributes nothing.<\/li>\n<li>All SummitCite output sits inside one <code># BEGIN SummitCite<\/code> \/\n  # END SummitCite block. Text outside the markers is never\nmodified, the previous block is replaced rather than appended to, and marker\ntext that is not one matching pair stops the module entirely with an admin\nnotice rather than being edited on a guess.<\/li>\n<li>Robots conflict ownership. SummitCite writes nothing when WordPress is set to\ndiscourage search engines, when a robots.txt file exists in the site root,\nwhen Rank Math, All in One SEO or SEOPress Pro has its own robots management\nswitched on by evidence of that plugin's own setting, or when such a plugin is\nactive and its setting cannot be read. An active plugin alone is never treated\nas owning robots.txt.<\/li>\n<li>A bot that an existing non-SummitCite group already names is left alone: no second\ngroup is emitted for it, and the audit reports which bots are in that state.<\/li>\n<li>New Robots Audit screen. Reports the source of the audited response, when it\nwas last checked and whether that is still current, who owns robots.txt, and\nper bot the configured rule, the measured status at the site root, the reason\nfor it, and any mismatch. Empty and failure states say what to do next instead\nof showing a zero.<\/li>\n<li>The audit makes one bounded request to this site's own <code>\/robots.txt<\/code>: no URL\nfield, HTTP(S) only, home host and port, no redirect followed, a ten-second\ntimeout and at most 128 KiB read. A redirect, a non-2xx status, a non-text\nresponse, an oversized body or a transport error each produce a named failure\nand no inferred bot status. Nothing fetched is stored.<\/li>\n<li>The audit runs only on an explicit nonce-checked Re-run Audit by a\n  manage_options user. Opening the screen reads a one-hour cache and never\nfetches; the cache is discarded when the rules, the site visibility or the\nactive plugins change.<\/li>\n<li>Audit limits are stated rather than implied: it reports access to the site\nroot only, does not evaluate wildcards or anchors, and is not evidence that\nany crawler obeys robots.txt.<\/li>\n<li>Settings screen gains the Robots section: the module toggle and the per-bot\nrule table. A submitted rule is kept only for a currently registered token\nwith a recognised value; anything else is discarded and a missing value\nbecomes Don't manage. Settings the form does not render still survive a save.<\/li>\n<li>A registry name that cannot be written safely into robots.txt is excluded from\nthe rules and the output, and reported in an admin-only notice rather than\ndropped silently.<\/li>\n<li>No new table, column or schema migration. Rules live in the existing\n  aive_settings option and the audit in an <code>aive_*<\/code> transient, so the existing\nuninstall cleanup removes both.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Module 1, Crawler Log: records visits from known AI crawlers and reports them\non a new admin screen.<\/li>\n<li>Logs an eligible visit on <code>template_redirect<\/code> when the User-Agent matches the\ncrawler registry. Eligible means a GET request for a single published post,\npage or public custom post type. Humans, unmatched User-Agents, non-GET\nmethods, admin, AJAX, REST, cron, feed, robots.txt, sitemap and XML requests,\nand non-singular or non-public content are all ignored. A configured posts\npage records nothing, because the blog index lists other content rather than\nbeing a visit to that page; a static front page is a real page view and is\nrecorded against its own ID.<\/li>\n<li>Stores the matched bot name and type, resolved post ID, request URI path,\nUser-Agent and <code>REMOTE_ADDR<\/code>, each truncated to its column width. The query\nstring is dropped and forwarding headers are deliberately not read.<\/li>\n<li>New admin menu, SummitCite, holding Crawler Log and Settings. Both screens\nrequire <code>manage_options<\/code>, re-checked in the page callback rather than relying\non the menu entry alone.<\/li>\n<li>Crawler Log screen reports Visits by Bot and Recent Visits over the last seven\ndays, filterable by bot and sortable by time, with its own empty state and a\ndistinct message when the table cannot be read.<\/li>\n<li>Settings screen renders Module 1's two controls: the enable toggle and the\nretention period. Saves go through <code>register_setting<\/code> with a nonce and a\ncapability check, and the sanitiser preserves the settings of modules that do\nnot exist yet instead of dropping them.<\/li>\n<li>Retention: the daily <code>aive_cleanup_crawler_logs<\/code> event deletes rows older than\n  log_retention_days x 24 hours of elapsed time. Bounded to 1-3650 days, 90 by\ndefault, and clamped on read as well as on save so a value written\nprogrammatically cannot widen the window. Both this window and the seven-day\nreporting window measure absolute elapsed time, so neither shifts by an hour\nacross a daylight-saving transition in site timezones that observe one.<\/li>\n<li>Seven-day totals and distinct bot counts published through the\n  aive_dashboard_stats filter as <code>crawler_total_visits_7d<\/code> and\n  crawler_unique_bots_7d, ready for the Module 7 dashboard.<\/li>\n<li>Every SQL statement against the crawler log table lives in one store class,\nwith prepared bindings and an ORDER BY allow-list. A database error degrades\nto an admin message and never affects a front-end response.<\/li>\n<li>No assets of any kind: the admin screens are built from core's own classes,\nand the front end loads no SummitCite stylesheet or JavaScript.<\/li>\n<li>Requirements 2, 6 and 9 of the acceptance suite now execute, joined by new\nintegration coverage for retention boundaries, the reporting window, admin\nauthorisation, escaping and the empty and failure states.<\/li>\n<li>Timekeeping: the crawler log gains a <code>visited_at_utc<\/code> column and an index on\nit, and that column alone decides retention, the seven-day window,\nnewest-first ordering and each bot's last visit. The existing <code>visited_at<\/code>\nstays as a site-local rendering of the same instant for compatibility and is\nno longer compared against. A column with no offset cannot tell apart the two\ninstants an hour apart that share a wall-clock reading when the clocks go\nback, which made retention keep an expired row and the seven-day count\ninclude one. Timestamps are converted for display, so changing the site\ntimezone changes what the screen shows and nothing about which rows a window\ncontains.<\/li>\n<li>Upgrading deletes crawler log rows written before that column existed. Their\noriginal instants cannot be reconstructed - a repeated-hour reading maps to\ntwo, and the site's timezone at the time of the visit is not recorded - so\nthey are removed rather than given an invented offset. Crawler measurements\nonly: posts, settings, registry data and the plugin's other tables are\nuntouched, and this is not uninstall. Until the migration completes the module\nrecords nothing, runs no cleanup and reports zero, rather than writing rows\nwith no canonical instant.<\/li>\n<li>The cleanup event and the settings keys were created by 1.0.0 and are reused\nunchanged.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: plugin foundation.<\/li>\n<li>Plugin header, constants and Composer PSR-4 autoloading, with a missing\nautoloader degrading to an admin notice instead of a fatal error.<\/li>\n<li>Activation creates the crawler log, answer density and citations tables via\ndbDelta(), seeds the default settings without overwriting an existing\nconfiguration, schedules the daily log cleanup and six-hourly density scan,\nand flushes rewrite rules.<\/li>\n<li>Deactivation clears the scheduled events and flushes rewrite rules, keeping\nall data.<\/li>\n<li>Uninstall removes every aive_ prefixed table, option, transient and scheduled\nevent, after verifying that WordPress is uninstalling this plugin.<\/li>\n<li>Schema versioning, so a plugin updated by overwriting files still migrates.<\/li>\n<li>AI crawler registry covering 18 publisher-verified search, assistant and\ntraining crawler tokens, 13 of them detectable from the User-Agent header and\n5 carried for their robots.txt rule alone. Extensible through the\naive_crawler_list filter.<\/li>\n<li>Shared utilities: settings access, AI Client API detection, crawler matching,\nmultilingual question detection for English, Chinese, Japanese and German,\nHTML fragment parsing and debug logging.<\/li>\n<\/ul>","raw_excerpt":"WordPress-native Answer Engine Optimization: emit AI-readable signals, measure AI crawler activity, and feed the results back into your content.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/389452","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=389452"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pressroost"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=389452"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=389452"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=389452"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=389452"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=389452"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=389452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}