page-seo-checker ยท diff

git:20260723.1c17b05 to git:20260723.0738ce2

1 added, 1 removed. Audit B to B.

---
name: page-seo-checker
- description: Check SEO compliance of any domain page based on internal SEO standards and page launch checklist, generating a visual HTML report. Automatically extracts domain from URL, supports production and test environments. Trigger keywords: check SEO, SEO check, check page SEO, page SEO compliance, SEO report. Activate when user provides a page URL and requests SEO compliance check.
+ description: "Check SEO compliance of any domain page based on internal SEO standards and page launch checklist, generating a visual HTML report. Automatically extracts domain from URL, supports production and test environments. Trigger keywords: check SEO, SEO check, check page SEO, page SEO compliance, SEO report. Activate when user provides a page URL and requests SEO compliance check."
agent_created: true
---
# Page SEO Checker โ€” 12-Point Automated Audit
Given a live page URL (production or test environment), this Skill runs a **12-point automated SEO compliance check** and produces a visual HTML report. It verifies that every page meets all hard constraints before going live.
**This is the final step of the SEO automation pipeline** โ€” after content is written, images generated, and localization applied, run this check as the quality gate before publishing.
---
## MCP Dependency
**seo-web-cafe** MCP can optionally be used in this Skill to validate keyword difficulty assumptions. If the page's target keyword was analyzed using seo-keyword-difficulty (Step 0), the checker can cross-reference: did the page actually target a ๐ŸŸข/๐ŸŸก keyword, or was it written for a ๐Ÿ”ด keyword that should be pivoted?
**MCP endpoint**: `mcp__seo-web-cafe__estimate_keyword_difficulty`
- Not required for the core 12-point audit, but available for keyword validation if needed
- If connected, use it to verify the page's primary keyword KD level matches the original decision report
---
## Trigger
Activate when the user asks to:
- Check SEO compliance of a page
- Run an SEO audit on a URL
- Verify page SEO before publishing
- Generate an SEO report
The user must provide a **live URL** (http/https) โ€” this Skill checks real published pages, not draft Markdown.
---
## Required Inputs (Collect First)
**Before starting the audit**, collect the following from the user:
1. **Page URL** โ€” the live page to check (production or test environment)
2. **Brand Name** โ€” the brand name that should appear in the page (needed for Check 1 and Check 12)
Ask in one message:
> "To run the SEO audit, I need:
> 1. The page URL to check
> 2. Your brand name (for brand mention verification)
>
> Please provide these before I start."
Once collected, proceed to Phase 0 below.
---
## Phase 0: Identify Target
1. **URL** โ€” the page to check (provided by the user)
2. **Environment** โ€” auto-detect from URL:
- Production: domain matches `your-domain.com`, etc.
- Test/Staging: domain contains `test`, `staging`, `dev`, `localhost`, or non-production subdomains
3. **Language** โ€” auto-detect from URL path prefix (`/ja/`, `/zh/`, `/ko/`, or default English)
If the URL is unreachable (404/5xx), report the error immediately and stop โ€” there's nothing to check.
---
## Phase 1: 12-Point Automated Audit
For each check point, use **WebFetch** to read the live page, then verify the specific constraint. Each point produces a **Pass โœ“** or **Fail โœ—** result with details.
### Check 1: Title Tag
- **Requirement**: Title exists, contains brand name, 50-60 characters, no banned phrases
- **Method**: Extract `<title>` from page HTML
- **Verify**:
1. Title tag exists and is non-empty โœ“/โœ—
2. Character count within 50-60 โœ“/โœ— (report actual count)
3. Contains brand name (as specified by user) โœ“/โœ—
4. Does NOT contain banned openings: "is an AI-powered tool that..." / "is the ultimate solution..." โœ“/โœ—
5. No articles (a/an/the) before tool name in Title โœ“/โœ—
### Check 2: Meta Description
- **Requirement**: Description exists, 150-160 characters, contains core keyword, no banned phrases
- **Method**: Extract `<meta name="description">` from page HTML
- **Verify**:
1. Description tag exists and is non-empty โœ“/โœ—
2. Character count within 150-160 โœ“/โœ— (report actual count)
3. Contains at least 1 core keyword โœ“/โœ—
4. Does NOT contain banned buzzwords ("revolutionize", "game-changer", etc.) โœ“/โœ—
### Check 3: Canonical Tag
- **Requirement**: `<link rel="canonical">` exists and points to the correct self-referencing URL
- **Method**: Extract canonical link from page HTML
- **Verify**:
1. Canonical tag exists โœ“/โœ—
2. Canonical URL matches the current page URL (ignoring query params/trailing slashes) โœ“/โœ—
3. Canonical URL uses HTTPS โœ“/โœ—
### Check 4: H-Tag Structure
- **Requirement**: Proper hierarchy โ€” exactly 1 H1, H2s for each section, no skipped levels
- **Method**: Extract all `<h1>` through `<h6>` tags from page HTML
- **Verify**:
1. Exactly 1 H1 tag on the page โœ“/โœ— (report count)
2. H1 contains brand/product name โœ“/โœ—
3. H2 tags present for all 8 sections (S1-S8) โœ“/โœ—
4. No H3 used where H2 should be, no H4 used where H3 should be โœ“/โœ—
5. H-tag hierarchy is sequential (H1 โ†’ H2 โ†’ H3, no H1 โ†’ H3 skips) โœ“/โœ—
### Check 5: Body Content โ€” Character Limits
- **Requirement**: Each section's content meets the character limits defined in page-writer
- **Method**: Parse section content by `<!-- S1-S8 -->` HTML comments, or by H2 boundaries
- **Verify**:
1. S1 What Is: 200-300 chars โœ“/โœ— (report count)
2. S2 Pain Point: P โ‰ค 200 chars โœ“/โœ— (report count)
3. S3 Feature summary: โ‰ค 100 chars โœ“/โœ— (report count)
4. S3 Each feature description: ~100 chars โœ“/โœ— (report count)
5. S4 Each user group: โ‰ค 150 chars โœ“/โœ— (report count)
6. S5 Each step: ~70 chars โœ“/โœ— (report count)
7. S6 CTA: โ‰ค 150 chars โœ“/โœ— (report count)
8. S7 Each review: โ‰ฅ 300 chars โœ“/โœ— (report count)
9. S8 Each FAQ answer: 200-300 chars โœ“/โœ— (report count)
### Check 6: Testimonials โ€” Realism & Variety
- **Requirement**: 6 reviews with at least 4 different narrative arcs, no banned patterns
- **Method**: Extract review block content from S7
- **Verify**:
1. At least 6 distinct reviews present โœ“/โœ— (report count)
2. No "I've been using X for Y months and it's amazing!" openings โœ“/โœ—
3. At least 4 different narrative arcs identifiable โœ“/โœ— (list arcs found)
4. Each review โ‰ฅ 300 chars โœ“/โœ—
### Check 7: FAQ โ€” Structure & Banned Patterns
- **Requirement**: 10 FAQs, Q1 is "What is [Product]", no banned openings
- **Method**: Extract FAQ block from S8
- **Verify**:
1. At least 10 FAQs present โœ“/โœ— (report count)
2. Q1 asks "What is [Product] and what makes it different?" โœ“/โœ—
3. No "Absolutely!" or "Great question!" answer openings โœ“/โœ—
4. Each answer 200-300 chars โœ“/โœ— (report min/max)
### Check 8: Image ALT Tags
- **Requirement**: All `<img>` tags have non-empty, descriptive alt text containing keyword
- **Method**: Extract all `<img>` tags and their `alt` attributes from page HTML
- **Verify**:
1. Every `<img>` has an `alt` attribute โœ“/โœ— (report count of missing alt)
2. Alt text is non-empty (not just "") โœ“/โœ—
3. At least 1 image alt contains the core keyword โœ“/โœ—
4. Alt text describes content, not just "image" or "photo" โœ“/โœ—
### Check 9: Internal Links
- **Requirement**: At least 3 internal links to other site pages, using keyword-rich anchor text
- **Method**: Extract all `<a>` tags with href pointing to the same domain
- **Verify**:
1. At least 3 internal links present โœ“/โœ— (report count)
2. Anchor text is descriptive (not "click here" or "learn more") โœ“/โœ—
3. Links point to other tool/content pages (not just homepage) โœ“/โœ—
### Check 10: Schema / Structured Data
- **Requirement**: FAQ Schema (FAQPage) and/or Product Schema present in JSON-LD
- **Method**: Extract `<script type="application/ld+json">` blocks from page HTML
- **Verify**:
1. At least 1 JSON-LD block exists โœ“/โœ—
2. If FAQ section exists: FAQPage schema with all 10 Q&A pairs โœ“/โœ—
3. Schema is valid JSON (no syntax errors) โœ“/โœ—
4. Schema `@type` matches content (FAQPage for FAQ, Product/SoftwareApplication for tool pages) โœ“/โœ—
### Check 11: Hreflang Tags (if localized page)
- **Requirement**: If the page is a localized version (ja/zh/ko path), hreflang tags must link back to all language variants including the English original
- **Method**: Extract all `<link rel="alternate" hreflang="...">` tags
- **Verify**:
1. Hreflang tags exist โœ“/โœ— (skip check if English-only page)
2. Includes `hreflang="en"` pointing to original English page โœ“/โœ—
3. Includes `hreflang="x-default"` โœ“/โœ—
4. Includes hreflang for each available language variant โœ“/โœ—
5. All hreflang URLs are valid HTTPS โœ“/โœ—
### Check 12: Brand Name Count & Zero-Article Compliance
- **Requirement**: Brand name appears exactly 10 times; no articles before tool names
- **Method**: Search body content for the brand name (as specified by user) occurrences; also search for `[a/an/the] [tool name]` patterns
- **Verify**:
1. Brand name count = 10 โœ“/โœ— (report actual count and per-section distribution)
2. No instances of "an AI [tool]", "the AI [tool]", "a [tool name]" where tool name is the site's specific product โœ“/โœ— (report any violations found)
---
## Phase 2: Score Calculation
### Scoring
Each check point is worth points based on its SEO impact:
| # | Check | Points | Weight |
|---|-------|--------|--------|
| 1 | Title Tag | 10 | High โ€” Title is the #1 SEO signal |
| 2 | Meta Description | 8 | High โ€” CTR driver |
| 3 | Canonical | 5 | Medium โ€” Prevents duplication |
| 4 | H-Tag Structure | 8 | High โ€” Content hierarchy signal |
| 5 | Body Content Limits | 10 | High โ€” Readability + quality |
| 6 | Testimonials | 5 | Medium โ€” Trust signals |
| 7 | FAQ | 8 | High โ€” FAQ Schema eligibility |
| 8 | Image ALT | 5 | Medium โ€” Accessibility + image SEO |
| 9 | Internal Links | 5 | Medium โ€” Crawlability + authority flow |
| 10 | Schema | 10 | High โ€” Rich results eligibility |
| 11 | Hreflang | 5 | Medium โ€” International SEO (skip if N/A) |
| 12 | Brand Count & Zero-Article | 5 | Medium โ€” Brand consistency |
| **Total** | | **86** | |
- If Check 11 is skipped (English-only page), total becomes **81**. Scale score proportionally.
- **Pass โ‰ฅ 80%** = Green (ready to publish)
- **Pass 60-79%** = Yellow (fix critical items before publishing)
- **Pass < 60%** = Red (do NOT publish โ€” major issues need fixing first)
---
## Phase 3: Generate HTML Report
Produce a standalone HTML file with the following sections:
### Report Structure
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SEO Audit Report โ€” [URL]</title>
<style>
/* Clean, professional styling */
/* Green โœ“ / Red โœ— indicators */
/* Collapsible details for each check */
/* Summary score banner at top */
</style>
</head>
<body>
<header>
<h1>SEO Audit Report</h1>
<div class="meta">URL: [url] | Date: [date] | Env: [prod/test] | Lang: [en/ja/zh/ko]</div>
<div class="score-banner">
<span class="score">[X]/[total]</span>
<span class="badge [green/yellow/red]">[Green/Yellow/Red]</span>
</div>
</header>
<section class="checks">
<!-- For each of the 12 checks -->
<div class="check [pass/fail]">
<h3>Check [N]: [Name]</h3>
<span class="result">[โœ“ Pass / โœ— Fail]</span>
<details>
<summary>Details</summary>
<table>
<tr><td>Sub-check</td><td>Result</td><td>Value</td></tr>
<!-- Each sub-verification item -->
</table>
</details>
<div class="fix-if-fail">[If โœ—: specific fix instruction]</div>
</div>
</section>
<section class="summary">
<h2>Summary & Action Items</h2>
<ul>
<!-- List all โœ— items with fix instructions -->
</ul>
<h2>Recommendation</h2>
<p>[Green: Ready to publish / Yellow: Fix [N] items / Red: Do not publish]</p>
</section>
</body>
</html>
```
Save the report as `seo-audit-[domain]-[date].html` in the current working directory.
---
## Phase 4: Fix Recommendations
For each โœ— item, provide a **specific, actionable fix**:
| Check | Typical Fix |
|-------|------------|
| Title too long/short | "Shorten Title to 50-60 chars: suggested rewrite: `[new title]`" |
| Missing canonical | "Add `<link rel=\"canonical\" href=\"[url]\">` to `<head>`" |
| H-tag skip | "Change H3 to H2 on `[section]`, or add missing H2 before the H3 block" |
| Missing FAQ schema | "Add JSON-LD block with FAQPage schema containing all 10 Q&A pairs" |
| Brand count off | "Add/remove [N] brand mentions. Suggested positions: [list]" |
| Zero-article violation | "Replace `an AI background remover` โ†’ `AI background remover` in [location]" |
Do not just say "fix it" โ€” give the exact correction.
---
## Quality Checklist
Before delivering the report, verify:
1. **All 12 checks executed**: None skipped (except Check 11 for English-only pages)
2. **URL was reachable**: Page successfully fetched โ€” if not, report error and stop
3. **Score calculated correctly**: Total points match, percentage correct
4. **HTML report generated**: File saved, visually clean and complete
5. **Fix recommendations provided**: Every โœ— has a specific correction
6. **Decision category assigned**: Green/Yellow/Red with clear publish/don't-publish recommendation
---
## Resources
### references/
- `references/seo-checklist.md` โ€” The full SEO checklist with all 12 points, sub-verification items, and expected values. Load this at the start of each audit to ensure completeness.
- `references/report-template.html` โ€” Starter HTML template for the audit report. Customize with actual data each run.