Title: Baseline Labs Connector
Author: baselinelabs
Published: <strong>October 14, 2026</strong>
Last modified: October 14, 2026

---

Search plugins

![](https://ps.w.org/baseline-labs-connector/assets/banner-772x250.png?rev=3746118)

![](https://ps.w.org/baseline-labs-connector/assets/icon-256x256.png?rev=3746118)

# Baseline Labs Connector

 By [baselinelabs](https://profiles.wordpress.org/baselinelabs/)

[Download](https://downloads.wordpress.org/plugin/baseline-labs-connector.2.12.3.zip)

 * [Details](https://wordpress.org/plugins/baseline-labs-connector/#description)
 * [Reviews](https://wordpress.org/plugins/baseline-labs-connector/#reviews)
 *  [Installation](https://wordpress.org/plugins/baseline-labs-connector/#installation)
 * [Development](https://wordpress.org/plugins/baseline-labs-connector/#developers)

 [Support](https://wordpress.org/support/plugin/baseline-labs-connector/)

## Description

AI crawlers (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and others) do
 not
run JavaScript. They read the raw HTML your server returns and move on. So schema
added by client-side JavaScript is invisible to them.

This plugin fetches the schema.org JSON-LD that Baseline Labs has already
 generated
for each of your pages and injects it **server-side** into the page , inside a `
<script type="application/ld+json">` block – exactly where a non-JavaScript crawler
will find it.

It is a thin reflector: it does not generate schema and has no schema logic of
 
its own. Baseline Labs generates and stores the schema; the plugin simply reflects
it into your HTML.

**It never cloaks.** The same schema is served to every visitor, human or bot.
 
Serving crawlers different content than people is against search-engine guidelines
and is not something this plugin will ever do.

#### What it does

 * Hooks `wp_head` and injects the JSON-LD for the current URL.
 * Caches each page’s schema (12–24h) so the API is only called on a cache miss,
   
   and clears that cache within minutes when Baseline regenerates your schema.
 * Corrects or supplies your page titles and descriptions, when you switch that
   
   on in your Baseline account.
 * Fails open: if the API is unreachable or has no schema for a page, the plugin
   
   emits nothing and never breaks the page.
 * Reports injection failures back to your Baseline account so you can see them.

#### Requirements

 * A free Baseline Labs account and an API key. Schema generation and injection
   
   are included on the free plan for one site; paid plans raise the page limit and
   refresh your schema more often.

### External services

This plugin talks to Baseline Labs (https://baselinelabs.ai) – its whole
 purpose
is to connect your site to that account. Nothing is sent until you connect the site
with your API key, and the traffic reporting in items 2, 3 and 6 stays **off until
you switch it on** under Settings  Baseline Connector. Every call it makes:

 1.  **Fetching your schema.** On a cache miss, one request per page asking for
      the
     JSON-LD Baseline generated for that URL. Sends the domain and path.
 2.  **Reporting AI-bot requests.** A batch, at most every few minutes via
      WP-Cron,
     of the AI crawler requests your site received: user agent, path, status, timestamp.**
     No full IP addresses and nothing identifying your human visitors. Only requests
     whose user agent looks like a known AI bot are ever included, plus requests for
     paths that only automated scanners ask for (files like `.env`, `.git` and `wp-
     login.php`, whatever the user agent claims to be – nothing is recorded at all 
     while you are signed in), plus visits that arrived from a known AI answer engine(
     ChatGPT, Perplexity and the like), for which the same fields plus the referring
     site are sent and nothing else.
 3.  A bot request may also carry one true/false flag saying whether it came
      from 
     an IP range that crawler publicly announces, and the **network block** the request
     came from. **Neither sends us a visitor’s address.** The published ranges are 
     downloaded to your server (item 10) and the address is compared against them inside
     PHP; what leaves your site is one true or false plus the surrounding block – the
     first three numbers of an IPv4 address with the last replaced by a zero (`203.0.113.0/
     24`, a block of 256 addresses), or the equivalent `/48` for IPv6. The address 
     itself is never written to your database, never put in a batch, never logged, 
     and never hashed either – a hashed address is still an identifier. A block identifies
     a network rather than a machine, and it is what lets your dashboard tell one crawler’s
     run of visits from another’s and check that a request claiming to be Googlebot
     really came from Google.
 4.  Off by default; switch it on or off under Settings  Baseline Connector.
 5.  **Confirming delivery.** Once a day, the plugin asks Baseline how many bot
      hits
     it has actually received for this site in the last 24 hours, and warns you if 
     the answer is none while the plugin believes it has been sending them. Sends your
     domain and API key; returns counts only.
 6.  **Setting up.** When you click **Connect & verify this site** (and only
      then),
     the plugin registers the domain with your account, collects its tokens and asks
     Baseline to verify ownership. Verifying means Baseline fetches your homepage and
     looks for the tag this plugin prints there. Two things happen alongside it, both
     only on that click: the plugin clears your site’s page cache first (WP Rocket,
     LiteSpeed, W3 Total Cache, WP Super Cache, WP-Optimize, WP Fastest Cache, Cloudflare–
     whichever you run), so Baseline is not handed a copy of your homepage saved before
     the plugin was installed; and the plugin answers a small read-only address of 
     its own, /wp-json/baseline/v1/verify, which Baseline can read when your cache 
     is still serving the old page. That address returns only what the tag in your 
     page already says – the same ownership token, the plugin version, and which features
     are switched on. No key, no settings, no visitor data, and nothing there can change
     anything.
 7.  **Reporting its own errors.** If injection or delivery fails, a short
      diagnostic
     goes to your account so the failure is visible on the Baseline side too. No page
     content and no visitor data.
 8.  **Measuring visits from AI answer engines.** This is the one call your
      **visitors’
     browsers** make rather than your server. While reporting is on, the plugin adds
     a small script tag to your pages; it records the page visited and the referring
     site, so you can see when ChatGPT, Perplexity or Google’s AI surfaces send someone
     to you. **No IP address is stored, no cookie is set, and no cross-site profile
     is built – the visitor id is a random string kept in the browser’s local storage
     for your domain alone. Controlled by the same opt-in toggle as bot reporting. 
     Where your visitors must consent to analytics, you are responsible for collecting
     it.
 9.  **Checking for a cache in front of your site.** At most twice a day, the
      plugin
     requests your own homepage from your own server to see whether a page cache answers
     before WordPress does. It goes to your site, not to us; only the resulting one-
     word verdict is sent with the next bot batch, so we can tell you honestly whether
     your crawler counts are complete.
 10. **Syncing your site profile and published pages.** Once a day, the plugin
      sends
     a description of the site so your dashboard can compare what you have published
     against what AI crawlers actually read: WordPress and PHP version, language, permalink
     style, whether search engines are discouraged, the active theme and any active
     SEO plugin, plus the list of **published, public** pages (path, title, type, published
     and modified dates). Never drafts, never private content, never post bodies – 
     only facts already visible to anyone with a browser. Same toggle as bot reporting;`
     wp baseline sync-site` or the settings button runs it on demand.
 11. Publishing or editing a post also sends that **one** page’s entry down the
      same
     route, so Baseline can refresh its schema straight away instead of re-reading 
     your whole site on a timer. Same fields, one row, at most once every thirty seconds,
     and it happens after the page you were saving has already been handed back to 
     you. If it does not get through, the daily sync above carries it.
 12. **Fetching a page’s title and description.** Only while metadata
      correction or
     generation is switched on in your Baseline account. On a cache miss, one request
     per page asking what the title and description for that URL should be, and it 
     sends the same domain and path as item 1 and nothing else. Turn either switch 
     off in your account and the plugin stops asking. The answer is cached the same
     way your schema is, and a page Baseline has nothing to say about is remembered
     as such so it is not asked about again on every load.
 13. **Downloading the AI-agent list.** About once a day the plugin fetches the
      list
     of user agents that identify AI crawlers, so it knows what to look for without
     asking us about each request. The same file carries the IP ranges those crawlers
     publish and the answer-engine sites worth recognising as referrers. It is a list
     of names and numbers, not code – nothing downloaded here is ever executed. **It
     is anonymous** – no site URL, no API key, no query string. The download only ever
     comes to you; nothing about your visitors goes out on it.

Privacy policy: https://baselinelabs.ai/privacy
 Terms: https://baselinelabs.ai/
terms

## Screenshots

[⌊Settings: paste your Baseline Labs API key, keep schema injection on, and opt 
in to AI traffic reporting if you want it.⌉⌊Settings: paste your Baseline Labs API
key, keep schema injection on, and opt in to AI traffic reporting if you want it
.⌉[

Settings: paste your Baseline Labs API key, keep schema injection on, and opt in
to AI traffic reporting if you want it.

[⌊This site: connect and verify the domain, re-check verification, or purge the 
cached schema.⌉⌊This site: connect and verify the domain, re-check verification,
or purge the cached schema.⌉[

This site: connect and verify the domain, re-check verification, or purge the cached
schema.

## Installation

 1. Upload the plugin and activate it.
 2. Go to **Settings  Baseline Connector**.
 3. Paste your Baseline API key and save.
 4. Click **Connect & verify this site**.
 5. That’s it – schema appears in your pages as Baseline generates it.

WP-CLI:

    ```
    wp baseline set-key bl_xxx && wp baseline enable && wp baseline connect
    ```

## FAQ

### Does this slow down my site?

On a cache miss the plugin makes one short (max 2s) request to fetch a page’s
 schema,
then caches it for 12–24 hours. Warm page loads do no network work.

### Where is my API key stored?

Encrypted at rest in the WordPress options table, using a key derived from your

site’s own secret salts. (If the libsodium PHP extension is unavailable it falls
back to base64 obfuscation – install libsodium for real encryption.) Anyone with
both your database and your `wp-config.php` can still read it; that is inherent 
to WordPress.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Baseline Labs Connector” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ baselinelabs ](https://profiles.wordpress.org/baselinelabs/)

[Translate “Baseline Labs Connector” into your language.](https://translate.wordpress.org/projects/wp-plugins/baseline-labs-connector)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/baseline-labs-connector/),
check out the [SVN repository](https://plugins.svn.wordpress.org/baseline-labs-connector/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/baseline-labs-connector/)
by [RSS](https://plugins.trac.wordpress.org/log/baseline-labs-connector/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 2.12.3

 * Traffic reporting is now opt-in: off on a new install until you switch it on
   
   in Settings. Sites that already had it on keep it.
 * The visitor tracker no longer falls back to a cookie.
 * The tracker script is enqueued through WordPress instead of printed by hand.
 * Class names carry the full Baseline_Connector_ prefix.

#### 2.12.2

 * Performance: a scanner sweeping your site for hundreds of addresses at once
    
   can no longer tie up your server while the plugin records it. Each request used
   to wait up to two seconds to record itself after the page was sent; scanner requests
   now never wait, and are recorded once per address per minute, up to 30 addresses
   a minute. AI crawler visits wait at most a fifth of a second. On a small hosting
   plan that is the difference between a scan your visitors never notice and one
   that uses up every worker the site has.
 * During such a burst some scanner requests, and occasionally a crawler visit,
   
   go unrecorded rather than slow your site down.

#### 2.12.1

 * Security: a corrected page title is now escaped before WordPress prints it
    into
   your page’s title tag, and any markup is removed from corrected titles and descriptions.
   WordPress prints a title supplied this way exactly as it receives it, so the 
   plugin now does the escaping itself.
 * Security: the schema written into your pages is encoded so that no text
    inside
   it can end the script tag it sits in, whatever the text says.
 * Missing pages no longer ask Baseline for schema or metadata. A page that
    returns“
   not found” has none, and scanners probing hundreds of missing addresses were 
   costing a lookup and a stored entry for each one.

#### 2.12.0

 * Each crawler request now tells you which network it came from, so your
    dashboard
   can say whether a run of visits was one crawler or several, and whether something
   calling itself Googlebot really came from Google. Your visitors’ addresses still
   never leave your site: the address is shortened on your own server to the surrounding
   block of 256 addresses, which names a network rather than a machine, and only
   that block is sent.
 * Scanners are reported now, so their 404s stop making your site look broken.
    
   Every site on the internet is swept for files like `.env`, `.git` and wp-login.
   php by software that never reads a page, and it usually claims to be an ordinary
   browser – so it was invisible here while its missing-page errors counted against
   you. Requests for those paths are reported whatever they claim to be, and your
   dashboard files them as suspicious traffic rather than as readers. Your own visits
   to your login page are not included: while you are signed in, none of this is
   recorded.

#### 2.11.0

 * If Baseline is unreachable, your pages stop waiting for it. Each page load
    already
   gave up after two seconds, but every page whose stored copy had expired paid 
   those two seconds again. After three failed attempts the plugin now stops calling
   for two minutes and serves the schema it last held, so an outage at our end costs
   your visitors nothing after the first few seconds. It reconnects on its own.

#### 2.10.0

 * Publishing or editing a post now tells Baseline immediately, so your schema
    
   is refreshed for that page within minutes instead of on the next full crawl of
   your site. It is one small message about the one page, sent after your save has
   already finished, at most once every thirty seconds.
 * Because Baseline now knows which pages changed, it stops re-reading the ones
   
   that did not. A large site was being fetched thousands of times a day to find
   a handful of edits; it is a handful of requests a day now, plus one full pass
   a week to catch theme and menu changes.
 * Fixed: when Baseline regenerated your schema or corrected a title, the
    plugin
   cleared its own copy but not your page cache, so pages already stored by WP Rocket,
   LiteSpeed and the like kept serving the old version until they expired on their
   own. Your page cache is now cleared too, at most once every ten minutes.

#### 2.9.1

 * On a site running no SEO plugin, a page whose description Baseline supplies
    
   now carries exactly one description tag – ours. Before this, a theme that printed
   its own left the page with two.

#### 2.9.0

 * Your page titles and descriptions can now be corrected or filled in by
    Baseline.
   Switch it on in your Baseline account under Rolling metadata; the plugin asks
   for each page’s title and description and prints what comes back, through Yoast,
   Rank Math or All in One SEO where one of those is running, and on its own where
   none is. Settings  Baseline Connector shows whether it is on. There is no switch
   here, because your account is where you chose it.
 * A site that no AI crawler has visited yet now checks in with Baseline once an
   
   hour. Everything the server tells this plugin – that your schema was regenerated,
   that your metadata changed, which of the above is switched on – rides back on
   the batch of crawler requests it sends, so a site with no crawler traffic to 
   send never heard any of it.
 * The daily site sync now includes each page’s own description, so Baseline
    compares
   its suggestions against what your pages really say rather than against a copy
   read through your page cache.

#### 2.8.0

 * Verification no longer fails on a cached site. Baseline verifies your site by
   
   reading a tag this plugin prints in your pages, and a page cache was handing 
   it the copy of your homepage saved before the plugin was installed – so a correctly
   installed plugin reported “tag not found”, repeatedly. The plugin now clears 
   your page cache before verifying, offers Baseline a second address no cache stores,
   and says plainly that a cache or Cloudflare can take up to half an hour rather
   than showing a red failure.
 * Regenerated schema appears within minutes instead of up to a day. Each page’s
   
   schema was cached for 12 to 24 hours with nothing to tell it that Baseline had
   produced a new version, so a regeneration was invisible for half a day. The plugin
   is now told, and clears the cache when it happens – and after the plugin itself
   is updated.
 * The visitor-measurement script is now excluded from JavaScript optimisation
    
   in WP Rocket, LiteSpeed Cache and Autoptimize, and carries its reporting address
   on the tag. A minifier that copied the script onto your own domain, combined 
   with delayed JavaScript, could leave every visit unrecorded with nothing to show
   for it.

#### 2.7.0

 * Updates now come from the WordPress.org plugin directory like every other
    plugin
   you have installed. The self-updater this replaces fetched new versions from 
   our own server, which the directory does not permit and which you should not 
   have to trust us about. If you installed an earlier copy from a zip rather than
   from the directory, install it once from the directory to keep receiving updates.
 * Request data read from the server (user agents, referrers, query strings) is
   
   now unslashed and sanitised at the point it is read rather than where it is used.

#### 2.6.0

 * Crawler hits are now checked against the IP ranges each AI company publishes,
   
   so “GPTBot read you 400 times” is a claim someone verified rather than a user
   agent string taken at its word. **No IP address leaves your site or is stored
   anywhere – the check happens on your server against a list downloaded to it, 
   and only a true/false result is reported.
 * People who arrive from ChatGPT, Perplexity and other AI answer engines are
    now
   recorded by your server as well as by the tracker script, so visitors with JavaScript
   blocked stop going uncounted.
 * When a page cache is in front of WordPress, the plugin now names the layer
    and
   tells you exactly why it hides traffic – whether the page is answered by your
   webserver, by a drop-in before plugins load, or at a CDN edge – instead of one
   generic sentence. If your cache is set to let crawlers straight through, it says
   that too, because then your bot counts are nearly complete even though the cache
   is there.

#### 2.5.0

 * Site Intelligence. Once a day the plugin now sends your site profile
    (WordPress/
   PHP version, language, permalink style, the “discourage search engines” flag,
   active theme and SEO plugins) and the list of published pages with their titles
   and modified dates. Your Baseline dashboard uses it to show which published pages
   AI crawlers have never read, which ones you have edited since they last crawled,
   and to warn you when a WordPress setting is quietly hiding you from search and
   AI engines. Public facts only – no drafts, no private content, no post bodies.

#### 2.4.0

 * One install now covers both halves of the picture. As well as recording the
    
   AI crawlers that read your site, the plugin measures the people AI answer engines
   send you – no second snippet to paste. It is the same toggle, and the same no-
   IP, no-cookie promise.
 * Cache detection now runs by itself, twice a day. It only ever ran when
    somebody
   opened the settings screen, so most sites reported “we could not determine whether
   a cache sits in front of you” forever – and your crawler counts were caveated
   more heavily than they needed to be.

#### 2.3.2

 * A fresh install shows its first schema in minutes, not an hour. The
    “no schema
   yet” result is now cached for 5 minutes instead of 60, and a successful verification
   clears the schema cache, so pages viewed before connecting no longer pin the 
   empty state.

#### 2.3.1

 * The settings screen no longer rejects every valid API key. Key validation
    now
   uses an endpoint that accepts API keys; it previously hit a session-only endpoint,
   so saving a correct key reported “validation failed: Not authenticated”.

#### 2.3.0

 * Works on a free Baseline account. Schema generation and injection no longer
    
   need a paid plan.
 * The `baseline-channel` marker is now stored during channel registration, so
    
   it appears even if domain setup fails afterwards.
 * Detects silent delivery loss. Baseline accepts bot-hit batches without
    saying
   whether the token was recognised, so a wrong token used to discard every hit 
   while this screen showed “sent”. The plugin now asks once a day what Baseline
   actually received, and warns when the two disagree.
 * Warns when bot reporting is on but the site has no token yet.

#### 2.2.0

 * The plugin can now update itself. Before this, an installed copy stayed on
    whatever
   version it was first given – a fix could be shipped and never reach anyone.
 * Emits a single unified `baseline-channel` marker carrying ownership,
    channel,
   version and capabilities. A site running only the free bot reporting previously
   announced no channel at all, because the old marker was written alongside the
   schema and skipped when injection was off.

#### 2.0.0

 * Renamed from “MarkupSchema Schema Injector” to “Baseline Connector”.
 * WP-CLI namespace is now `wp baseline`. `wp markupschema` still works as a
    deprecated
   alias and will be removed in the next release.
 * Default API host is now `https://baselinelabs.ai`. Override it with the
    BASELINE_CONNECTOR_API_BASE
   constant in `wp-config.php`.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **2.12.3**
 *  Last updated **2 days ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.0 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [ai search](https://wordpress.org/plugins/tags/ai-search/)[JSON-LD](https://wordpress.org/plugins/tags/json-ld/)
   [schema](https://wordpress.org/plugins/tags/schema/)[seo](https://wordpress.org/plugins/tags/seo/)
   [structured data](https://wordpress.org/plugins/tags/structured-data/)
 *  [Advanced View](https://wordpress.org/plugins/baseline-labs-connector/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/baseline-labs-connector/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/baseline-labs-connector/reviews/)

## Contributors

 *   [ baselinelabs ](https://profiles.wordpress.org/baselinelabs/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/baseline-labs-connector/)