All URLs and inputs below are invented. No real site was inspected or changed, and no live request, account action, indexing result or traffic measurement is claimed for the four offline examples.
The supplied offline fixture checks were executed on 10 October 2026 with Python 3. All eight before/after outcomes matched their expected conditions. Separately, one real CLI report was run against synthetic input. The full source and checker are in the repository ↗.
A launch page is blocked from crawling
Synthetic exampleFinding: The wildcard crawler group disallows every path, including /trail-guide/.
Small correction: Remove the accidental site-wide disallow only after confirming the page is intended to be public.
Before: complete input
robots.txt · Download robots.txt
# SYNTHETIC fixture: accidental launch block
User-agent: *
Disallow: /
Offline output: The lesson-specific criterion fails for this before fixture, as expected. This is an executed offline check of synthetic input.
After: corrected teaching files
robots.txt · Download robots.txt
# SYNTHETIC fixture: intended public launch
User-agent: *
Disallow:
Sitemap: https://example.com/sitemap.xml
Offline output: The lesson-specific criterion passes for this after fixture, as expected. This is an executed offline check of synthetic input.
What the criterion establishes: The fixture rule allows Googlebot to fetch /trail-guide/. This checks crawl permission, not indexing.
Not checked: Live HTTP access, search-engine-selected canonical, indexing, ranking and traffic.
An intended public page still has noindex
Synthetic exampleFinding: The HTML robots meta tag contains noindex.
Small correction: Remove the unintended directive at its source. Check both HTML metadata and response headers in production.
Before: complete input
page.html · Download page.html
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
<meta name="robots" content="noindex, follow">
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>
response.json · Download response.json
{
"synthetic": true,
"status": 200,
"headers": {
"Content-Type": "text/html; charset=utf-8"
},
"bodyFile": "page.html"
}
Offline output: The lesson-specific criterion fails for this before fixture, as expected. This is an executed offline check of synthetic input.
After: corrected teaching files
page.html · Download page.html
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>
response.json · Download response.json
{
"synthetic": true,
"status": 200,
"headers": {
"Content-Type": "text/html; charset=utf-8"
},
"bodyFile": "page.html"
}
Offline output: The lesson-specific criterion passes for this after fixture, as expected. This is an executed offline check of synthetic input.
What the criterion establishes: The fixed HTML and modeled headers contain no noindex directive. Google indexing remains unverified.
Not checked: Live HTTP access, search-engine-selected canonical, indexing, ranking and traffic.
The sitemap route returns an app shell
Synthetic exampleFinding: The modeled response is HTTP 200 with an HTML body, not the promised XML sitemap.
Small correction: Serve the sitemap before a catch-all HTML route; return sitemap XML and an appropriate XML content type.
Before: complete input
response.json · Download response.json
{
"synthetic": true,
"requestedUrl": "https://example.com/sitemap.xml",
"status": 200,
"headers": {
"Content-Type": "text/html; charset=utf-8"
},
"bodyFile": "sitemap.xml"
}
sitemap.xml · Download sitemap.xml
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>
Offline output: The lesson-specific criterion fails for this before fixture, as expected. This is an executed offline check of synthetic input.
After: corrected teaching files
response.json · Download response.json
{
"synthetic": true,
"requestedUrl": "https://example.com/sitemap.xml",
"status": 200,
"headers": {
"Content-Type": "application/xml; charset=utf-8"
},
"bodyFile": "sitemap.xml"
}
sitemap.xml · Download sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- SYNTHETIC teaching fixture. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://example.com/trail-guide/</loc></url>
</urlset>
Offline output: The lesson-specific criterion passes for this after fixture, as expected. This is an executed offline check of synthetic input.
What the criterion establishes: The fixed fixture parses as a sitemap urlset with one absolute URL. No submission or crawl is claimed.
Not checked: Live HTTP access, search-engine-selected canonical, indexing, ranking and traffic.
Two canonical tags disagree
Synthetic exampleFinding: Two canonical link elements point to different URLs for the same page.
Small correction: Choose the intended representative page and emit one consistent canonical. Keep the sitemap aligned.
Before: complete input
page.html · Download page.html
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
<link rel="canonical" href="https://example.com/trail-guide/">
<link rel="canonical" href="https://example.com/trails/">
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>
sitemap.xml · Download sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- SYNTHETIC teaching fixture. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://example.com/trail-guide/</loc></url>
</urlset>
Offline output: The lesson-specific criterion fails for this before fixture, as expected. This is an executed offline check of synthetic input.
After: corrected teaching files
page.html · Download page.html
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
<link rel="canonical" href="https://example.com/trail-guide/">
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>
sitemap.xml · Download sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- SYNTHETIC teaching fixture. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://example.com/trail-guide/</loc></url>
</urlset>
Offline output: The lesson-specific criterion passes for this after fixture, as expected. This is an executed offline check of synthetic input.
What the criterion establishes: Exactly one canonical remains and matches the fixture sitemap URL. Google-selected canonical remains unverified.
Not checked: Live HTTP access, search-engine-selected canonical, indexing, ranking and traffic.