Agent skill

Blog Audit

by AgriciDaniel in AgriciDaniel/claude-blog

Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness.

MITAuto-check: notesMarketing & SEO

Install Blog Audit

skills CLI
$ npx skills add AgriciDaniel/claude-blog --skill blog-audit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install AgriciDaniel/claude-blog blog-audit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/AgriciDaniel/claude-blog.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/blog-audit .claude/skills/blog-audit && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
blog-audit
GitHub stars
2.3k
Token cost
~2.4k tokens
SKILL.md length
985 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
MIT

At a glance

Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness.

  • Works in 8 steps: Discover Blog Files → Canonical Batch Analysis → 5: Technical Crawl and Search Performance → …
  • User says audit blog
  • SKILL.md covers Audit Process and Cross-reference
  • Calls python3

What it does

Blog Audit is an agent skill from AgriciDaniel/claude-blog. Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness. Runs canonical batch analysis before site-wide checks. Produces per-post scores and a prioritized action queue. Use when user says "audit blog", "blog audit", "site audit", "blog health", "audit all posts", "check all blogs".

Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Marketing & SEO, covering AI search optimization and SEO audit. The repository describes itself as: Claude Code blog skill suite: 30 sub-skills, 5 agents, 5-gate v1.9.0 Blog Delivery Contract, dual-optimized for Google rankings and AI citations. Active development at… The licence is MIT.

When your agent uses it

  • User says audit blog
  • Audit all posts
  • Check all blogs

Example prompts

  • “audit blog”
  • “blog audit”
  • “site audit”
  • “/blog-audit”

Requirements

  • Python 3

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Discover Blog Files
  2. Canonical Batch Analysis
  3. 5: Technical Crawl and Search Performance
  4. Topic Cannibalization Detection
  5. Orphan Page Detection
  6. Stale Content Detection
  7. Generate Site-Wide Report
  8. Save Report

What it can do on your machine

Read from SKILL.md and the folder at commit 2500d4c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Blog Audit loads about 2.4k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 985 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~98
When it runs · the whole SKILL.md, loaded when a task matches
~2.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:43
    config files, SKILL.md, package files, `.env*`, keys, and private notes

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from AgriciDaniel/claude-blog at commit 2500d4c, republished under its MIT licence (© AgriciDaniel). 985 words, ~2,442 tokens.

