# SEO

> Gets a site's pages crawled, indexed and chosen in Google Search the way Search Central documents it: the technical audit (reachability, robots, noindex and X-Robots-Tag, canonicals, sitemaps, the 30-type issue catalogue, triage into a work order, index bloat), choosing the one to three changes worth making and sizing them honestly, ranking evidence, pages at scale with the 12 programmatic playbooks and Google's doorway and scaled-content rules, local profiles, citations and outcome baselines, international annotations and canonicals, link attributes and link spam, link prospecting and outreach, directory submissions with a tracker, content refresh with dates and redirects, plus structured data, link previews, shared project context and self-contained SEO reports. Use when auditing a site's SEO, planning programmatic or location pages, working on Maps visibility, earning backlinks or submitting to directories, refreshing a decaying page, or checking a tool's SEO claim against Google.

- Skill: `quegenx/seo` (Agent Skill, multi-file: 15 files)
- Install (CLI): `npx get-skill add quegenx/seo`
- Raw SKILL.md: https://api.skillmd.com/api/skills/quegenx/seo/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: Quegenx (https://skillmd.com/u/quegenx)
- Updated: 2026-11-12
- Page: https://skillmd.com/skills/quegenx/seo

---


# SEO

Search engines can only rank a page they can reach, read and index, and Google chooses among pages by what they say and how other pages link to them, not by character counts or a "dofollow" flag. Most SEO advice in tools and skill packs mixes Google's documented rules with the tool's own heuristics; this skill keeps them apart and quotes [Google Search Central](https://developers.google.com/search/docs) wherever a rule is Google's. Sources: every-app/open-seo (`seo-audit`, `local-seo`, `link-prospecting` skills and the audit engine, MIT) and openseo.so; coreyhaines31/marketingskills (`programmatic-seo`, `directory-submissions`, `copy-editing`, MIT); freescan.app's check library (no licence, paraphrased). The source skills read `.agents/product-marketing.md`; here the shared context file is `.agents/product-context.md`, defined in [anti-slop-copy CONTEXT.md](https://github.com/Quegenx/agent-skills/blob/main/skills/anti-ai-slop/anti-slop-copy/CONTEXT.md). The owner's own head tags, structured data and discovery files are in [landing-page-ui DISCOVERY.md](https://github.com/Quegenx/agent-skills/blob/main/skills/web-ui/landing-page-ui/DISCOVERY.md): audit them, don't redesign them.

Apply only the routes and checks for the selected job. Read a linked skill's named file from its installed folder when available, or from the linked source. Report an unavailable required reference instead of inventing it. [skill-authoring, DISTRIBUTION.md#composing-skills]

| The job | Read |
|---|---|
| Crawl validity, the audit order (reachability, control, canonical, interpretation, discovery), tool thresholds vs Google, the 30-type issue catalogue with fixes, check logic, triage into a work order, index bloat, choosing the one to three changes worth making, title proposals and click-through, sizing, ranking evidence, OpenSEO as the tool | [TECHNICAL-AUDIT.md](TECHNICAL-AUDIT.md) |
| Localized pages: reciprocal alternates, valid codes, optional fallback, canonical intent and generated sitemap output | [INTERNATIONAL-SEO.md](INTERNATIONAL-SEO.md) |
| Programmatic pages: assessment, principles, Google's doorway, scaled-content and thin-affiliation policies, the 12 playbooks, linking, sitemap limits and `lastmod`, crawl budget and `noindex`, platform requirements, subpath vs subdomain, checklists | [PAGES-AT-SCALE.md](PAGES-AT-SCALE.md) |
| Maps and the local pack: eligibility, private addresses, profile facts, citations, useful location pages, outcome baselines, rank grids, chains, review and business-name rules, the report | [LOCAL.md](LOCAL.md) |
| `rel` values and link spam, page-level diagnosis, reclamation, editorial prospects, lawful outreach state, vendor/disavow gates and actual backlink verification | [LINKS-AND-OUTREACH.md](LINKS-AND-OUTREACH.md) |
| Directory assets, tiers kept and dropped, MCP registry, positioning, approval, submission and the tracker | [DIRECTORY-SUBMISSIONS.md](DIRECTORY-SUBMISSIONS.md) |
| The directory submission tracker with `Observed rel` and `Checked at` | [submission-tracker.csv](submission-tracker.csv) |
| Refreshing a decaying page: when, refresh vs rewrite, the gap grid, six passes, what to keep, dates, redirects, cadence | [CONTENT-REFRESH.md](CONTENT-REFRESH.md) |
| Structured data: Google's required and recommended properties per feature, retired features, validators, JavaScript and escaping | [STRUCTURED-DATA.md](STRUCTURED-DATA.md) |
| JSON-LD examples per type, corrected | [STRUCTURED-DATA-EXAMPLES.md](STRUCTURED-DATA-EXAMPLES.md) |
| Open Graph, platform link previews, crawlers and caches | [LINK-PREVIEWS.md](LINK-PREVIEWS.md) |
| Shared SEO project interview, minimum inline setup, key pages and research log | [PROJECT-SETUP.md](PROJECT-SETUP.md) |
| Shared SEO report writing, evidence, HTML constraints and private delivery | [SEO-REPORTS.md](SEO-REPORTS.md) |
| Self-contained HTML starter for an SEO report | [REPORT-TEMPLATE.html](REPORT-TEMPLATE.html) |

Related skills: keyword demand, clustering and SEO competitors in [keyword-research SKILL.md](https://github.com/Quegenx/agent-skills/blob/main/skills/marketing/keyword-research/SKILL.md); Search Console data, API limits, URL Inspection and opportunity heuristics in [search-console SKILL.md](https://github.com/Quegenx/agent-skills/blob/main/skills/marketing/search-console/SKILL.md); AI answers and citations in [ai-search-visibility SKILL.md](https://github.com/Quegenx/agent-skills/blob/main/skills/marketing/ai-search-visibility/SKILL.md); a scored whole-site audit and fix briefs in [site-audit SKILL.md](https://github.com/Quegenx/agent-skills/blob/main/skills/marketing/site-audit/SKILL.md); URL hierarchy and navigation in [site-architecture SKILL.md](https://github.com/Quegenx/agent-skills/blob/main/skills/marketing/site-architecture/SKILL.md); polite crawling in [web-scraping CRAWLING.md](https://github.com/Quegenx/agent-skills/blob/main/skills/web-automation/web-scraping/CRAWLING.md).

## The rules

1. **Check the crawl before the findings.** A blocked, rate-limited or JavaScript-shell page reports no title and zero words; record it as a coverage gap, never as thin content, and ask the owner to allowlist the crawler instead of evading the block ([TECHNICAL-AUDIT.md](TECHNICAL-AUDIT.md#check-the-crawl-first)).
2. **A tool's threshold is not Google's rule.** Google sets no limit on title or meta description length, no word count, no heading count or order for ranking; state such numbers as the tool's heuristic, and use web.dev's TTFB bands for speed ([TECHNICAL-AUDIT.md](TECHNICAL-AUDIT.md#tool-thresholds-are-not-google-rules)).
3. **Recommend selectively.** Lead with one to three changes that capture more qualified demand or stop a real loss; never rewrite a page that already ranks near the top; size benefits by mechanism and cluster, label any position-one figure hypothetical, and never invent a conversion rate or revenue [open-seo, seo-audit].
4. **Every live SERP ranking claim has a dated observation** written "#N (page P)" with query, country and listings returned from a licensed data source; keep Search Console average positions separate ([TECHNICAL-AUDIT.md](TECHNICAL-AUDIT.md#ranking-evidence)). Scraping Google for rank checks is against its spam policies.
5. **Canonical is a hint; `noindex` is removal.** Consolidate duplicates with `rel=canonical` in one place, keep `noindex` for pages that should not be in Search, and never use `noindex` or robots.txt as crawl control on a site below Google's crawl-budget sizes ([PAGES-AT-SCALE.md](PAGES-AT-SCALE.md#indexation-and-crawl-budget)).
6. **Each page at scale earns its place with data no sibling has.** Pages that only swap a city or keyword into identical content are the source's "thin content" mistake and match Google's doorway examples; launch the strongest 20 to 50 first and scale only once they index ([PAGES-AT-SCALE.md](PAGES-AT-SCALE.md#what-google-calls-spam)).
7. **Earn links, don't manufacture them.** No bought, swapped, badge-required or automated links unless qualified `sponsored` or `nofollow`; no low-quality directories, bookmarks, forum signatures or optimized-anchor press-release links; DR is a third-party metric, not a Google signal ([LINKS-AND-OUTREACH.md](LINKS-AND-OUTREACH.md#what-google-calls-link-spam)).
8. **Outreach stays lawful and personal.** Contact details only from public business-role sources with their URL, never invented or scraped into lists; every email meets [email-practices COMPLIANCE.md](https://github.com/Quegenx/agent-skills/blob/main/skills/backend/email-practices/COMPLIANCE.md); a human approves every account, form and send.
9. **Verify a backlink from the anchor itself:** the `<a href>`, its `rel` tokens (spaces and commas), page-level `nofollow` and `X-Robots-Tag`, recorded with a timestamp; `sponsored` is the correct value on a paid tier ([LINKS-AND-OUTREACH.md](LINKS-AND-OUTREACH.md#verify-the-actual-backlink)).
10. **Local: category and claim problems outrank posting,** businesses are matched by `cid` or `place_id`, and no plan gates, buys or filters reviews or stuffs the business name ([LOCAL.md](LOCAL.md)).
11. **Refresh for readers, not for a fresh date.** Keep the URL and ranking anchors, redirect with 301 or 308 for at least a year when a URL must change, and move the visible date and `dateModified` only after a substantial change ([CONTENT-REFRESH.md](CONTENT-REFRESH.md)).
12. **Severity is P0 to P3** as in [code-review REVIEWER.md](https://github.com/Quegenx/agent-skills/blob/main/skills/engineering/code-review/REVIEWER.md); a tool's critical, warning and info map to P1, P2 and P3, and anything keeping a page that should rank out of Search is P0.

## Prove it

The crawl's blocked and shell pages are reported as gaps; no length or word-count number is presented as Google's; the audit leads with at most three sized, evidenced recommendations and a reason for every rejected candidate; each ranking has its query, country, date and "#N (page P)" form and none came from scraping Google; duplicates use one canonical method; every page in a scaled set differs from its siblings by more than the variable; no link in the plan is bought, swapped, badge-required or unqualified when paid; every live listing has an `Observed rel` and `Checked at`; every outreach contact has a public source URL; refreshed pages keep their URL or a lasting permanent redirect; and every file's own Prove it checks pass for the parts you touched.

