Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
shiplightai avatar

Seo Review

  • 1 installs
  • 2 repo stars
  • Updated April 19, 2026
  • shiplightai/claude-code-plugin

Evaluate meta tags, structured data, Open Graph, crawlability, sitemap, robots.txt, and semantic HTML with browser-based validation.

About

Evaluates an application's search engine optimization and discoverability using browser-based validation against Google Search Central, Schema.org, and Open Graph standards. A developer uses it before launching a public-facing site or after migrating to an SPA framework that ships with no SEO.

  • Checks meta tags, structured data, sitemaps, and social sharing
  • Findings prioritized by impact with fix guidance

Seo Review by the numbers

  • 1 all-time installs (skills.sh)
  • Ranked #1,710 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
  • Data as of Jul 27, 2026 (Skillselion catalog sync)
npx skills add https://github.com/shiplightai/claude-code-plugin --skill seo-review

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1
repo stars2
Last updatedApril 19, 2026
Repositoryshiplightai/claude-code-plugin

What it does

Evaluate meta tags, structured data, Open Graph, crawlability, sitemap, robots.txt, and semantic HTML with browser-based validation.

Files

SKILL.mdMarkdownGitHub ↗

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 /shiplight: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: /
    - CODE: |
        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

Related skills

Marketing & SEOseocontent

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.