{"id":383052,"date":"2026-10-14T10:30:51","date_gmt":"2026-10-14T10:30:51","guid":{"rendered":"https:\/\/en-gb.wordpress.org\/plugins\/baseline-labs-connector\/"},"modified":"2026-10-14T11:31:20","modified_gmt":"2026-10-14T11:31:20","slug":"baseline-labs-connector","status":"publish","type":"plugin","link":"https:\/\/mya.wordpress.org\/plugins\/baseline-labs-connector\/","author":23560775,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.12.3","stable_tag":"2.12.3","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Baseline Labs Connector","header_author":"Baseline Labs","header_description":"Connects this site to Baseline Labs: injects its schema.org JSON-LD server-side so AI crawlers (that do not run JavaScript) can read it in the raw HTML, and reports the AI-bot requests this site receives. Identical output for every visitor - never cloaks.","assets_banners_color":"f9f3f0","last_updated":"2026-10-14 11:31:20","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/baselinelabs.ai\/integrations\/wordpress","header_author_uri":"https:\/\/baselinelabs.ai","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","faq","changelog"],"tags":{"2.12.3":{"tag":"2.12.3","author":"baselinelabs","date":"2026-10-14 11:31:20","revision":3746187}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3746118,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3746118,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3746118,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.12.3"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3746187,"resolution":"1","location":"assets","locale":"","width":2560,"height":980},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3746187,"resolution":"2","location":"assets","locale":"","width":2240,"height":286}},"screenshots":{"1":"Settings: paste your Baseline Labs API key, keep schema injection on, and opt in to AI traffic reporting if you want it.","2":"This site: connect and verify the domain, re-check verification, or purge the cached schema."}},"plugin_section":[],"plugin_tags":[220145,2516,1117,186,1121],"plugin_category":[55],"plugin_contributors":[286728],"plugin_business_model":[],"class_list":["post-383052","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-search","plugin_tags-json-ld","plugin_tags-schema","plugin_tags-seo","plugin_tags-structured-data","plugin_category-seo-and-marketing","plugin_contributors-baselinelabs","plugin_committers-baselinelabs"],"banners":{"banner":"https:\/\/ps.w.org\/baseline-labs-connector\/assets\/banner-772x250.png?rev=3746118","banner_2x":"https:\/\/ps.w.org\/baseline-labs-connector\/assets\/banner-1544x500.png?rev=3746118","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/baseline-labs-connector\/assets\/icon-256x256.png?rev=3746118","icon_2x":"https:\/\/ps.w.org\/baseline-labs-connector\/assets\/icon-256x256.png?rev=3746118","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/baseline-labs-connector\/assets\/screenshot-1.png?rev=3746187","caption":"Settings: paste your Baseline Labs API key, keep schema injection on, and opt in to AI traffic reporting if you want it."},{"src":"https:\/\/ps.w.org\/baseline-labs-connector\/assets\/screenshot-2.png?rev=3746187","caption":"This site: connect and verify the domain, re-check verification, or purge the cached schema."}],"raw_content":"<!--section=description-->\n<p>AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others) do\nnot run JavaScript. They read the raw HTML your server returns and move on. So\nschema added by client-side JavaScript is invisible to them.<\/p>\n\n<p>This plugin fetches the schema.org JSON-LD that Baseline Labs has already\ngenerated for each of your pages and injects it <strong>server-side<\/strong> into the page\n    , inside a <code>&lt;script type=\"application\/ld+json\"&gt;<\/code> block - exactly where a\nnon-JavaScript crawler will find it.<\/p>\n\n<p>It is a thin reflector: it does not generate schema and has no schema logic of\nits own. Baseline Labs generates and stores the schema; the plugin simply\nreflects it into your HTML.<\/p>\n\n<p><strong>It never cloaks.<\/strong> The same schema is served to every visitor, human or bot.\nServing crawlers different content than people is against search-engine\nguidelines and is not something this plugin will ever do.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Hooks <code>wp_head<\/code> and injects the JSON-LD for the current URL.<\/li>\n<li>Caches each page's schema (12\u201324h) so the API is only called on a cache miss,\nand clears that cache within minutes when Baseline regenerates your schema.<\/li>\n<li>Corrects or supplies your page titles and descriptions, when you switch that\non in your Baseline account.<\/li>\n<li>Fails open: if the API is unreachable or has no schema for a page, the plugin\nemits nothing and never breaks the page.<\/li>\n<li>Reports injection failures back to your Baseline account so you can see them.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>A free Baseline Labs account and an API key. Schema generation and injection\nare included on the free plan for one site; paid plans raise the page limit\nand refresh your schema more often.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin talks to Baseline Labs (https:\/\/baselinelabs.ai) - its whole\npurpose is to connect your site to that account. Nothing is sent until you\nconnect the site with your API key, and the traffic reporting in items 2, 3\nand 6 stays <strong>off until you switch it on<\/strong> under Settings \u2192 Baseline\nConnector. Every call it makes:<\/p>\n\n<ol>\n<li><strong>Fetching your schema.<\/strong> On a cache miss, one request per page asking for\nthe JSON-LD Baseline generated for that URL. Sends the domain and path.<\/li>\n<li><p><strong>Reporting AI-bot requests.<\/strong> A batch, at most every few minutes via\nWP-Cron, of the AI crawler requests your site received: user agent, path,\nstatus, timestamp. <strong>No full IP addresses and nothing identifying your\nhuman visitors.<\/strong> Only requests whose user agent looks like a known AI bot\nare ever included, plus requests for paths that only automated scanners ask\nfor (files like <code>.env<\/code>, <code>.git<\/code> and <code>wp-login.php<\/code>, whatever the user agent\nclaims to be - nothing is recorded at all while you are signed in), plus\nvisits that arrived from a known AI answer engine (ChatGPT, Perplexity and\nthe like), for which the same fields plus the referring site are sent and\nnothing else.<\/p>\n\n<p>A bot request may also carry one true\/false flag saying whether it came\nfrom an IP range that crawler publicly announces, and the <strong>network block<\/strong>\nthe request came from. <strong>Neither sends us a visitor's address.<\/strong> The\npublished ranges are downloaded to your server (item 10) and the address is\ncompared against them inside PHP; what leaves your site is one true or\nfalse plus the surrounding block - the first three numbers of an IPv4\naddress with the last replaced by a zero (<code>203.0.113.0\/24<\/code>, a block of 256\naddresses), or the equivalent <code>\/48<\/code> for IPv6. The address itself is never\nwritten to your database, never put in a batch, never logged, and never\nhashed either - a hashed address is still an identifier. A block identifies\na network rather than a machine, and it is what lets your dashboard tell\none crawler's run of visits from another's and check that a request\nclaiming to be Googlebot really came from Google.<\/p>\n\n<p>Off by default; switch it on or off under Settings \u2192 Baseline Connector.<\/p><\/li>\n<li><strong>Confirming delivery.<\/strong> Once a day, the plugin asks Baseline how many bot\nhits it has actually received for this site in the last 24 hours, and warns\nyou if the answer is none while the plugin believes it has been sending\nthem. Sends your domain and API key; returns counts only.<\/li>\n<li><strong>Setting up.<\/strong> When you click <strong>Connect &amp; verify this site<\/strong> (and only\nthen), the plugin registers the domain with your account, collects its\ntokens and asks Baseline to verify ownership. Verifying means Baseline\nfetches your homepage and looks for the tag this plugin prints there. Two\nthings happen alongside it, both only on that click: the plugin clears your\nsite's page cache first (WP Rocket, LiteSpeed, W3 Total Cache, WP Super\nCache, WP-Optimize, WP Fastest Cache, Cloudflare - whichever you run), so\nBaseline is not handed a copy of your homepage saved before the plugin was\ninstalled; and the plugin answers a small read-only address of its own,\n   \/wp-json\/baseline\/v1\/verify, which Baseline can read when your cache is\nstill serving the old page. That address returns only what the tag in your\npage already says - the same ownership token, the plugin version, and which\nfeatures are switched on. No key, no settings, no visitor data, and nothing\nthere can change anything.<\/li>\n<li><strong>Reporting its own errors.<\/strong> If injection or delivery fails, a short\ndiagnostic goes to your account so the failure is visible on the Baseline\nside too. No page content and no visitor data.<\/li>\n<li><strong>Measuring visits from AI answer engines.<\/strong> This is the one call your\n<strong>visitors' browsers<\/strong> make rather than your server. While reporting is on,\nthe plugin adds a small script tag to your pages; it records the page\nvisited and the referring site, so you can see when ChatGPT, Perplexity or\nGoogle's AI surfaces send someone to you. <strong>No IP address is stored, no\ncookie is set, and no cross-site profile is built<\/strong> - the visitor id is a\nrandom string kept in the browser's local storage for your domain alone.\nControlled by the same opt-in toggle as bot reporting. Where your visitors\nmust consent to analytics, you are responsible for collecting it.<\/li>\n<li><strong>Checking for a cache in front of your site.<\/strong> At most twice a day, the\nplugin requests your own homepage from your own server to see whether a\npage cache answers before WordPress does. It goes to your site, not to us;\nonly the resulting one-word verdict is sent with the next bot batch, so we\ncan tell you honestly whether your crawler counts are complete.<\/li>\n<li><p><strong>Syncing your site profile and published pages.<\/strong> Once a day, the plugin\nsends a description of the site so your dashboard can compare what you\nhave published against what AI crawlers actually read: WordPress and PHP\nversion, language, permalink style, whether search engines are\ndiscouraged, the active theme and any active SEO plugin, plus the list of\n<strong>published, public<\/strong> pages (path, title, type, published and modified\ndates). Never drafts, never private content, never post bodies - only\nfacts already visible to anyone with a browser. Same toggle as bot\nreporting; <code>wp baseline sync-site<\/code> or the settings button runs it on\ndemand.<\/p>\n\n<p>Publishing or editing a post also sends that <strong>one<\/strong> page's entry down the\nsame route, so Baseline can refresh its schema straight away instead of\nre-reading your whole site on a timer. Same fields, one row, at most once\nevery thirty seconds, and it happens after the page you were saving has\nalready been handed back to you. If it does not get through, the daily\nsync above carries it.<\/p><\/li>\n<li><strong>Fetching a page's title and description.<\/strong> Only while metadata\ncorrection or generation is switched on in your Baseline account. On a\ncache miss, one request per page asking what the title and description for\nthat URL should be, and it sends the same domain and path as item 1 and\nnothing else. Turn either switch off in your account and the plugin stops\nasking. The answer is cached the same way your schema is, and a page\nBaseline has nothing to say about is remembered as such so it is not asked\nabout again on every load.<\/li>\n<li><strong>Downloading the AI-agent list.<\/strong> About once a day the plugin fetches the\nlist of user agents that identify AI crawlers, so it knows what to look\nfor without asking us about each request. The same file carries the IP\nranges those crawlers publish and the answer-engine sites worth\nrecognising as referrers. It is a list of names and numbers, not code -\nnothing downloaded here is ever executed. <strong>It is anonymous<\/strong> - no site\nURL, no API key, no query string. The download only ever comes to you;\nnothing about your visitors goes out on it.<\/li>\n<\/ol>\n\n<p>Privacy policy: https:\/\/baselinelabs.ai\/privacy\nTerms: https:\/\/baselinelabs.ai\/terms<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin and activate it.<\/li>\n<li>Go to <strong>Settings \u2192 Baseline Connector<\/strong>.<\/li>\n<li>Paste your Baseline API key and save.<\/li>\n<li>Click <strong>Connect &amp; verify this site<\/strong>.<\/li>\n<li>That's it - schema appears in your pages as Baseline generates it.<\/li>\n<\/ol>\n\n<p>WP-CLI:<\/p>\n\n<pre><code>wp baseline set-key bl_xxx &amp;&amp; wp baseline enable &amp;&amp; wp baseline connect\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20slow%20down%20my%20site%3F\"><h3>Does this slow down my site?<\/h3><\/dt>\n<dd><p>On a cache miss the plugin makes one short (max 2s) request to fetch a page's\nschema, then caches it for 12\u201324 hours. Warm page loads do no network work.<\/p><\/dd>\n<dt id=\"where%20is%20my%20api%20key%20stored%3F\"><h3>Where is my API key stored?<\/h3><\/dt>\n<dd><p>Encrypted at rest in the WordPress options table, using a key derived from your\nsite's own secret salts. (If the libsodium PHP extension is unavailable it falls\nback to base64 obfuscation - install libsodium for real encryption.) Anyone with\nboth your database and your <code>wp-config.php<\/code> can still read it; that is inherent\nto WordPress.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.12.3<\/h4>\n\n<ul>\n<li>Traffic reporting is now opt-in: off on a new install until you switch it on\nin Settings. Sites that already had it on keep it.<\/li>\n<li>The visitor tracker no longer falls back to a cookie.<\/li>\n<li>The tracker script is enqueued through WordPress instead of printed by hand.<\/li>\n<li>Class names carry the full Baseline_Connector_ prefix.<\/li>\n<\/ul>\n\n<h4>2.12.2<\/h4>\n\n<ul>\n<li>Performance: a scanner sweeping your site for hundreds of addresses at once\ncan no longer tie up your server while the plugin records it. Each request\nused to wait up to two seconds to record itself after the page was sent;\nscanner requests now never wait, and are recorded once per address per\nminute, up to 30 addresses a minute. AI crawler visits wait at most a fifth\nof a second. On a small hosting plan that is the difference between a scan\nyour visitors never notice and one that uses up every worker the site has.<\/li>\n<li>During such a burst some scanner requests, and occasionally a crawler visit,\ngo unrecorded rather than slow your site down.<\/li>\n<\/ul>\n\n<h4>2.12.1<\/h4>\n\n<ul>\n<li>Security: a corrected page title is now escaped before WordPress prints it\ninto your page's title tag, and any markup is removed from corrected titles\nand descriptions. WordPress prints a title supplied this way exactly as it\nreceives it, so the plugin now does the escaping itself.<\/li>\n<li>Security: the schema written into your pages is encoded so that no text\ninside it can end the script tag it sits in, whatever the text says.<\/li>\n<li>Missing pages no longer ask Baseline for schema or metadata. A page that\nreturns \"not found\" has none, and scanners probing hundreds of missing\naddresses were costing a lookup and a stored entry for each one.<\/li>\n<\/ul>\n\n<h4>2.12.0<\/h4>\n\n<ul>\n<li>Each crawler request now tells you which network it came from, so your\ndashboard can say whether a run of visits was one crawler or several, and\nwhether something calling itself Googlebot really came from Google. Your\nvisitors' addresses still never leave your site: the address is shortened on\nyour own server to the surrounding block of 256 addresses, which names a\nnetwork rather than a machine, and only that block is sent.<\/li>\n<li>Scanners are reported now, so their 404s stop making your site look broken.\nEvery site on the internet is swept for files like <code>.env<\/code>, <code>.git<\/code> and\n  wp-login.php by software that never reads a page, and it usually claims to\nbe an ordinary browser - so it was invisible here while its missing-page\nerrors counted against you. Requests for those paths are reported whatever\nthey claim to be, and your dashboard files them as suspicious traffic rather\nthan as readers. Your own visits to your login page are not included: while\nyou are signed in, none of this is recorded.<\/li>\n<\/ul>\n\n<h4>2.11.0<\/h4>\n\n<ul>\n<li>If Baseline is unreachable, your pages stop waiting for it. Each page load\nalready gave up after two seconds, but every page whose stored copy had\nexpired paid those two seconds again. After three failed attempts the plugin\nnow stops calling for two minutes and serves the schema it last held, so an\noutage at our end costs your visitors nothing after the first few seconds.\nIt reconnects on its own.<\/li>\n<\/ul>\n\n<h4>2.10.0<\/h4>\n\n<ul>\n<li>Publishing or editing a post now tells Baseline immediately, so your schema\nis refreshed for that page within minutes instead of on the next full crawl\nof your site. It is one small message about the one page, sent after your\nsave has already finished, at most once every thirty seconds.<\/li>\n<li>Because Baseline now knows which pages changed, it stops re-reading the ones\nthat did not. A large site was being fetched thousands of times a day to\nfind a handful of edits; it is a handful of requests a day now, plus one\nfull pass a week to catch theme and menu changes.<\/li>\n<li>Fixed: when Baseline regenerated your schema or corrected a title, the\nplugin cleared its own copy but not your page cache, so pages already stored\nby WP Rocket, LiteSpeed and the like kept serving the old version until they\nexpired on their own. Your page cache is now cleared too, at most once every\nten minutes.<\/li>\n<\/ul>\n\n<h4>2.9.1<\/h4>\n\n<ul>\n<li>On a site running no SEO plugin, a page whose description Baseline supplies\nnow carries exactly one description tag - ours. Before this, a theme that\nprinted its own left the page with two.<\/li>\n<\/ul>\n\n<h4>2.9.0<\/h4>\n\n<ul>\n<li>Your page titles and descriptions can now be corrected or filled in by\nBaseline. Switch it on in your Baseline account under Rolling metadata; the\nplugin asks for each page's title and description and prints what comes back,\nthrough Yoast, Rank Math or All in One SEO where one of those is running, and\non its own where none is. Settings \u2192 Baseline Connector shows whether it is\non. There is no switch here, because your account is where you chose it.<\/li>\n<li>A site that no AI crawler has visited yet now checks in with Baseline once an\nhour. Everything the server tells this plugin - that your schema was\nregenerated, that your metadata changed, which of the above is switched on -\nrides back on the batch of crawler requests it sends, so a site with no\ncrawler traffic to send never heard any of it.<\/li>\n<li>The daily site sync now includes each page's own description, so Baseline\ncompares its suggestions against what your pages really say rather than\nagainst a copy read through your page cache.<\/li>\n<\/ul>\n\n<h4>2.8.0<\/h4>\n\n<ul>\n<li>Verification no longer fails on a cached site. Baseline verifies your site by\nreading a tag this plugin prints in your pages, and a page cache was handing\nit the copy of your homepage saved before the plugin was installed - so a\ncorrectly installed plugin reported \"tag not found\", repeatedly. The plugin\nnow clears your page cache before verifying, offers Baseline a second address\nno cache stores, and says plainly that a cache or Cloudflare can take up to\nhalf an hour rather than showing a red failure.<\/li>\n<li>Regenerated schema appears within minutes instead of up to a day. Each page's\nschema was cached for 12 to 24 hours with nothing to tell it that Baseline\nhad produced a new version, so a regeneration was invisible for half a day.\nThe plugin is now told, and clears the cache when it happens - and after the\nplugin itself is updated.<\/li>\n<li>The visitor-measurement script is now excluded from JavaScript optimisation\nin WP Rocket, LiteSpeed Cache and Autoptimize, and carries its reporting\naddress on the tag. A minifier that copied the script onto your own domain,\ncombined with delayed JavaScript, could leave every visit unrecorded with\nnothing to show for it.<\/li>\n<\/ul>\n\n<h4>2.7.0<\/h4>\n\n<ul>\n<li>Updates now come from the WordPress.org plugin directory like every other\nplugin you have installed. The self-updater this replaces fetched new\nversions from our own server, which the directory does not permit and which\nyou should not have to trust us about. If you installed an earlier copy from\na zip rather than from the directory, install it once from the directory to\nkeep receiving updates.<\/li>\n<li>Request data read from the server (user agents, referrers, query strings) is\nnow unslashed and sanitised at the point it is read rather than where it is\nused.<\/li>\n<\/ul>\n\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>Crawler hits are now checked against the IP ranges each AI company publishes,\nso \"GPTBot read you 400 times\" is a claim someone verified rather than a user\nagent string taken at its word. <strong>No IP address leaves your site or is stored\nanywhere<\/strong> - the check happens on your server against a list downloaded to it,\nand only a true\/false result is reported.<\/li>\n<li>People who arrive from ChatGPT, Perplexity and other AI answer engines are\nnow recorded by your server as well as by the tracker script, so visitors\nwith JavaScript blocked stop going uncounted.<\/li>\n<li>When a page cache is in front of WordPress, the plugin now names the layer\nand tells you exactly why it hides traffic - whether the page is answered by\nyour webserver, by a drop-in before plugins load, or at a CDN edge - instead\nof one generic sentence. If your cache is set to let crawlers straight\nthrough, it says that too, because then your bot counts are nearly complete\neven though the cache is there.<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>Site Intelligence. Once a day the plugin now sends your site profile\n(WordPress\/PHP version, language, permalink style, the \"discourage search\nengines\" flag, active theme and SEO plugins) and the list of published\npages with their titles and modified dates. Your Baseline dashboard uses\nit to show which published pages AI crawlers have never read, which ones\nyou have edited since they last crawled, and to warn you when a WordPress\nsetting is quietly hiding you from search and AI engines. Public facts\nonly - no drafts, no private content, no post bodies.<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>One install now covers both halves of the picture. As well as recording the\nAI crawlers that read your site, the plugin measures the people AI answer\nengines send you - no second snippet to paste. It is the same toggle, and\nthe same no-IP, no-cookie promise.<\/li>\n<li>Cache detection now runs by itself, twice a day. It only ever ran when\nsomebody opened the settings screen, so most sites reported \"we could not\ndetermine whether a cache sits in front of you\" forever - and your crawler\ncounts were caveated more heavily than they needed to be.<\/li>\n<\/ul>\n\n<h4>2.3.2<\/h4>\n\n<ul>\n<li>A fresh install shows its first schema in minutes, not an hour. The\n\"no schema yet\" result is now cached for 5 minutes instead of 60, and\na successful verification clears the schema cache, so pages viewed\nbefore connecting no longer pin the empty state.<\/li>\n<\/ul>\n\n<h4>2.3.1<\/h4>\n\n<ul>\n<li>The settings screen no longer rejects every valid API key. Key validation\nnow uses an endpoint that accepts API keys; it previously hit a\nsession-only endpoint, so saving a correct key reported\n\"validation failed: Not authenticated\".<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>Works on a free Baseline account. Schema generation and injection no longer\nneed a paid plan.<\/li>\n<li>The <code>baseline-channel<\/code> marker is now stored during channel registration, so\nit appears even if domain setup fails afterwards.<\/li>\n<li>Detects silent delivery loss. Baseline accepts bot-hit batches without\nsaying whether the token was recognised, so a wrong token used to discard\nevery hit while this screen showed \"sent\". The plugin now asks once a day\nwhat Baseline actually received, and warns when the two disagree.<\/li>\n<li>Warns when bot reporting is on but the site has no token yet.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>The plugin can now update itself. Before this, an installed copy stayed on\nwhatever version it was first given - a fix could be shipped and never\nreach anyone.<\/li>\n<li>Emits a single unified <code>baseline-channel<\/code> marker carrying ownership,\nchannel, version and capabilities. A site running only the free bot\nreporting previously announced no channel at all, because the old marker\nwas written alongside the schema and skipped when injection was off.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Renamed from \"MarkupSchema Schema Injector\" to \"Baseline Connector\".<\/li>\n<li>WP-CLI namespace is now <code>wp baseline<\/code>. <code>wp markupschema<\/code> still works as a\ndeprecated alias and will be removed in the next release.<\/li>\n<li>Default API host is now <code>https:\/\/baselinelabs.ai<\/code>. Override it with the\n  BASELINE_CONNECTOR_API_BASE constant in <code>wp-config.php<\/code>.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Injects your Baseline Labs schema.org JSON-LD into the raw HTML of your pages so AI crawlers can read it. Identical schema for every visitor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/383052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=383052"}],"author":[{"embeddable":true,"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/baselinelabs"}],"wp:attachment":[{"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=383052"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=383052"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=383052"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=383052"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=383052"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/mya.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=383052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}