agentleFS
BryceEWatsonBryceEWatson/claude-global-skills/seo-index-validation/SKILL.md

seo-index-validation

Skill0 starsChanged 44 days agoMITView on GitHub

Validate whether a DEPLOYED site is being crawled and indexed correctly, and diagnose plus fix why pages are not indexed. Use on a Google Search Console alert about non-indexed pages, when checking index health after a deploy or migration, or to confirm a prior indexing fix cleared. Probes live HTTP, reads the GSC report via the browser, fixes at the correct layer under confirmation-gating, then schedules a lagged re-check. NOT for keyword research, content optimization, or backlinks.

  • Reads credentials

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Reproduce before you believe: Every diagnosis is grounded in a live HTTP probe or the GSC report, never in memory.

    line 12
  2. Very specific:

    Use the schedule skill for step 7, and the Claude-in-Chrome MCP (load via ToolSearch) for the browser steps.

    line 62

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

seo-index-validation

Diagnose and fix crawl and index health for a deployed site, then verify the fix in Google Search Console (GSC). The scope is deliberately narrow: the reasons Google gives for not indexing a page (404, redirect, soft-404, duplicate or wrong canonical, discovered-not-indexed) and the live-infrastructure causes behind them. This is not a keyword, content, or backlink skill. If asked for those, say so and stop.

Operating principle

  • Reproduce before you believe. Every diagnosis is grounded in a live HTTP probe or the GSC report, never in memory. Tag each finding measured, derived, or assumed.
  • Exact URLs, not buckets. A GSC alert names a reason ("Not found (404)"). The load-bearing output is the exact affected URL(s). Get them.
  • Separate benign from real. Most redirects Google reports are correct canonicalization. Do not "fix" them (see the table below).
  • Automate the readable half; browse only where there is no API. Default to curl and the Search Console API. The browser is only for the three GSC actions that have no API.
  • Confirmation-gate live changes. Toggling a CDN or host setting, or shipping a redirect, is outward-facing. Propose, get an explicit yes, then act. Never unattended.

What is automatable vs browser-only (verified against official docs)

Stepcurl / API?How
Live status, redirects, soft-404, homepage canonical presence, sitemap resolutionyes, curlscripts/crawl-check.sh
Per-URL canonical correctness (right or duplicate canonical)no, browserinspect per URL in GSC; the script only confirms the homepage tag is present
Per-URL index statusyes, APISearch Console urlInspection.index.inspect (read-only; cannot live-test)
Submit and confirm a sitemapyes, APISitemaps API PUT / GET .../sites/{site}/sitemaps
Enumerate the URLs behind a GSC reason bucketno, browserThere is no index-coverage API; the per-URL list is GSC UI only
"Test Live URL" (fresh fetch plus rendered HTML)no, browserURL Inspection API returns only the already-indexed version
Request Indexing for ordinary pagesno, browserSearch Console API has no such method; the Indexing API is officially scoped to JobPosting and BroadcastEvent only. Use the GSC UI button (limited per day)
Toggle a CDN setting (e.g. Cloudflare Scrape Shield)yes, API, gatedPATCH .../zones/{id}/settings/{setting_id}; needs a write-scoped token; confirmation-gated

gcloud is not involved. GSC is not a Google Cloud product; it is the Search Console REST API (OAuth, where a GCP project only mints credentials). There is no official first-party Search Console CLI; every gsc-style CLI is third-party.

The playbook

1. Identify the exact URLs (browser). Open GSC, the property, Indexing, Pages, click the reason ("Not found (404)", "Page with redirect", and so on), and read the example URLs. The alert email never lists them. If no authenticated browser is available, say so. Do not guess the list.

