Audit a page or the whole site for technical and on-page SEO — crawlability, metadata, heading outline, structured data, internal linking, Core Web Vitals, and the animation-specific crawlability…

UnlicenseAuto-check: notesMarketing & SEO

Install SEO Audit

skills CLI
$ npx skills add textura-agency/next16-claude-starter --skill seo-audit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install textura-agency/next16-claude-starter seo-audit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/textura-agency/next16-claude-starter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/seo-audit .claude/skills/seo-audit && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
seo-audit
GitHub stars
133
Token cost
~2.2k tokens
SKILL.md length
1,173 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
Unlicense

At a glance

Audit a page or the whole site for technical and on-page SEO — crawlability, metadata, heading outline, structured data, internal linking, Core Web Vitals, and the animation-specific crawlability…

  • Works in 7 steps: Indexability — nothing else matters if… → Metadata → Content structure → …
  • The user asks to audit SEO
  • SKILL.md covers 1. Indexability — nothing else…, 2. Metadata, 3. Content structure and 4. Structured data, plus 3 more sections
  • Calls curl, yarn and node

What it does

SEO Audit is an agent skill from textura-agency/next16-claude-starter. Audit a page or the whole site for technical and on-page SEO — crawlability, metadata, heading outline, structured data, internal linking, Core Web Vitals, and the animation-specific crawlability risks this starter carries. Produces ranked findings and fixes them in code. Use when the user asks to "audit SEO", "check my SEO", "why isn't this ranking", "fix meta tags", or before a launch.

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Marketing & SEO, covering On-page SEO, SEO audit and Technical SEO. The repository describes itself as: AI-first Next.js 16 starter for animation-heavy sites, wired with an Obsidian vault & Claude Code hooks. The licence is Unlicense.

When your agent uses it

  • The user asks to audit SEO
  • Why isnt this ranking
  • Before a launch

Example prompts

  • “audit SEO”
  • “check my SEO”
  • “why isn”
  • “/seo-audit”

Requirements

  • Pre-approved tools (allowed-tools): Bash, Read, Grep, Glob, Edit, Write, WebFetch

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Indexability — nothing else matters if this is broken
  2. Metadata
  3. Content structure
  4. Structured data
  5. Performance (Core Web Vitals)
  6. The animation-specific crawler risk
  7. Output

What it can do on your machine

Read from SKILL.md and the folder at commit 6c6edf9. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Grep
    • Glob
    • Edit
    • Write
    • WebFetch

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl
    • yarn
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use curl and yarn, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

SEO Audit loads about 2.2k tokens when it runs. Until then it costs about 100 tokens; SKILL.md has 1,173 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~100
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Grep, Glob, Edit, Write, WebFetch

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from textura-agency/next16-claude-starter at commit 6c6edf9, republished under its Unlicense licence (© textura-agency). 1,173 words, ~2,159 tokens.

