agentleFS
moh-obaidamoh-obaida/ReadyVibe-Skills/skills/discoverability/seo-readiness/SKILL.md

seo-readiness

Skill2 starsChanged 25 days agoApache-2.0View on GitHub

Use when public pages should be found in search, and titles, meta descriptions, canonicals, robots.txt, sitemap.xml, indexing directives, and URL consistency need to be correct and agree with each other. It checks rendered output and the relationships between files, and repairs localhost canonicals, private routes in sitemaps, and starter metadata. Do not use it to promise indexing or ranking, to keyword-stuff, or on a product that is intentionally private.

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 1 is distinctive, and 4 are 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.

  • 4

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Not for a private/internal product (confirm it is consistently noindex), not for ranking strategy or keyword research.

    line 19
  2. Very specific:

    Intent: Should this site be indexed?

    line 23
  3. Very specific:

    Read rendered HTML: frameworks can override tags after hydration.

    line 30
  4. Distinctive:

    JS-only pages: if content appears only after JavaScript and no server rendering or prerender exists, say indexing depends on the crawler …

    line 53
  5. Very specific:

    Never state a page "is indexed", "will rank", or "Google will show X".

    line 61

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 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-readiness

File existence is the easy 10%. The failures that cost launches are contradictions: canonical says localhost, sitemap advertises /admin, a noindex left over from staging, robots blocking the pages the sitemap lists. This skill reads the relationships.

Activate when

  • The product has public pages meant to be found, or launch/domain/redesign is near.
  • Titles look like "Vite + React", canonicals or sitemap hosts look wrong, or the site has never been indexed.
  • Not for a private/internal product (confirm it is consistently noindex), not for ranking strategy or keyword research.

Inspect

  1. Intent. Should this site be indexed? Production origin (scheme, host, www)? Public vs private routes? Ask only if .readyvibe/context.md and config do not say (site-reconnaissance).
  2. Run the sweep (paths relative to this skill's folder; add --render for client-rendered apps; serve a build locally if needed):

    node scripts/inspect-metadata.mjs --url <site> --render --private-path /dashboard
    node scripts/check-links.mjs      --url <site> --render     # sitemap/canonical target status

    Read rendered HTML: frameworks can override tags after hydration. Compare with source (<Head>, metadata exports, next-seo, react-helmet, index.html) to find where each value comes from, so fixes land in the right place.

  3. Relationships to reason about:

    Signal Avs. Signal BProblem
    canonical hostproduction originlocalhost/staging/preview host in a canonical (HIGH)
    sitemap <loc> hostcanonical hostsearch engines get two truths
    sitemap lists pathpage is noindex or private routecontradictory signals; private exposure (HIGH for admin/dashboard/api)
    sitemap lists pathrobots blocks itunfetchable listing
    sitemap lists pathcanonical points elsewherenon-canonical URL listed
    sitemap lists pathreturns 404/redirect/soft-404dead listing (check-links)
    robots Sitemap:actual sitemap URL/hostwrong or dev sitemap advertised
    robots Disallow: /production intentwhole site blocked (HIGH)
    robots Disallow: /_next/ /assets/renderingcrawlers cannot render
    robots lists /adminroute reachable?robots is not access control; hands attackers a map
    noindex on home/most pageslaunch intentstaging leftover (HIGH)
    x-robots-tag headermeta robotsheader may override; check both
    several pagesthe same canonical URL (CANONICAL_DUPLICATE_TARGET)template copied from the home page; tells engines to ignore the rest
    robots blocks a linked public page (ROBOTS_BLOCKS_PAGE)page's title, description, and noindex are never readcrawler cannot see it
    trailing slash / www / http variantscanonical + redirectsduplicate URL forms
  4. Titles and descriptions: unique per page, specific to the page's content, front-load the topic, roughly 50-60 / 120-160 characters as a guideline (truncation, not a rule); no framework defaults; no keyword stuffing. Derive copy from the page's visible content and product facts; do not invent claims.
  5. Multi-language: hreflang pairs, per-language canonicals (with multilingual-readiness).
  6. JS-only pages: if content appears only after JavaScript and no server rendering or prerender exists, say indexing depends on the crawler executing JS: SOURCE-INDICATED risk, not proven.

Evidence that counts

Label each claim OBSERVED, SOURCE-INDICATED, DECLARED, INFERRED, UNKNOWN, or REVIEW REQUIRED. UNKNOWN is never a pass and never a failure.

  • Rendered tag from the running site: OBSERVED. Tag in source only: SOURCE-INDICATED.
  • Local checks cannot show what the production CDN redirects, rewrites, or serves. Verify the live URL when one exists; otherwise mark host/redirect behavior UNKNOWN.
  • Never state a page "is indexed", "will rank", or "Google will show X"; that needs Search Console (search-console-readiness).

May change

Set/repair titles, descriptions, canonicals (only once the production origin is known: DECLARED or asked), robots.txt, sitemap.xml or its generator (next-sitemap, app/sitemap.ts, @astrojs/sitemap), noindex on genuinely private routes, removal of private routes from the sitemap, redirects for duplicate URL forms. Preserve intentional owner copy; improve only starter, missing, duplicate, or placeholder values.

Must not claim

"SEO-optimized", "will be indexed", "will rank", "Google-friendly" or a numeric score. Do not claim a sitemap is correct because it exists; correctness is the agreement list above.

Verify

Re-run inspect-metadata and check-links. Pass = no HIGH; every sitemap URL is public, canonical, 200, not noindex, not blocked; every canonical target resolves and is on the production host; no localhost/staging strings remain; robots and sitemap agree. Then spot-check one page in the rendered DOM.

Escalate

Unknown production origin (ask before writing absolute URLs); a private route that is reachable (hand to web-security); site migrations with redirects; sites with several domains or heavy JS rendering where search visibility matters (deep technical SEO is beyond this pass).

No change is valid when

The site is intentionally private and consistently noindex; a one-page site has no sitemap by design; an apparent finding is explained by context (noindex on /dashboard). Do not generate a sitemap or rewrite good copy to hit a length target.

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.