2. Reproduce live (curl, headless). Run bash ~/.claude/skills/seo-index-validation/scripts/crawl-check.sh <domain> (use the full path; the skill is not invoked from its own directory). It checks status and redirect for each sitemap URL (up to a MAX_URLS cap, default 50; it WARNs when the cap truncates the list), plus http to https, www vs apex duplication (softened when a canonical already consolidates), trailing-slash normalization, soft-404 (any unknown URL returning 200 instead of 404 or 410), the homepage canonical tag's presence, and the Cloudflare /cdn-cgi/l/email-protection Scrape Shield artifact. With GSC_ACCESS_TOKEN set it also lists the property's sitemaps via the Search Console API. Read its report. Note that curl does not render JavaScript, so a clean curl result on a JS-heavy page still warrants the GSC live test in step 5.

3. Classify benign vs real.

Reason or symptomUsuallyAction
http:// to https:// 301benign (correct)none
/path to /path/ 308 trailing slashbenignnone
Discovered or Crawled, currently not indexedbenign on a young or low-authority siterequest indexing, then wait; not a defect
/cdn-cgi/l/email-protection 404realdisable Cloudflare Email Obfuscation (Scrape Shield)
Soft-404 (homepage served at 200 for unknown URLs)realadd a real 404 page; remove any SPA catch-all
www host serves 200 independentlyreal (duplicate)301 www to apex, or apex to www, pick one
Genuinely removed or renamed URL 404realrestore, redirect, or 404 it intentionally

4. Fix at the correct layer (confirmation-gated). Decide CDN or host setting (e.g. Cloudflare Scrape Shield, a redirect rule) vs repo (public/_redirects, src/pages/404.*). Live and security changes need an explicit yes and a write-scoped token; an analytics token is typically read-only. Note that the deploy may be decoupled from git (for example a manual wrangler pages deploy), so a repo fix is not live until the site is rebuilt and redeployed. Confirm what is actually serving before claiming a fix shipped.

5. Verify. (a) Re-run crawl-check.sh; the artifact or symptom should be gone (headless, immediate). (b) In GSC URL Inspection, run Test Live URL on an affected page (browser), open "View tested page", and confirm the offending pattern is absent. The report still lags; the live test is the earliest authoritative Google-side signal.

6. Nudge recrawl. Confirm the sitemap is submitted and healthy (Sitemaps API or GSC). For affected pages, use Request Indexing in GSC URL Inspection (browser, limited per day). For a 404 whose links you removed, do not click "Validate Fix" if the URL itself still returns 404 (for example a permanent CDN endpoint); removing the links plus natural drop-off is cleaner, and validation can log a cosmetic "Failed".

7. Schedule a lagged re-check. GSC report refresh and recrawl take days to weeks. Create a one-time scheduled task (via the schedule skill or the scheduled-tasks tool) about two weeks out that re-runs crawl-check.sh (always works headless) and checks the GSC reason count (browser), degrading gracefully and saying so if the browser is unavailable. Do not claim the fix "worked" from the live test alone; the report must clear.

Compose, do not duplicate

  • Hand the terminal "benign vs real" or "the fix worked" judgment to /review-loop --mode claim to falsify against the curl output and GSC screenshots.
  • Use the schedule skill for step 7, and the Claude-in-Chrome MCP (load via ToolSearch) for the browser steps.
  • Honor the global rules: claims-rigor (tag measured, derived, assumed; exact URLs not buckets), confirmation-gating for live changes, and no em-dashes in any site copy the skill produces.

Helper

~/.claude/skills/seo-index-validation/scripts/crawl-check.sh <domain> [path ...] is a headless live probe that needs no auth (call it by full path; the skill is not invoked from its own directory). If GSC_ACCESS_TOKEN (an OAuth bearer with the webmasters.readonly scope) is exported, it also lists the property's sitemaps via the Search Console API. Findings print as PASS / WARN / FAIL plus a one-line SUMMARY. It reads the homepage canonical for presence only, and does not render JavaScript, so pair a clean result with the GSC live test for JS-heavy pages. Run it first in any indexing investigation.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.