How to Detect Yoast SEO on Any Website (API + Curl)
Short answer: Yoast SEO leaves a hard-to-miss HTML comment in the page source — <!-- This site is optimized with the Yoast SEO plugin -->. You can spot it with curl -s https://example.com | grep -i yoast, or get a structured JSON answer from the free /demo endpoint with no API key. The rest of this guide explains the fingerprints and how to scale detection across many sites.
Yoast SEO is the most widely installed search-optimization plugin on the web, and it powers SEO for a large share of all WordPress sites. Knowing which sites run it is useful in several ways: SEO agencies use it to qualify leads (a site already invested in SEO tooling is a warmer prospect), competitive researchers use it to understand a competitor’s content stack, and WordPress developers use it to audit which plugins are in play before quoting a migration or maintenance job.
The good news is that Yoast is unusually easy to detect. Unlike server-side frameworks that hide their tracks, Yoast deliberately stamps its presence into the rendered HTML of every page it optimizes. This guide covers exactly what those fingerprints are, how to check for them by hand, and how to automate detection at scale with the DetectZeStack API.
What Is Yoast SEO and Why Detect It
Yoast SEO is a search engine optimization plugin for WordPress (and a handful of other platforms). It manages a site’s meta titles and descriptions, generates XML sitemaps, controls canonical URLs, and—most relevant for detection—injects structured data (JSON-LD schema) into the page so search engines can better understand the content.
Reasons to detect Yoast on a given site:
- Lead qualification for SEO services. A site running Yoast has already signaled it cares about search visibility. That makes it a better-fit prospect for content, link-building, or technical SEO services than a site with no SEO tooling at all.
- Competitive content research. If a competitor uses Yoast, you can infer parts of their on-page SEO workflow and the schema types they emit.
- WordPress plugin audits. Agencies and freelancers auditing a WordPress install want a fast inventory of which plugins are active. Yoast is one of the most common, and detecting it confirms the site is WordPress in the first place.
- Technographic prospecting. Combined with other signals, “runs WordPress + Yoast” is a precise segment to build a targeted outreach list around.
How Yoast SEO Can Be Detected on a Page
Yoast announces itself in the HTML it generates. There are two reliable fingerprints, and both are visible in plain page source—no JavaScript execution or login required.
HTML Fingerprints and Meta Tags
The single most reliable signal is the HTML comment Yoast wraps around its output. On any page optimized by the plugin, you will find a block that looks like this near the closing </head> or in the body:
<!-- This site is optimized with the Yoast SEO plugin v21.5 - https://yoast.com/wordpress/plugins/seo/ -->
<!-- / Yoast SEO plugin. -->
That comment is unambiguous. The plugin even embeds its own version number (here v21.5), which DetectZeStack captures and returns in the version field when present. Sites running Yoast SEO Premium emit a slightly different marker that names the premium edition, but the same “Yoast SEO” signal still applies.
The second signal is the structured-data block Yoast generates. It outputs a JSON-LD schema graph inside a script tag with a distinctive class:
<script type="application/ld+json" class="yoast-schema-graph">
{ "@context": "https://schema.org", "@graph": [ ... ] }
</script>
The class="yoast-schema-graph" attribute is another dead giveaway. Either fingerprint alone is enough to confirm Yoast; most pages emit both.
You can check for these by hand with curl and grep:
$ curl -s https://example.com | grep -i "yoast"
<!-- This site is optimized with the Yoast SEO plugin v21.5 - https://yoast.com/wordpress/plugins/seo/ -->
<script type="application/ld+json" class="yoast-schema-graph">
If you get matches like the above, the site is running Yoast. If grep returns nothing, the site either does not use Yoast or has stripped the comment (uncommon, but possible with aggressive HTML minification).
Why Yoast Implies WordPress
Yoast SEO is, first and foremost, a WordPress plugin. So detecting Yoast tells you two things at once: the site uses Yoast and the site almost certainly runs WordPress. DetectZeStack encodes this relationship explicitly—a Yoast SEO detection implies WordPress—so a Yoast hit will typically appear in the same response alongside a separate WordPress entry under the CMS category. That implication chain means a single scan that finds Yoast is also confirming the underlying CMS for free. If you want to go the other direction and start from the CMS, see how to detect what CMS a website uses.
Note: Yoast is classified under two categories — SEO and WordPress plugins — so it shows up in the categories map under both. That dual classification makes it easy to filter for “all SEO tooling” or “all WordPress plugins” depending on what you are building.
Detect Yoast SEO with the DetectZeStack API
Manual curl | grep works for a single site, but it doesn’t scale, it doesn’t parse the version cleanly, and it won’t tell you what else the site runs. The DetectZeStack API runs the full fingerprint database against the page and returns structured JSON—Yoast included—in one call.
Free Demo Endpoint (No Key Required)
The fastest way to try it is the public /demo endpoint, which runs the same detector pipeline with no authentication. It is IP rate-limited but perfect for a quick check or for confirming the response shape before you integrate:
curl -s "https://detectzestack.com/demo?url=https://example.com" | python3 -m json.tool
The response includes a technologies array. When Yoast is present, you will find an entry like this:
{
"url": "https://example.com",
"domain": "example.com",
"technologies": [
{
"name": "Yoast SEO",
"categories": ["SEO", "WordPress plugins"],
"confidence": 100,
"description": "Yoast SEO is a search engine optimisation plugin for WordPress and other platforms.",
"website": "https://yoast.com/wordpress/plugins/seo/",
"icon": "Yoast SEO.png",
"source": "http",
"version": "21.5",
"cpe": ""
},
{
"name": "WordPress",
"categories": ["CMS", "Blogs"],
"confidence": 100,
"description": "WordPress is a content management system.",
"website": "https://wordpress.org",
"icon": "WordPress.svg",
"source": "http",
"version": "",
"cpe": ""
}
],
"categories": { "SEO": ["Yoast SEO"], "WordPress plugins": ["Yoast SEO"], "CMS": ["WordPress"] },
"meta": { "status_code": 200, "tech_count": 14, "scan_depth": "full" },
"cached": false,
"response_ms": 1842
}
Notice that WordPress appears alongside Yoast because of the implication chain described above, and that the version field carries the plugin version parsed straight from the HTML comment. The confidence of 100 reflects a direct HTML-source match—the strongest signal class.
Authenticated Analyze Endpoint
For production use, sign up on RapidAPI and call /analyze with your key. It returns the same response shape as /demo, without the demo rate limit, and counts against your monthly quota:
curl -s "https://detectzestack.p.rapidapi.com/analyze?url=https://example.com" \
-H "X-RapidAPI-Key: YOUR_KEY" \
-H "X-RapidAPI-Host: detectzestack.p.rapidapi.com" \
| jq '.technologies[] | select(.name == "Yoast SEO")'
That jq filter narrows the output to just the Yoast entry, which is handy when you only care about a single technology:
{
"name": "Yoast SEO",
"categories": ["SEO", "WordPress plugins"],
"confidence": 100,
"version": "21.5"
}
Reading the SEO Category in the Response
If you would rather slice by category than by name, the response’s top-level categories map groups technologies by their category. To pull everything classified as SEO tooling on a site:
curl -s "https://detectzestack.p.rapidapi.com/analyze?url=https://example.com" \
-H "X-RapidAPI-Key: YOUR_KEY" \
-H "X-RapidAPI-Host: detectzestack.p.rapidapi.com" \
| jq '.categories.SEO'
[
"Yoast SEO"
]
This approach generalizes nicely. The same response also surfaces analytics tools like Google Analytics and marketing platforms like HubSpot, so a single call gives you a full picture of a site’s SEO, analytics, and marketing stack at once.
Batch-Detect Yoast SEO Across Many Sites
Checking one site is useful; checking a list is where this gets powerful. The POST /analyze/batch endpoint accepts up to 10 URLs per request and scans them concurrently, returning a result for every domain in one response.
curl -X POST "https://detectzestack.p.rapidapi.com/analyze/batch" \
-H "X-RapidAPI-Key: YOUR_KEY" \
-H "X-RapidAPI-Host: detectzestack.p.rapidapi.com" \
-H "Content-Type: application/json" \
-d '{
"urls": [
"example.com",
"wordpress.org",
"techcrunch.com",
"yoast.com",
"example.org"
]
}'
To turn that into a clean list of which sites use Yoast, loop over your domains in batches of 10 and filter each result for the Yoast entry. Here is a compact Python example:
import requests
API_URL = "https://detectzestack.p.rapidapi.com/analyze/batch"
HEADERS = {
"X-RapidAPI-Key": "YOUR_KEY",
"X-RapidAPI-Host": "detectzestack.p.rapidapi.com",
"Content-Type": "application/json",
}
def chunk(items, size=10):
for i in range(0, len(items), size):
yield items[i:i + size]
domains = ["example.com", "wordpress.org", "techcrunch.com", "yoast.com"]
yoast_sites = []
for batch in chunk(domains):
resp = requests.post(API_URL, json={"urls": batch}, headers=HEADERS)
for item in resp.json().get("results", []):
result = item.get("result") # None if that URL errored
if not result:
continue
techs = [t["name"] for t in result.get("technologies", [])]
if "Yoast SEO" in techs:
yoast_sites.append(result["domain"])
print("Sites using Yoast SEO:", yoast_sites)
Because Yoast implies WordPress, the same scan doubles as a WordPress census of your list. If your goal is specifically to build a WordPress prospect list, the dedicated walkthrough in Find Companies Using WordPress shows how to scale this pattern to thousands of domains and enrich the results.
Tip: Send batch requests with a short delay between them to stay within your plan’s rate limit. Each URL in a batch counts as one request against your monthly quota, so a 10-URL batch consumes 10 requests.
Common Use Cases for Yoast Detection
Putting the pieces together, here are the workflows teams most often build on top of Yoast detection:
| Use Case | What You Filter For |
|---|---|
| SEO agency prospecting | name == "Yoast SEO" |
| WordPress plugin audit | categories contains "WordPress plugins" |
| All SEO tooling on a site | categories.SEO |
| WordPress census of a list | categories.CMS contains "WordPress" |
| Yoast version inventory | Yoast SEO entry's version field |
A few practical notes from running these at scale:
- The version field is best-effort. Yoast embeds its version in the HTML comment, so when that comment is present you get a clean version string. If a site strips comments during minification, you may still detect Yoast via the
yoast-schema-graphblock but without a version. - Yoast is not the only SEO plugin. Sites may instead run alternatives, so don’t treat “no Yoast” as “no SEO tooling.” Filter by the full SEO category to catch the broader segment.
- Pair it with other signals. “WordPress + Yoast + a specific analytics tool” is a far more precise segment than any single signal, and every one of those comes back in the same response.
Related Reading
- Check If a Website Uses WordPress — The CMS Yoast implies, detected via headers, meta tags, and file paths
- How to Detect What CMS a Website Uses — WordPress, Shopify, Squarespace, and 30+ CMS platforms
- Find Companies Using WordPress: Build Targeted Lead Lists — Scale single-site detection into a 1,000-domain prospect list
- How to Detect Google Analytics on Any Website — Pair SEO signals with analytics detection in the same response
- How to Detect HubSpot on Any Website — Add marketing-stack signals to your technographic segment
- Website Technology Checker API — Full API reference and integration guide
- How to Batch-Scan 1,000 Websites — Scale the /analyze/batch pattern end to end
- Detect Any Website's Tech Stack With a Single API Call — Getting started tutorial
Try DetectZeStack Free
100 requests per month, no credit card required. SEO, CMS, plugin, analytics, and infrastructure detection on every plan.
Get Your Free API Key