mcpField
S
seo-review

seo-review

github.com/shiplightaiMarketing & growth2416 installsUpdated 16w ago
Repository

About seo-review

seo-review is a guided skill for evaluating a website’s technical SEO and discoverability. It is intended for teams launching or updating public sites, with browser-based checks across metadata, structured data, crawlability, social sharing, and more.

Key features

  1. 01Checks metadata and page head elements
  2. 02Validates structured data and social tags
  3. 03Reviews crawlability, indexing, and links
  4. 04Checks semantic HTML and technical SEO
  5. 05Produces findings, fixes, and YAML regression tests

Use cases

  1. 01Review SEO before a public site launch
  2. 02Check discoverability after a redesign or migration
  3. 03Assess SPA rendering and crawler visibility

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/shiplightai/agent-skills --skill seo-review

After installing, type/seo-reviewin Claude Code to confirm it loaded.

Details

From the project README

SEO Review

Evaluate your application's search engine optimization and discoverability. This review catches SEO issues that are invisible during normal development — missing meta tags, broken structured data, poor crawlability, missing sitemaps, and social sharing problems. Many SPAs ship with zero SEO consideration.

When to use

Use /seo-review when:

  • Before launching a public-facing website or application
  • After redesigning or migrating a website
  • When organic traffic is a growth channel
  • After switching to an SPA framework (React, Vue, Angular)
  • When social sharing (Open Graph) is important
  • Setting up content marketing pages

Standards Referenced

  • Google Search Central — SEO best practices and guidelines
  • Schema.org — Structured data vocabulary
  • Open Graph Protocol — Social sharing meta tags
  • Twitter Card — Twitter sharing markup
  • W3C Semantic HTML — Accessibility and SEO semantics
  • Web.dev SEO Guidelines — Google's SEO recommendations

Phase Overview

Phase 1: EDUCATE   → Why SEO matters and what we check
Phase 2: SCOPE     → Identify key pages, content types, SEO goals
Phase 3: ANALYZE   → Browser-based SEO validation
Phase 4: REPORT    → Findings with impact assessment and priority
Phase 5: REMEDIATE → Fix guidance + YAML regression tests

Phase 1: Educate

Why this matters: 53% of all website traffic comes from organic search (BrightEdge). The first Google result gets 27.6% of all clicks; position 10 gets 2.4% (Backlinko). SPAs often render blank HTML to crawlers, making millions of pages invisible to search. Proper SEO doesn't require tricks — it requires making your content discoverable and understandable by search engines.

This review checks the technical SEO foundation — the things that must be correct before content strategy matters.


Phase 2: Scope

Gather context
  1. Auto-detect from codebase:

    • Framework and rendering strategy (SSR, SSG, CSR, ISR)
    • Meta tag management (react-helmet, next/head, vue-meta, etc.)
    • Sitemap generation
    • robots.txt configuration
    • Structured data (JSON-LD, microdata)
    • i18n/hreflang setup
    • Canonical URL handling
    • Route structure and page types
  2. Ask the user (one at a time):

    • Target URL: Where is the app running? (production preferred for realistic crawling)
    • Key pages: Which pages are most important for search? (homepage, product pages, blog posts, landing pages)
    • Target keywords: Any primary keywords you want to rank for? (optional, for content evaluation)
    • Social sharing important?: Is Open Graph / Twitter Cards needed? (default: yes for public sites)
    • Multi-language?: Does the site serve multiple languages? (auto-detected)
  3. Identify page types:

    • Homepage
    • Content pages (blog, docs, about)
    • Product/listing pages
    • Dynamic pages (search results, user profiles)
    • Utility pages (login, 404, terms)

Phase 3: Analyze

Open a browser session with new_session using record_evidence: true. For each key page, run all check categories.

Category A: Meta Tags & Head Elements (META)
Check IDCheckStandardMethod
META-01Unique, descriptive <title> (50-60 chars)Google guidelinesExtract <title>, check length and uniqueness
META-02Meta description present (120-160 chars)Google guidelinesCheck <meta name="description">
META-03Canonical URL set correctlyGoogle guidelinesCheck <link rel="canonical">
META-04Viewport meta tag presentMobile SEOCheck <meta name="viewport">
META-05Charset declaredHTML standardCheck <meta charset>
META-06No duplicate meta tagsSEO best practiceCheck for duplicate titles, descriptions
META-07Favicon presentBranding/SEOCheck <link rel="icon">
META-08Language declaredSEO/a11yCheck <html lang="">
META-09No meta robots noindex on important pagesIndexingCheck <meta name="robots">
META-10Hreflang tags for multi-language (if applicable)International SEOCheck <link rel="alternate" hreflang="">