Download SKILL.mdSave it as .claude/skills/seo-audit/SKILL.md (or your agent's skills folder).
name
seo-audit
description
Audit a page or the whole site for technical and on-page SEO — crawlability, metadata, heading outline, structured data, internal linking, Core Web Vitals, and the animation-specific crawlability risks this starter carries. Produces ranked findings and fixes them in code. Use when the user asks to "audit SEO", "check my SEO", "why isn't this ranking", "fix meta tags", or before a launch.
allowed-tools
Bash, Read, Grep, Glob, Edit, Write, WebFetch

SEO audit

Audit the code, and the live URL when one exists. Lessons from ~50 production sites built from this starter are folded in; the defects it used to seed (placeholders, localhost canonicals, a hidden page for non-JS crawlers, missing privacy route) are fixed upstream — check they stayed fixed. Rank findings by impact and fix them; do not hand back a lecture.

1. Indexability — nothing else matters if this is broken

  • src/app/robots.ts — allows crawlers, points at the sitemap, no accidental disallow: /.
  • src/app/sitemap.ts — every public route is listed. This is the one that rots: adding a route without a sitemap entry is the most common miss in this starter. Cross-check find src/app -name 'page.tsx' against the sitemap array.
  • Canonical URL on each page; no duplicate content across trailing-slash or parameter variants.
  • The origin. siteConfig.url = NEXT_PUBLIC_SITE_URL → the host's production domain (VERCEL_PROJECT_PRODUCTION_URL) → localhost; set NEXT_PUBLIC_SITE_URL for a custom domain. origin-sync.ts (first in <body>) rewrites canonical / og:url / og:image to location.origin after hydration for JS-running readers on any other host — never before (React 19 matches head tags by URL and inserts a second copy; one site served two canonicals). Link-preview scrapers don't run JS, so the build-time origin decides their cards. Check on the deployed site: canonical is the real domain, and curl -sI of the og:image URL returns 200 — 11 of 12 live deploys once served http://localhost:3000 as canonical, og:image and every sitemap <loc>.
  • No route accidentally opted out of static rendering. Any headers() / cookies() read — including await isBot() in a page or layout — forces dynamic rendering for every visitor. The UA is read in src/proxy.ts. Check: curl -sI <url>/ | grep -i 'cache-control\|x-vercel-cache' → PRERENDER/HIT.
  • Crawlers see the whole page. curl -s -A "Googlebot/2.1" <url>/ and -A "GPTBot/1.0": the robot form (<meta name="x-robot-view">), the <h1> and the body copy present and not under a hidden ancestor. The starter's old empty app/loading.tsx wrapped the streamed page in <div hidden> — on most sites built from it, non-JS crawlers got no visible <h1>; it is deleted — never re-add an empty one. Streamed Suspense segments can still hide text from a non-JS reader; the robot form should stream nothing. (optimize-load/references/robot-path.md.)
  • robots.ts disallows /robot-view (the robot form's own path is a duplicate — it is served under /). Never noindex the robot page itself.

2. Metadata

Every route exports metadata via generateMetadata in src/utils/seo/generate-page-metadata.ts (obsidian/frontend/seo-metadata.md).

No placeholder survives. src/lib/site.ts ships TODO: values that fail a production build — every site built from the old starter shipped "New Project" as its title, OG card and JSON-LD name, and Lighthouse still scored SEO 100 because a title existed. Fill every field from the site itself:

  • name — the brand exactly as the logo writes it. If the copy and the logo disagree, ask; don't pick silently (a reviewer caught a wrong brand in a title).
  • title — the brand + what it is, ≤ 60 chars (Acme — Industrial design studio); sub-pages %s · Acme, unique and specific per route.
  • description — 120–160 chars from the site's own copy (no invention).
  • author / creator / publisher = the brand, never the agency or a placeholder. twitterHandle = the site's real handle or undefined (the tags are omitted) — never an invented one, it tags a stranger.
  • themeColor / backgroundColor = the brand ground (via generateViewport); keywords 5–8 phrases from the copy; openGraph.type/locale/siteName; twitter.card = summary_large_image.
  • The brand kit. A square SVG mark drawn from the site's own logo that reads at 16 px (the logomark, or a monogram in the display face — never the full wordmark), then node tools/qa/brand-kit.mjs --url … --icon <mark.svg> renders icon.svg, favicon.ico, the PNG sizes, apple/maskable icons and a 1200×630 share image captured from the running hero (its wait must cover the loader and the entrance; dismiss the banner; hide a custom cursor). LOOK at the share image: hero composed, headline legible, no loader, no banner, no half-faded text. If the hero doesn't compose at 1200:630, build a designed card (app/opengraph-image.tsx: the brand large over the hero art) — it beat a plain capture twice. Look at the 32 px and 180 px icons too. og:image has an alt and its real size.
  • lang on <html>; manifest (app/manifest.ts) names the brand.
  • Check the rendered <head> of the build (curl -s localhost:3000/ | grep -oE '<(meta|link)[^>]+>') and of the robot form (-A Googlebot/2.1) — they must carry the same metadata.
Show full SKILL.md (474 more words)Show less

3. Content structure

  • Exactly one <h1>, matching what the page is actually about.
  • Heading outline is a real hierarchy with no skipped levels.
  • <main> present; landmarks named; lists are lists.
  • Answer-shaped content: the page states its answer near the top rather than building to it — this serves both featured snippets and AI extraction.
  • Internal links use <Link>, have descriptive anchor text (never "click here"), and no important page is orphaned. Every href resolves — nav items for pages that were never built point at # or a section anchor, never a 404; the cookie banner's /privacy-policy exists (build the page, don't drop the link).
  • Every image has meaningful alt.

4. Structured data

Run the schema-markup skill. At minimum Organization + WebSite from src/utils/seo/structured-data.ts; add per-page types where they apply. Validate the JSON-LD parses and references real on-page content.

5. Performance (Core Web Vitals)

Core Web Vitals are a ranking factor, so they belong in an SEO audit — but this skill does not own them. Hand the measuring and fixing to optimize-load, which audits all four categories across laptop, tablet and mobile on medians of 3+ runs, and report its numbers here. Do not run a single Lighthouse pass and quote it: LCP and CLS swing wildly between identical runs.

What to check specifically from the SEO side:

  • The numbers came from the built site (yarn build && yarn start) or the deployed URL — never next dev.
  • Every internal link resolves. A link to a route that does not exist is a crawl error as well as a console error; optimize-load catches it, and it is usually the cheapest fix on the board.
  • If the project renders a three.js/WebGL scene, stop and use the optimize-3d-scene skill — it owns that order of fixes.
  • Lighthouse never scrolls. If the page is animation-heavy, a good score still says nothing about how it feels to use — that is optimize-performance.

6. The animation-specific crawler risk

Content revealed by scroll animation must exist in the DOM regardless. This starter's springs only touch opacity/transform, so crawlers see the text — keep it that way. Do not gate content behind an in-view callback that mounts it.

Robots get the robot form: the same content at rest, chosen in the proxy (static for everyone) — not an isBot() branch in a page. Keep the two lines: same content (different content for crawlers is cloaking), static route. Every new section's first-screen copy uses the robot twins so it is visible in the served HTML; every loop reads useMotionOff() (a looping spring hangs the robot form — Lighthouse PAGE_HUNG). Procedure and checks: optimize-load/references/robot-path.md.

7. Output

A ranked table — issue, severity, file, fix — then apply the fixes. Re-run .claude/scripts/verify.sh and yarn build afterwards, and node tools/qa/lighthouse.mjs --url … and again with --as-bot — SEO/BP 100 on people and robot. Note anything that needs the user (a live URL, Search Console access, a correctly sized OG asset).

© textura-agency, Unlicense. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/seo-audit of textura-agency/next16-claude-starter.

Open the folder on GitHubat commit 6c6edf9

Compare with similar skills

SEO Audit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

SEO Audit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
SEO Audit this skilltextura-agency/next16-claude-starter133—~2.2kAutomated safety check: NotesUnlicense
SEO Auditjosstei/maestro-orchestrate465—~218Automated safety check: PassApache-2.0
SEO Auditunifapi-agent/agents589—~3.4kAutomated safety check: PassMIT
SEO Optimizerailabs-393/ai-labs-claude-skills4551 repos~3.2kAutomated safety check: PassMIT
Universal SEO AnalysisAgriciDaniel/claude-seo19k—~4.9kAutomated safety check: PassMIT
Persian SEOTronIsHere/vibefarsiui212—~1.7kAutomated safety check: WarnMIT

Similar skills

  • SEO Audit

    josstei/maestro-orchestrate

    Run a Maestro-style SEO assessment for meta tags, structured data, crawlability, and Core Web Vitals

    465 GitHub stars~218 tokensUpdated 4 days ago
    Marketing & SEOAuto-check passed
  • SEO Audit

    unifapi-agent/agents

    When the user wants to audit, review, or diagnose SEO issues on their site.

    589 GitHub stars~3.4k tokensUpdated 1 mo ago
    Marketing & SEOAuto-check passed
  • SEO Optimizer

    ailabs-393/ai-labs-claude-skills

    This skill should be used when analyzing HTML/CSS websites for SEO optimization, fixing SEO issues, generating SEO reports, or implementing SEO best practices.

    455 GitHub starsUsed in 1 repo~3.2k tokens
    Marketing & SEOAuto-check passed
  • Universal SEO Analysis

    AgriciDaniel/claude-seo

    Hub for site-wide SEO work: audits, technical checks, schema, content quality, local, hreflang and AI-search readiness, run through slash commands.

    19k GitHub stars~4.9k tokensUpdated 6 days ago
    Marketing & SEOAuto-check passed
  • Persian SEO

    TronIsHere/vibefarsiui

    Technical and on-page SEO for Persian (Farsi) websites: lang and hreflang for fa-IR, RTL-safe metadata, Persian titles and descriptions, slug and URL strategy for Persian content, ZWNJ and keyword…

    212 GitHub stars~1.7k tokensUpdated yesterday
    Marketing & SEOAuto-check: warnings
  • Business Website Setup

    sickn33/agentic-awesome-skills

    Website page register: URL, title, meta description, search intent, NAP block, schema type, canonical, indexability and Core Web Vitals target.

    47k GitHub starsUsed in 1 repo~6.2k tokens
    Marketing & SEOAuto-check passed

More from textura-agency/next16-claude-starter

All 16 skills in this repo
  • Mobile Device QA

    textura-agency/next16-claude-starter

    Make a site behave on real phones — the defects no Lighthouse run or headless scroll test sees, learned from site owners reviewing production sites on an iPhone.

    135 GitHub stars~5k tokensUpdated yesterday
    Auto-check: notes
  • Optimize Load

    textura-agency/next16-claude-starter

    Get a page into Lighthouse's green zone on desktop and mobile, for people AND for the robot form crawlers get — build it, audit all four categories (Performance, Accessibility, Best Practices, SEO)…

    135 GitHub stars~4.6k tokensUpdated yesterday
    Auto-check: notes
  • Optimize Performance

    textura-agency/next16-claude-starter

    Make a page in this starter actually smooth — build it, scroll it in real Chrome on PC and on an emulated phone, fix what the measurement blames, re-measure to prove it.

    135 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check: notes
  • Payload Admin

    textura-agency/next16-claude-starter

    Make a Payload admin feel like part of the site and explain itself — the skin re-tinted from the site's own tokens (calm, light, no added motion), the site's wordmark and favicon, a dashboard…

    135 GitHub stars~1.5k tokensUpdated yesterday
    Auto-check passed
  • Payload Cms

    textura-agency/next16-claude-starter

    Put a Payload CMS admin on a site built from this starter — every visible string and content photo editable, derived from the site's own content objects with the code's copy as the fallback, a…

    135 GitHub stars~3.7k tokensUpdated yesterday
    Auto-check: notes
  • Aeo Visibility

    textura-agency/next16-claude-starter

    Answer Engine Optimisation — make the site citable by ChatGPT, Claude, Perplexity, Gemini and AI Overviews.

    135 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check: notes

Categories

Questions about SEO Audit

What does SEO Audit do?

Audit a page or the whole site for technical and on-page SEO — crawlability, metadata, heading outline, structured data, internal linking, Core Web Vitals, and the animation-specific crawlability…. SEO Audit is an agent skill from textura-agency/next16-claude-starter. Audit a page or the whole site for technical and on-page SEO — crawlability, metadata, heading outline, structured data, internal linking, Core Web Vitals, and the animation-specific crawlability risks this starter carries.

When should I use SEO Audit?

SEO Audit fits situations like: the user asks to audit SEO; why isnt this ranking; before a launch.

How do I install SEO Audit in Claude Code?

Run `npx skills add textura-agency/next16-claude-starter --skill seo-audit -a claude-code`. Or copy the skill folder (.claude/skills/seo-audit in textura-agency/next16-claude-starter) into .claude/skills/seo-audit in your project. Claude Code loads it when a task matches its description.

How do I install SEO Audit in Codex?

Run `npx skills add textura-agency/next16-claude-starter --skill seo-audit -a codex`. Or copy the skill folder (.claude/skills/seo-audit in textura-agency/next16-claude-starter) into .agents/skills/seo-audit in your project. Codex loads it when a task matches its description.

Can I use SEO Audit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add textura-agency/next16-claude-starter --skill seo-audit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/seo-audit, .gemini/skills/seo-audit, .github/skills/seo-audit and .opencode/skills/seo-audit in your project.

What does SEO Audit need to run?

Going by SKILL.md and its folder, SEO Audit needs the command-line tools its instructions call (curl, yarn and node). Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, Edit, Write, WebFetch.

Does SEO Audit access the network?

SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is SEO Audit safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does SEO Audit use?

SEO Audit is published under the Unlicense licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does SEO Audit use?

About 2.2k tokens (SKILL.md is roughly 8.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to SEO Audit?

Skills that share tags, products or a category with SEO Audit: SEO Audit (josstei/maestro-orchestrate, 465 stars), SEO Audit (unifapi-agent/agents, 589 stars), SEO Optimizer (ailabs-393/ai-labs-claude-skills, 455 stars) and Universal SEO Analysis (AgriciDaniel/claude-seo, 19k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains SEO Audit?

textura-agency (a GitHub organization) maintains it in textura-agency/next16-claude-starter, which has 133 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 7, 2026.

Source: textura-agency/next16-claude-starter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.