
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_headand 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
cover five pages on one domain on Free. Standard (EUR 79/month, one domain,
2,500 credits) and Power (EUR 249/month, 10 domains, 20,000 credits) cover
100 pages per domain. Ultimate starts at EUR 749/month, scoped per deployment.
Refresh timing depends on site changes, capacity and caching.
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:
- 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. -
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,.gitandwp-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.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/48for 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.Off by default; switch it on or off under Settings Baseline Connector.
- 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. - 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. - 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. - 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. - 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. -
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-siteor the settings button runs it on
demand.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. - 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. - 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.

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