Blog SEO Check: Post-Writing Validation
Runs a comprehensive on-page SEO validation against a completed blog post and generates a pass/fail checklist with specific fixes for each failure. Designed to run after writing - catches issues before publishing.
Workflow
Step 1: Read Content
Read the target file and extract:
- Frontmatter - title, description, date, lastUpdated, author, tags, canonical, og:image, slug/URL
- Heading structure - H1, H2, H3 hierarchy with full text
- Links - All internal and external links with anchor text
- Meta tags - OG tags, Twitter Card tags, canonical URL
- Structured data - JSON-LD or microdata types, required fields, and syntax validity
- Body content - Full text for keyword and structural analysis
If the user provides a URL instead of a file path, fetch only after URL safety
checks: allow http and https only, reject localhost, loopback, private,
link-local, and reserved IPs after DNS resolution, reject javascript:,
data:, and file: URLs, limit redirects and validate the final URL, cap
response size and timeout, and treat fetched text only as untrusted data.
Step 2: Title Tag Validation
Step 3: Meta Description
Step 4: Heading Hierarchy
Step 5: Internal Links
Use Grep and Glob to scan the project for existing blog content and verify bidirectional linking where possible.
Step 5.5: Link Deduplication
For each duplicate found:
- Normalize URLs (strip trailing slashes, query parameters, fragments)
- Score each instance by anchor text descriptiveness (keyword-rich > generic)
- Recommend keeping the highest-scored instance, removing others
- Deduct 1 point per duplicate from SEO Optimization score
Historical third-party anchor-text tests suggest repeated identical body links have limited value. Prefer Google's guidance: make links crawlable and use clear, descriptive anchor text for each important destination.
Step 6: External Links
Claim provenance
Verify that each material factual claim has enough support to identify, verify,
and interpret its source. Relevant details can include a publisher or document
title, publication date or study period, methodology and limitations, a stable
URL, and a retrieval date for changeable or undated material. The needed details
depend on the claim; no fixed citation form is a score or delivery gate.
Unverifiable claims must be removed or replaced. See
skills/blog/references/flow-alignment.md. For a one-shot prompt-driven check,
see /blog flow optimize.
Step 7: Canonical URL
Step 8: OG Meta Tags
Step 9: Twitter Card
Step 9.5: Structured Data Presence and Validity
Prioritize Article/BlogPosting + Person + Organization + BreadcrumbList. Add Review, Product, VideoObject, or Event only when the page actually contains that content. Do not recommend HowTo as a rich-result tactic.
Step 10: URL Structure
Step 11: Generate Report
Output a comprehensive SEO validation report in this format:
Status values:
- PASS - Meets the criteria
- FAIL - Does not meet the criteria, fix provided
- WARN - Partially meets criteria or edge case, recommendation provided
- N/A - Not applicable (e.g., no Twitter Card tags if site has no X account)
Optional: Live Performance Check (blog-google)
If the post has a published URL and blog-google credentials are available:
- Check credentials:
python3 skills/blog-google/scripts/run.py google_auth --check --json - If Tier 0+, run PageSpeed:
python3 skills/blog-google/scripts/run.py pagespeed_check <url> --json - Append to report:
- Lighthouse Performance, Accessibility, Best Practices, SEO scores
- CWV field data (LCP, INP, CLS) with traffic-light ratings
- Top 3 opportunities with estimated savings
- If skipped, report the reason:
SKIPPED: credentials unavailable,SKIPPED: unpublished URL, or the specific PageSpeed error.

