Skip to content
Back to skills

Seo Audit

ASecurity

Use when auditing, reviewing, or diagnosing SEO issues on a site. Triggers on "SEO audit", "technical SEO", "why am I not ranking", "SEO issues", "on-page SEO", "meta tags review", or "SEO health check". For structured data specifically, use `schema-markup`. For AI-search citation optimisation, use `aeo`.

  • 2 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 5, 2026
ai-agentsgo

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 29, 2026

npx -y skills add tmj-90/gaffer --skill seo-audit --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Seo Audit?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Seo Audit
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tmj-90-seo-audit/badge)](https://www.skillsdirectory.com/skills/tmj-90-seo-audit)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: seo-audit
description: Use when auditing, reviewing, or diagnosing SEO issues on a site. Triggers on "SEO audit", "technical SEO", "why am I not ranking", "SEO issues", "on-page SEO", "meta tags review", or "SEO health check". For structured data specifically, use `schema-markup`. For AI-search citation optimisation, use `aeo`.
stack: []
area: marketing
---

# Audit SEO systematically

Work through the layers in impact order. First, can Google **crawl and index** the page?
Then does the page **match the searcher's intent** with helpful content? Then are titles,
links and page experience in order? A fix in a lower layer is worthless while a higher one
is broken. Base findings on Google Search Central (Search Essentials, the SEO Starter
Guide, the helpful-content guidance) and on real-user data, not folklore.

## Layer 1 — Crawl and index (blocking issues)

- **Status.** Pages meant to rank return 200. Moved pages use a single 301 hop to the
  final URL. Soft 404s ("not found" served with a 200) are fixed.
- **robots.txt.** It does not disallow pages that should rank, nor the CSS/JS needed to
  render them. Remember that robots.txt stops crawling, not indexing: use `noindex` to
  keep a page out.
- **Meta robots and `X-Robots-Tag`.** No stray `noindex` or `nosnippet` on pages that
  should rank.
- **Canonicals.** Each indexable page carries a self-referencing absolute
  `rel=canonical`, and duplicates point to one preferred URL. No canonical points at a
  redirect, a 404 or a noindexed URL.
- **Sitemap.** It contains only canonical 200 URLs, is referenced from robots.txt and is
  submitted in Search Console.
- **Rendering.** The main content and the links appear in the rendered HTML (URL
  Inspection → View crawled page). Links are real `<a href>` elements, not JS click
  handlers.
- **Search Console Page indexing report.** Explain each "Not indexed" reason that
  affects important URLs.

## Layer 2 — Content and intent

- **Intent match.** The page format is what the top results show for the query:
  a guide, a product page, a comparison or a tool.
- **Helpful, people-first content.** It shows first-hand experience or expertise,
  original information, sources, and a clear author and date. Word count is **not** a
  ranking factor. Judge thinness by whether the query is actually answered, not by a
  word threshold.
- **Duplication and cannibalisation.** Several pages targeting the same query should be
  consolidated or differentiated.
- **Scaled or low-value pages.** Mass-generated pages made to rank violate the spam
  policies. Improve them, consolidate them or noindex them.

## Layer 3 — On-page and experience

- **Title element.** Every page has a unique, descriptive title that leads with the
  topic. Google shows about 50–60 characters, so front-load; there is no hard limit.
- **Meta description.** Unique, and it summarises the page. It does not affect ranking,
  but it can raise clicks. Google may rewrite it.
- **Headings.** One clear `<h1>` for the topic, with a logical h2/h3 structure.
- **Internal links.** Important pages are reachable within a few clicks and linked with
  descriptive anchor text. No orphan pages.
- **Images.** Descriptive `alt` text. `width` and `height` set to prevent layout shift.
  Modern formats.
- **Core Web Vitals** (field data, 75th percentile, from the Search Console CWV report
  or CrUX):
  - LCP ≤ 2.5 s
  - INP ≤ 200 ms
  - CLS ≤ 0.1

  Lighthouse is lab data, useful for diagnosis but not for pass/fail. Google's
  mobile-friendly test was retired in December 2023: check mobile rendering with URL
  Inspection and a 375 px viewport instead.
- **HTTPS** everywhere, with no mixed content. `hreflang` is reciprocal where the site
  is multilingual.

## Steps

1. **Scope.** Decide between the whole site and a page set. Note which access you have
   (Search Console, analytics, a crawler). In the factory you have only the repo and a
   local build: audit the rendered output locally, and list every check that needs
   production, Search Console or field data as a follow-up for a human. Record the baseline: clicks, impressions,
   indexed pages and the target queries.
2. **Crawl.** Use Screaming Frog, `curl -sI` for status and headers, or a sitemap
   walk. Export status codes, canonicals, titles, h1s, meta robots and link depth.
3. **Work Layer 1**, then Layers 2 and 3, using
   `references/seo-audit-checklist.md`. Every finding records the URL(s), the evidence
   (a header, a screenshot or a report row) and the rule it breaks.
4. **Prioritise** by traffic affected × severity ÷ effort. Indexing blockers come
   first.
5. **Write the recommendations.** For each: what to change, where, the expected effect
   and how to verify it. In a repo, add automated checks where they are cheap. For
   example, a test asserting one `<h1>`, a canonical and a unique `<title>` per route,
   and a sitemap test asserting that every URL returns 200.
6. **Verify after the fix.** Use URL Inspection → "Test live URL", validate the fix in
   the Page indexing report, and compare field CWV after 28 days. In the factory these
   are post-deploy follow-ups; your verification is the in-repo tests from step 5.

## Done when

- Every important URL is confirmed crawlable, indexable and canonical, or its blocker
  is listed with evidence.
- Findings are ranked, each with a location, evidence, a fix and a verification step.
- Nothing in the report relies on retired or myth signals (see below).

## Anti-patterns (myths to drop)

- "LSI keywords", keyword density targets and "keyword in the first 100 words".
- Minimum word counts, or the idea that a longer page ranks better.
- `rel=prev/next` as a Google signal: Google does not use it (it said so in 2019, having
  ignored it for years).
- Treating a Lighthouse score as the CWV verdict.
- Using robots.txt to de-index a page. The page must be crawlable for Google to see
  its `noindex`.

Files in this skill

  • SKILL.md4.4 KB
  • references/seo-audit-checklist.md3.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.