Browser validation: Use inspect_page to read the DOM. Extract all <head> elements via JavaScript.

Category B: Structured Data (SCHEMA)
Check IDCheckStandardMethod
SCHEMA-01JSON-LD structured data presentSchema.orgCheck for <script type="application/ld+json">
SCHEMA-02Schema type matches page contentSchema.orgValidate type (Organization, Product, Article, etc.)
SCHEMA-03Required properties presentSchema.orgValidate against type requirements
SCHEMA-04JSON-LD is valid JSONSchema.orgParse and validate JSON
SCHEMA-05No deprecated schema propertiesSchema.orgCheck for deprecated fields
SCHEMA-06Breadcrumb structured dataSchema.orgCheck for BreadcrumbList on interior pages
SCHEMA-07FAQ structured data (if applicable)Schema.orgCheck for FAQPage on FAQ sections
SCHEMA-08Review/Rating structured data (if applicable)Schema.orgCheck for AggregateRating

Browser validation: Extract JSON-LD scripts via JavaScript. Parse and validate structure. Compare page content against schema claims.

Category C: Open Graph & Social Sharing (OG)
Check IDCheckStandardMethod
OG-01og:title present and meaningfulOpen GraphCheck <meta property="og:title">
OG-02og:description presentOpen GraphCheck <meta property="og:description">
OG-03og:image present and accessibleOpen GraphCheck <meta property="og:image">, verify URL loads
OG-04og:image dimensions adequate (1200x630 recommended)Open GraphCheck image size
OG-05og:url matches canonicalOpen GraphCompare og:url with canonical
OG-06og:type set correctlyOpen GraphCheck og:type value
OG-07Twitter card meta tags presentTwitter CardsCheck twitter:card, twitter:title, etc.
OG-08Social sharing preview looks correctUXConstruct preview from OG tags

Browser validation: Extract all OG and Twitter meta tags. Verify og:image URL is accessible. Construct a preview representation.

Category D: Crawlability & Indexing (CRAWL)
Check IDCheckStandardMethod
CRAWL-01robots.txt exists and is validGoogle guidelinesFetch /robots.txt
CRAWL-02Sitemap.xml exists and is validGoogle guidelinesFetch /sitemap.xml, validate format
CRAWL-03Sitemap referenced in robots.txtBest practiceCheck robots.txt for Sitemap directive
CRAWL-04Important pages are in sitemapSEOCross-reference key pages with sitemap URLs
CRAWL-05No broken internal linksCrawlabilityCheck all internal links on key pages
CRAWL-06No redirect chains (>2 hops)Crawl efficiencyFollow redirects, count hops
CRAWL-07Clean URL structure (no excessive params)SEOCheck URL patterns for cleanliness
CRAWL-08404 page returns correct HTTP statusSEONavigate to non-existent URL, check status
CRAWL-09No orphan pages (accessible from navigation)CrawlabilityVerify key pages linked from homepage/nav
CRAWL-10SSR/SSG content visible without JavaScriptSPA SEODisable JS, check if content renders
CRAWL-11Page load time for crawlersCrawl budgetMeasure server response time

Browser validation: Navigate to robots.txt, sitemap.xml. Follow internal links. Disable JavaScript to test server-rendered content. Check HTTP status codes.

Category E: Semantic HTML & Content (SEM)
Check IDCheckStandardMethod
SEM-01Single <h1> per pageSEO best practiceCount h1 elements
SEM-02Heading hierarchy is logical (h1→h2→h3)SEO/a11yCheck heading sequence
SEM-03Images have descriptive alt textSEO/a11yCheck alt attributes for descriptiveness
SEM-04Internal links use descriptive anchor textSEOCheck for "click here" or bare URLs as links
SEM-05Semantic HTML elements used (nav, main, article, section)SEOCheck for semantic landmarks
SEM-06Content-to-HTML ratio is reasonableSEOCalculate text content vs HTML markup
SEM-07No duplicate content across pagesSEOCompare key content sections across pages
SEM-08URLs are human-readableSEOCheck for descriptive slugs vs IDs/hashes

Browser validation: Extract headings, links, images, and semantic elements via JavaScript. Analyze content structure.