Download SKILL.mdSave it as .claude/skills/blog-audit/SKILL.md (or your agent's skills folder).
name
blog-audit
description
Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness. Runs canonical batch analysis before site-wide checks. Produces per-post scores and a prioritized action queue. Use when user says "audit blog", "blog audit", "site audit", "blog health", "audit all posts", "check all blogs".
user-invokable
true
argument-hint
[directory]
license
MIT

Blog Audit: Full-Site Health Assessment

Performs a comprehensive blog health assessment across all posts in the project. Scans for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness. Uses the canonical analyzer JSON as the score source and produces a prioritized action queue.

Audit Process

Step 1: Discover Blog Files

Scan the project for all blog content files:

  • Recursively glob for .md, .mdx, .html, .astro, .svelte, .vue, .tsx, and .jsx in common blog directories and CMS export folders
  • Common paths to check:
    • content/
    • posts/
    • blog/
    • src/content/
    • _posts/
    • pages/blog/
    • articles/
    • content/blog/**
    • CMS export folders explicitly provided by the user
    • src/pages/blog/
  • Filter out hidden, vendor, generated, and secret-adjacent paths: .git/, dot-directories, node_modules/, vendor/, dist/, build/, .next/, coverage/, reports/, generated exports, README, CHANGELOG, LICENSE, config files, SKILL.md, package files, .env*, keys, and private notes
  • Report: "Found N blog files in [directories]"

If no blog files are found in standard locations, ask for an allow-listed root or only search user-approved content directories. Do not scan the entire project root by default.

Step 2: Canonical Batch Analysis

Run canonical analyzer output first and use it as the source of per-post scores:

bash
python3 scripts/analyze_blog.py <blog-root> --batch --format json

Process files in chunks, cap parallel follow-up work to a small fixed number, respect context limits, and aggregate deterministic JSON with file, score, categories, issues, and metadata. Layer the site-wide checks below on top of analyzer JSON, not separate scoring rubrics.

Content Quality Layer
  • Score each post on the 30-point content quality scale
  • Review paragraph and sentence pacing in context; lengths are descriptive, not universal pass/fail thresholds
  • Evaluate heading structure and question-format headings
  • Assess readability using persona and content type: consumer content favors easier bands, professional content can be moderate, and technical content may be denser when clarity remains high
SEO Optimization Layer
  • Check on-page SEO elements per post:
    • Title tag length (40-60 acceptable, 50-60 ideal, preview warning only)
    • Meta description is concise and page-specific. Statistics are optional and must be visible and sourced
    • H1 presence and uniqueness
    • Image alt text coverage
    • Internal and external link counts
    • URL slug quality
Schema Validation Layer
  • Detect structured data across all posts
  • Validate Article/BlogPosting, Person, Organization, and BreadcrumbList schema completeness
  • If FAQPage exists, validate it as optional entity markup only, not a Google rich result
  • Normalize dateModified, lastUpdated, updated, and lastmod, including timezone-normalized generated schema, then require freshness parity
  • Flag missing or malformed schema
  • Map internal links across all posts
  • Build a directed link graph
  • Detect orphan pages (zero inbound internal links)
  • Detect dead-end pages (zero outbound internal links)
  • Check for broken internal link targets
  • Recommend bidirectional link opportunities
Freshness Check Layer
  • Read lastUpdated or dateModified from each post's frontmatter
  • Calculate days since last update
  • Flag freshness by content type, source or statistic age, and GSC decay, not by a universal day count
  • Categorize by refresh priority
AI Readiness Layer
  • Score each post for AI citation readiness
  • Check whether important sections are self-contained and evidence-backed
  • Evaluate purpose fit and entity clarity; question headings and FAQs are optional
  • Check whether summaries and structured formats help the intended reader
  • Check robots.txt, llms.txt, SSR/SSG output, JS-gated content, blocked assets, GPTBot, ClaudeBot, PerplexityBot, Googlebot, and Google-Extended policies
Step 2.5: Technical Crawl and Search Performance

Add site-wide technical checks before final recommendations:

  • Validate sitemap coverage, robots.txt, noindex directives, canonical tags, redirects, HTTP status codes, hreflang, and internal canonical consistency
  • Use blog-google when available for Core Web Vitals, GSC queries, URL Inspection, indexing status, and GA4 context
  • Report skipped optional checks with reasons such as SKIPPED: credentials unavailable
Show full SKILL.md (404 more words)Show less
Step 3: Topic Cannibalization Detection

Analyze across all posts for keyword competition:

  1. Extract primary keyword/topic from each post:
    • Title text
    • H1 heading
    • Meta description
    • First paragraph
  2. Normalize keywords with stopword handling, lemmatization, locale awareness, and intent modifiers
  3. Cluster by intent using analyzer data, embeddings or explicit confidence, GSC query-to-URL data when available, and SERP overlap where available
  4. Flag competing posts with one of these recommendations:
    • Merge: Combine two weak posts into one strong post
    • Redirect: 301 redirect the weaker post to the stronger one after preserving backlinks, validating a redirect map, and updating internal links
    • Differentiate: Adjust focus so posts target distinct intents
Step 4: Orphan Page Detection

Build and analyze the internal link graph:

  1. Normalize URLs against site config and sitemap, including relative links, same-domain absolutes, trailing slashes, generated routes, anchors, and slug mappings
  2. Build an adjacency map: { page -> [pages it links to] }
  3. Build a reverse map: { page -> [pages linking to it] }
  4. Identify orphan pages: posts with zero inbound internal links
  5. Identify dead-end pages: posts with zero outbound internal links
  6. For each orphan, recommend 2-3 existing posts that should link to it based on topic relevance
Step 5: Stale Content Detection

Audit content freshness across all posts:

  1. Read frontmatter fields: lastUpdated, dateModified, date, updated
  2. Calculate days since last update for each post
  3. Categorize by refresh priority:
    • High: Volatile topic, stale sources or statistics, or GSC decay
    • Medium: Evergreen topic with aging examples, links, or screenshots
    • Low: Recently validated or stable reference content
  4. Estimate refresh effort per post:
    • Light refresh: Update statistics, check links (1-2 hours)
    • Moderate refresh: Rewrite sections, add new data (3-4 hours)
    • Heavy refresh: Full rewrite recommended (5+ hours)
Step 6: Generate Site-Wide Report

Aggregate all results into a comprehensive report:

Summary Dashboard
## Blog Audit Report

**Audit Date:** [date]
**Total Posts:** N
**Average Score:** XX/100

### Health Overview
| Metric | Count |
|--------|-------|
| Posts Scoring 90+ (Excellent) | N |
| Posts Scoring 70-89 (Good) | N |
| Posts Scoring 50-69 (Needs Work) | N |
| Posts Scoring <50 (Poor) | N |
| Orphan Pages | N |
| Dead-End Pages | N |
| Cannibalization Issues | N |
| Stale or Decaying Content | N |
Per-Post Table
### Per-Post Scores
| Post | Score | Content | SEO | E-E-A-T | Technical | AI Citation | Issues |
|------|-------|---------|-----|---------|-----------|-------------|--------|
| [filename] | XX/100 | X/30 | X/25 | X/15 | X/15 | X/15 | [count] |
Prioritized Action Queue
### Prioritized Action Queue (Lowest Score First)
| Priority | Post | Score | Top Issue | Recommended Action |
|----------|------|-------|-----------|--------------------|
| 1 | [file] | XX | [issue] | [action] |
| 2 | [file] | XX | [issue] | [action] |
Cannibalization Report
### Topic Cannibalization
| Keyword | Competing Posts | Recommendation |
|---------|----------------|----------------|
| [keyword] | post-a.md, post-b.md | Merge / Redirect / Differentiate |
Orphan Pages
### Orphan Pages (No Inbound Links)
| Page | Inbound Links | Recommended Link Sources |
|------|---------------|--------------------------|
| [file] | 0 | post-a.md, post-b.md, post-c.md |
Stale Content
### Stale Content
| Post | Last Updated | Days Stale | Priority | Refresh Effort |
|------|-------------|------------|----------|----------------|
| [file] | [date] | [N] | High/Med/Low | Light/Moderate/Heavy |
Step 7: Save Report

Save timestamped Markdown and JSON exports under reports/, for example reports/blog-audit-YYYY-MM-DD.md and reports/blog-audit-YYYY-MM-DD.json. Do not overwrite a previous audit report.

After saving, inform the user:

  • Report locations: [project-root]/reports/blog-audit-YYYY-MM-DD.md and [project-root]/reports/blog-audit-YYYY-MM-DD.json
  • Summary of findings (total posts, average score, critical issues count)
  • Suggest running /blog analyze <file> on the lowest-scoring post first
  • Suggest running /blog flow optimize for AI-citation SEO checks on key posts

Cross-reference

For evidence-led audit prompts beyond this site-wide health pass, see /blog flow optimize (visibility, CTR, schema, extraction audits) and /blog flow win (dual-surface scorecard, conversion audit).

© AgriciDaniel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/blog-audit of AgriciDaniel/claude-blog.

Open the folder on GitHubat commit 2500d4c

Compare with similar skills

Blog Audit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Blog Audit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Blog Audit this skillAgriciDaniel/claude-blog2.3k—~2.4kAutomated safety check: NotesMIT
GEO-First SEO Audit Toolzubair-trabzada/geo-seo-claude11k—~2.8kAutomated safety check: NotesMIT
GEO Monthly Delta Reportzubair-trabzada/geo-seo-claude11k—~2.4kAutomated safety check: NotesMIT
SEO and GEO Auditdageno-agents/seo-geo-audit176—~2kAutomated safety check: PassMIT
GEO Platform Optimizerzubair-trabzada/geo-seo-claude11k2 repos~4.7kAutomated safety check: NotesMIT
AI Discoverability AuditBrianRWagner/ai-marketing-claude-code-skills441—~2.3kAutomated safety check: PassNone

Similar skills

  • GEO-First SEO Audit Tool

    zubair-trabzada/geo-seo-claude

    Audits a website for AI search visibility across ChatGPT, Claude, Perplexity and Google AI Overviews while checking traditional SEO, schema and E-E-A-T content quality.

    11k GitHub stars~2.8k tokensUpdated today
    Marketing & SEOAuto-check: notes
  • GEO Monthly Delta Report

    zubair-trabzada/geo-seo-claude

    Compares a baseline and a current GEO audit for a client, calculates score changes and action item progress, and writes a monthly progress report.

    11k GitHub stars~2.4k tokensUpdated today
    Marketing & SEOAuto-check: notes
  • SEO and GEO Audit

    dageno-agents/seo-geo-audit

    Runs one prioritized audit that combines technical SEO, content quality, trust signals, entity clarity and AI search readiness for a page, site or domain.

    176 GitHub stars~2k tokensUpdated 1 mo ago
    Marketing & SEOAuto-check passed
  • GEO Platform Optimizer

    zubair-trabzada/geo-seo-claude

    Audits a site for AI search visibility one platform at a time, scoring Google AI Overviews, ChatGPT, Perplexity, Gemini and Bing Copilot and listing gaps to fix.

    11k GitHub starsUsed in 2 repos~4.7k tokens
    Marketing & SEOAuto-check: notes
  • AI Discoverability Audit

    BrianRWagner/ai-marketing-claude-code-skills

    Audits how a brand is described by AI search tools such as ChatGPT, Perplexity and Gemini, then produces a scored report, action plan and re-audit schedule.

    441 GitHub stars~2.3k tokensUpdated 6 mo ago
    Marketing & SEOAuto-check passed
  • GEO Client Report

    zubair-trabzada/geo-seo-claude

    Combines the results of several GEO audits into one client-ready report with a weighted GEO Readiness Score, findings and prioritized actions.

    11k GitHub starsUsed in 2 repos~4.5k tokens
    Marketing & SEOAuto-check: notes

More from AgriciDaniel/claude-blog

All 39 skills in this repo
  • Blog Google

    AgriciDaniel/claude-blog

    Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…

    2.3k GitHub starsUsed in 1 repo~3.3k tokens
    Auto-check: notes
  • Blog Audio

    AgriciDaniel/claude-blog

    Generate audio narration of blog posts using Google Gemini TTS.

    2.3k GitHub starsUsed in 1 repo~2.2k tokens
    Auto-check: notes
  • Blog Flow

    AgriciDaniel/claude-blog

    FLOW framework integration for bloggers. An agent skill from AgriciDaniel/claude-blog.

    2.3k GitHub starsUsed in 1 repo~2k tokens
    Auto-check passed
  • Blog Notebooklm

    AgriciDaniel/claude-blog

    Query Google NotebookLM notebooks for source-grounded, citation-backed answers from user-uploaded documents.

    2.3k GitHub starsUsed in 1 repo~2.5k tokens
    Auto-check: warnings
  • Blog Image

    AgriciDaniel/claude-blog

    AI image generation and editing for blog content powered by Gemini via MCP.

    2.3k GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Blog Cluster

    AgriciDaniel/claude-blog

    Semantic topic cluster planning and automated execution engine for claude-blog.

    2.3k GitHub starsUsed in 1 repo~4.9k tokens
    Auto-check passed

Categories

Questions about Blog Audit

What does Blog Audit do?

Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness. Blog Audit is an agent skill from AgriciDaniel/claude-blog. Full-site blog health assessment scanning all blog files for quality scores, orphan pages, topic cannibalization, stale content, and AI citation readiness.

When should I use Blog Audit?

Blog Audit fits situations like: user says audit blog; audit all posts; check all blogs.

How do I install Blog Audit in Claude Code?

Run `npx skills add AgriciDaniel/claude-blog --skill blog-audit -a claude-code`. Or copy the skill folder (skills/blog-audit in AgriciDaniel/claude-blog) into .claude/skills/blog-audit in your project. Claude Code loads it when a task matches its description.

How do I install Blog Audit in Codex?

Run `npx skills add AgriciDaniel/claude-blog --skill blog-audit -a codex`. Or copy the skill folder (skills/blog-audit in AgriciDaniel/claude-blog) into .agents/skills/blog-audit in your project. Codex loads it when a task matches its description.

Can I use Blog Audit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AgriciDaniel/claude-blog --skill blog-audit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/blog-audit, .gemini/skills/blog-audit, .github/skills/blog-audit and .opencode/skills/blog-audit in your project.

What does Blog Audit need to run?

Going by SKILL.md and its folder, Blog Audit needs the command-line tools its instructions call (python3). Our summary lists: Python 3.

Does Blog Audit access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Blog Audit safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Blog Audit use?

Blog Audit is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Blog Audit use?

About 2.4k tokens (SKILL.md is roughly 9.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Blog Audit?

Skills that share tags, products or a category with Blog Audit: GEO-First SEO Audit Tool (zubair-trabzada/geo-seo-claude, 11k stars), GEO Monthly Delta Report (zubair-trabzada/geo-seo-claude, 11k stars), SEO and GEO Audit (dageno-agents/seo-geo-audit, 176 stars) and GEO Platform Optimizer (zubair-trabzada/geo-seo-claude, 11k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Blog Audit?

AgriciDaniel (a GitHub user) maintains it in AgriciDaniel/claude-blog, which has 2,348 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 9, 2026.

Source: AgriciDaniel/claude-blog on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.