SEO Audit
Systematic assessment across five priority areas. Deliver findings as prioritized action plans with impact levels and specific remediation steps.
Audit Priority Order
- Crawlability & Indexation — can search engines find and index it?
- Technical Foundations — is the site fast and functional?
- On-Page Optimization — is content optimized?
- Content Quality — does it deserve to rank?
- Authority & Links — does it have credibility?
Initial Assessment
Before auditing, understand:
- Site type (SaaS, e-commerce, blog, etc.) and primary business goal for SEO
- Known issues, current organic traffic level, recent changes or migrations
- Scope: full site or specific pages, technical + on-page or one focus area
Schema Markup Detection Limitation
web_fetch and curl cannot reliably detect structured data. Many CMS plugins inject JSON-LD via client-side JavaScript — it won't appear in static HTML.
To accurately check for schema:
- Browser tool:
document.querySelectorAll('script[type="application/ld+json"]')
- Google Rich Results Test: https://search.google.com/test/rich-results
- Screaming Frog export (renders JavaScript)
Never report "no schema found" based solely on web_fetch or curl.
1. Crawlability & Indexation
Robots.txt
- Check for unintentional blocks, verify important pages allowed, check sitemap reference
- Verify AI bot access: Googlebot, Bingbot, GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot
XML Sitemap
- Exists and accessible, submitted to Search Console
- Contains only canonical, indexable URLs, updated regularly
Site Architecture
- Important pages within 3 clicks of homepage
- Logical hierarchy, descriptive internal linking, no orphan pages
Indexation
site:domain.com check, Search Console coverage report
- Check for noindex on important pages, wrong canonicals, redirect chains, soft 404s, duplicate content
Canonicalization
- All pages have canonical tags, self-referencing canonicals on unique pages
- HTTP→HTTPS, www vs non-www, trailing slash consistency
2. Technical Foundations
Core Web Vitals
- LCP < 2.5s, INP < 200ms, CLS < 0.1
- Check: TTFB, image optimization, JS execution, CSS delivery, caching, CDN, font loading
Mobile
- Responsive design (not separate m. site), tap targets, viewport, no horizontal scroll
- Same content as desktop, mobile-first indexing readiness
Security
- HTTPS everywhere, valid SSL, no mixed content, HTTP→HTTPS redirects, HSTS header
URL Structure
- Readable, descriptive, keywords where natural, consistent, lowercase, hyphen-separated
2b. Social Preview / OG Cards
Middleware (Next.js)
- Middleware file is named
middleware.ts (not proxy.ts or other names)
- Export is named
middleware or default (Next.js silently ignores other names)
- Social bots (Twitterbot, facebookexternalhit, etc.) are intercepted and get minimal HTML with meta tags
htmlLimitedBots in next.config.ts covers SEO/AI crawlers the middleware doesn't catch
OG Tag Completeness
For each public page, verify all present:
og:title, og:description, og:url (absolute), og:image (absolute, 1200x630)
og:image:width, og:image:height, og:image:type, og:image:alt
og:type (website or article), og:site_name, og:locale
twitter:card (summary_large_image), twitter:site, twitter:creator
twitter:title, twitter:description, twitter:image, twitter:image:alt
The namespace is still twitter:, not x:. The crawler has not changed.
Robots for Large Cards
- Root layout must include
robots.googleBot["max-image-preview"]: "large"
- Without this, search engines may show thumbnail instead of large image
Canonical Inheritance
- In Next.js App Router, child pages that don't set
alternates.canonical inherit the root's (usually /)
- Every public page needs its own canonical — use
buildPageMetadata to enforce this
metadataBase
- Must resolve to the production domain, not
*.vercel.app
- If using env vars, verify
NEXT_PUBLIC_SITE_URL is set in Vercel project settings
- Relative image URLs in metadata resolve against
metadataBase
OG Image
- 1200x630 pixels, accessible (returns 200), has alt text
Content-Type matches declared type (image/png vs image/jpeg)
- If using
next/og ImageResponse, verify domain branding matches current domain
3. On-Page Optimization
Title Tags
- Unique per page, primary keyword near beginning, 50-60 characters
- Compelling, click-worthy, no brand stuffing (SERPs include brand above title)
- Common issues: duplicates, truncated, too short, keyword-stuffed, missing
Meta Descriptions
- Unique per page, 150-160 characters, includes primary keyword
- Clear value proposition, call to action
- Common issues: duplicates, auto-generated, wrong length
Heading Structure
- One H1 per page containing primary keyword, logical H1→H2→H3 hierarchy
- Common issues: multiple H1s, skipped levels, headings for styling only
Content
- Keyword in first 100 words, related keywords naturally used
- Sufficient depth for topic, answers search intent, better than competitors
- Flag thin content, tag/category pages with no value, near-duplicates
Images
- Descriptive filenames, alt text on all images, compressed, WebP, lazy loading, responsive
Internal Linking
- Important pages well-linked, descriptive anchor text, no broken links
- Flag orphan pages, over-optimized anchors, buried important pages
Keyword Targeting
- Clear primary keyword per page, title/H1/URL aligned, satisfies search intent
- No keyword cannibalization, logical topical clusters site-wide
4. Content Quality (E-E-A-T)
Experience: First-hand experience, original insights/data, real examples and case studies
Expertise: Author credentials visible, accurate detailed info, properly sourced claims
Authoritativeness: Recognized in space, cited by others, industry credentials
Trustworthiness: Accurate info, transparent, contact info, privacy policy, HTTPS
Content Depth
- Comprehensive topic coverage, answers follow-up questions
- Better than top-ranking competitors, updated and current
5. Site-Type Specific Issues
SaaS: Product pages lack depth, blog not integrated, missing comparison/alternative pages
E-commerce: Thin category pages, duplicate product descriptions, missing product schema, faceted nav duplicates
Content/Blog: Outdated content, keyword cannibalization, no topical clustering, poor internal linking
Local Business: Inconsistent NAP, missing local schema, no Google Business Profile optimization
Output Format
Executive Summary
- Overall health assessment, top 3-5 priority issues, quick wins
Per Finding
- Issue: What's wrong
- Impact: High / Medium / Low
- Evidence: How you found it
- Fix: Specific recommendation
- Priority: 1-5
Prioritized Action Plan
- Critical fixes (blocking indexation/ranking)
- High-impact improvements
- Quick wins (easy, immediate benefit)
- Long-term recommendations
Quick Commands
# Check meta tags and schema
curl -sL "https://example.com" | rg -i "<title>|<meta name=\"description\"|<meta property=\"og:|application/ld\+json" | head -20
# Check robots.txt
curl -s "https://example.com/robots.txt"
# Check sitemap
curl -s "https://example.com/sitemap.xml" | head -50
# Validate schema (open in browser)
open "https://search.google.com/test/rich-results?url=https://example.com"
Related Skills
seo-geo-optimization — AI search engine optimization (GEO/AEO)
og-metadata-audit — OpenGraph/Twitter card audit and DRY patterns
content-strategy — content planning and publishing rhythm
social-draft — platform-optimized content drafting
1---2name: seo-audit3description: Comprehensive SEO auditing covering crawlability, indexation, speed, on-page optimization, and content quality. Use when auditing a website's SEO, reviewing technical SEO foundations, checking meta tags, analyzing page speed, or when the user says "SEO audit", "check SEO", "audit this site", "technical SEO", or "crawlability check." Based on coreyhaines31/marketingskills.4---56# SEO Audit78Systematic assessment across five priority areas. Deliver findings as prioritized action plans with impact levels and specific remediation steps.910## Audit Priority Order11121. **Crawlability & Indexation** — can search engines find and index it?132. **Technical Foundations** — is the site fast and functional?143. **On-Page Optimization** — is content optimized?154. **Content Quality** — does it deserve to rank?165. **Authority & Links** — does it have credibility?1718## Initial Assessment1920Before auditing, understand:21- Site type (SaaS, e-commerce, blog, etc.) and primary business goal for SEO22- Known issues, current organic traffic level, recent changes or migrations23- Scope: full site or specific pages, technical + on-page or one focus area2425## Schema Markup Detection Limitation2627`web_fetch` and `curl` cannot reliably detect structured data. Many CMS plugins inject JSON-LD via client-side JavaScript — it won't appear in static HTML.2829To accurately check for schema:301. Browser tool: `document.querySelectorAll('script[type="application/ld+json"]')`312. Google Rich Results Test: https://search.google.com/test/rich-results323. Screaming Frog export (renders JavaScript)3334Never report "no schema found" based solely on `web_fetch` or `curl`.3536## 1. Crawlability & Indexation3738### Robots.txt39- Check for unintentional blocks, verify important pages allowed, check sitemap reference40- Verify AI bot access: Googlebot, Bingbot, GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot4142### XML Sitemap43- Exists and accessible, submitted to Search Console44- Contains only canonical, indexable URLs, updated regularly4546### Site Architecture47- Important pages within 3 clicks of homepage48- Logical hierarchy, descriptive internal linking, no orphan pages4950### Indexation51- `site:domain.com` check, Search Console coverage report52- Check for noindex on important pages, wrong canonicals, redirect chains, soft 404s, duplicate content5354### Canonicalization55- All pages have canonical tags, self-referencing canonicals on unique pages56- HTTP→HTTPS, www vs non-www, trailing slash consistency5758## 2. Technical Foundations5960### Core Web Vitals61- LCP < 2.5s, INP < 200ms, CLS < 0.162- Check: TTFB, image optimization, JS execution, CSS delivery, caching, CDN, font loading6364### Mobile65- Responsive design (not separate m. site), tap targets, viewport, no horizontal scroll66- Same content as desktop, mobile-first indexing readiness6768### Security69- HTTPS everywhere, valid SSL, no mixed content, HTTP→HTTPS redirects, HSTS header7071### URL Structure72- Readable, descriptive, keywords where natural, consistent, lowercase, hyphen-separated7374## 2b. Social Preview / OG Cards7576### Middleware (Next.js)77- Middleware file is named `middleware.ts` (not `proxy.ts` or other names)78- Export is named `middleware` or `default` (Next.js silently ignores other names)79- Social bots (Twitterbot, facebookexternalhit, etc.) are intercepted and get minimal HTML with meta tags80- `htmlLimitedBots` in `next.config.ts` covers SEO/AI crawlers the middleware doesn't catch8182### OG Tag Completeness83For each public page, verify all present:84- `og:title`, `og:description`, `og:url` (absolute), `og:image` (absolute, 1200x630)85- `og:image:width`, `og:image:height`, `og:image:type`, `og:image:alt`86- `og:type` (`website` or `article`), `og:site_name`, `og:locale`87- `twitter:card` (`summary_large_image`), `twitter:site`, `twitter:creator`88- `twitter:title`, `twitter:description`, `twitter:image`, `twitter:image:alt`8990The namespace is still `twitter:`, not `x:`. The crawler has not changed.9192### Robots for Large Cards93- Root layout must include `robots.googleBot["max-image-preview"]: "large"`94- Without this, search engines may show thumbnail instead of large image9596### Canonical Inheritance97- In Next.js App Router, child pages that don't set `alternates.canonical` inherit the root's (usually `/`)98- Every public page needs its own canonical — use `buildPageMetadata` to enforce this99100### metadataBase101- Must resolve to the production domain, not `*.vercel.app`102- If using env vars, verify `NEXT_PUBLIC_SITE_URL` is set in Vercel project settings103- Relative image URLs in metadata resolve against `metadataBase`104105### OG Image106- 1200x630 pixels, accessible (returns 200), has alt text107- `Content-Type` matches declared type (`image/png` vs `image/jpeg`)108- If using `next/og` ImageResponse, verify domain branding matches current domain109110## 3. On-Page Optimization111112### Title Tags113- Unique per page, primary keyword near beginning, 50-60 characters114- Compelling, click-worthy, no brand stuffing (SERPs include brand above title)115- Common issues: duplicates, truncated, too short, keyword-stuffed, missing116117### Meta Descriptions118- Unique per page, 150-160 characters, includes primary keyword119- Clear value proposition, call to action120- Common issues: duplicates, auto-generated, wrong length121122### Heading Structure123- One H1 per page containing primary keyword, logical H1→H2→H3 hierarchy124- Common issues: multiple H1s, skipped levels, headings for styling only125126### Content127- Keyword in first 100 words, related keywords naturally used128- Sufficient depth for topic, answers search intent, better than competitors129- Flag thin content, tag/category pages with no value, near-duplicates130131### Images132- Descriptive filenames, alt text on all images, compressed, WebP, lazy loading, responsive133134### Internal Linking135- Important pages well-linked, descriptive anchor text, no broken links136- Flag orphan pages, over-optimized anchors, buried important pages137138### Keyword Targeting139- Clear primary keyword per page, title/H1/URL aligned, satisfies search intent140- No keyword cannibalization, logical topical clusters site-wide141142## 4. Content Quality (E-E-A-T)143144**Experience**: First-hand experience, original insights/data, real examples and case studies145**Expertise**: Author credentials visible, accurate detailed info, properly sourced claims146**Authoritativeness**: Recognized in space, cited by others, industry credentials147**Trustworthiness**: Accurate info, transparent, contact info, privacy policy, HTTPS148149### Content Depth150- Comprehensive topic coverage, answers follow-up questions151- Better than top-ranking competitors, updated and current152153## 5. Site-Type Specific Issues154155**SaaS**: Product pages lack depth, blog not integrated, missing comparison/alternative pages156**E-commerce**: Thin category pages, duplicate product descriptions, missing product schema, faceted nav duplicates157**Content/Blog**: Outdated content, keyword cannibalization, no topical clustering, poor internal linking158**Local Business**: Inconsistent NAP, missing local schema, no Google Business Profile optimization159160## Output Format161162### Executive Summary163- Overall health assessment, top 3-5 priority issues, quick wins164165### Per Finding166- **Issue**: What's wrong167- **Impact**: High / Medium / Low168- **Evidence**: How you found it169- **Fix**: Specific recommendation170- **Priority**: 1-5171172### Prioritized Action Plan1731. Critical fixes (blocking indexation/ranking)1742. High-impact improvements1753. Quick wins (easy, immediate benefit)1764. Long-term recommendations177178## Quick Commands179180```bash181# Check meta tags and schema182curl -sL "https://example.com" | rg -i "<title>|<meta name=\"description\"|<meta property=\"og:|application/ld\+json" | head -20183184# Check robots.txt185curl -s "https://example.com/robots.txt"186187# Check sitemap188curl -s "https://example.com/sitemap.xml" | head -50189190# Validate schema (open in browser)191open "https://search.google.com/test/rich-results?url=https://example.com"192```193194## Related Skills195196- `seo-geo-optimization` — AI search engine optimization (GEO/AEO)197- `og-metadata-audit` — OpenGraph/Twitter card audit and DRY patterns198- `content-strategy` — content planning and publishing rhythm199- `social-draft` — platform-optimized content drafting