Category F: Technical SEO (TECH)
Check IDCheckStandardMethod
TECH-01HTTPS everywhereGoogle ranking signalCheck protocol
TECH-02HTTP → HTTPS redirect worksSEOTest HTTP URL redirect
TECH-03www → non-www (or vice versa) redirect consistentSEOTest both variants
TECH-04Mobile-friendly (responsive)Google mobile-firstCheck viewport, responsive behavior
TECH-05Core Web Vitals pass "Good" thresholdsGoogle ranking signalMeasure LCP, INP, CLS
TECH-06No render-blocking resourcesPage speedCheck script/style loading
TECH-07Proper 301 redirects for moved contentSEOCheck known old URLs if applicable
TECH-08International targeting correct (if multi-region)International SEOCheck hreflang, geo-targeting

Browser validation: Test redirects, measure performance metrics, check mobile rendering.


Phase 4: Report

Generate a structured report saved to shiplight/reports/seo-review-{date}.md:

# SEO Review Report
**Date:** {date}
**URL:** {url}
**Pages reviewed:** {list}
**Rendering:** {SSR/SSG/CSR/ISR}

## Overall Score: {X}/10 | Confidence: {X}%

## Score Breakdown
| Category | Score | Findings |
|----------|-------|----------|
| Meta Tags (META) | 7/10 | 1 high, 2 medium |
| Structured Data (SCHEMA) | 4/10 | 1 critical, 1 high |
| Social Sharing (OG) | 6/10 | 2 high |
| Crawlability (CRAWL) | 5/10 | 1 critical, 1 high |
| Semantic HTML (SEM) | 8/10 | 1 medium |
| Technical SEO (TECH) | 7/10 | 1 high |

## Page-by-Page Summary
| Page | Title | Description | OG Image | Schema | H1 | Score |
|------|-------|-------------|----------|--------|----|-------|
| / | ✅ | ✅ | ❌ missing | ❌ none | ✅ | 6/10 |
| /blog | ✅ | ⚠️ too short | ✅ | ✅ Article | ✅ | 8/10 |

## Findings
(structured findings with evidence and impact)
Confidence Scoring
  • 90-100%: Verified in browser — tag present/absent, URL accessible/broken
  • 70-89%: Content analysis suggests issue (e.g., thin content, generic alt text)
  • 50-69%: Best practice recommendation without clear violation
  • Below 50%: Don't report

Phase 5: Remediate

1. Fix guidance (example)
#### CRAWL-10: Content not visible without JavaScript
**Impact:** Search engines may not index your content (especially Google Discover, Bing, social crawlers)
**Current:** Client-side rendered React app, empty HTML shell
**Fix:** Implement SSR or SSG:
- Next.js: Use `getServerSideProps` or `getStaticProps`
- Nuxt: Default SSR mode
- Gatsby: Static generation
- Or: Add prerendering service (prerender.io, rendertron)
**Quick win:** Ensure critical content is in initial HTML response
2. YAML regression test
- name: meta-01-title-present
  description: Verify each key page has a unique, properly-sized title tag
  severity: high
  standard: Google-SEO-Guidelines
  steps:
    - URL: /
    - description: Assert the page title is present and 20-60 characters
      js: |
        const title = await page.title();
        if (!title || title.trim() === '') {
          throw new Error('Page has no title');
        }
        if (title.length < 20) {
          throw new Error(`Title too short (${title.length} chars): "${title}"`);
        }
        if (title.length > 60) {
          throw new Error(`Title too long (${title.length} chars): "${title}"`);
        }
        console.log(`Title OK (${title.length} chars): "${title}"`);
    - VERIFY: Page has a descriptive title between 20 and 60 characters

Save all YAML tests to shiplight/tests/seo-review.test.yaml.


Depth Levels

  • --quick: Meta tags + canonical + robots.txt on homepage only. ~2 minutes.
  • default: All categories on key pages. ~8-12 minutes.
  • --thorough: All categories + full site crawl + all page types + content analysis. ~20-30 minutes.

Tips

  • Test with JavaScript disabled to see what search engines see (especially for SPAs)
  • Use inspect_page DOM output to extract <head> content efficiently
  • Check sitemap.xml manually — auto-generated sitemaps often include pages that shouldn't be indexed
  • OG image must be an absolute URL — relative URLs don't work for social sharing
  • For SPA SEO, the critical question is: "Does the initial HTML contain the content?"
  • Close session with close_session and use generate_html_report for evidence

Comments

Markdown supported