
Shopify Admin Page Content Audit
- 7 installs
- 173 repo stars
- Updated June 26, 2026
- 40rty-ai/shopify-admin-skills
shopify-admin-page-content-audit is a Claude Code skill that lists all Shopify pages and blog posts and flags empty or short content and missing SEO fields.
About
This skill scans every Shopify page and blog article for missing or thin content and missing SEO title/description fields. A store manager uses it to find pages penalized by search engines or that create a poor customer experience, especially after a CMS migration or theme change. It is read-only and produces a dated CSV of flagged issues.
- Scans all Shopify pages and blog articles for thin or empty content
- Flags missing SEO title and description fields
- Read-only; outputs a dated content-audit CSV
Shopify Admin Page Content Audit by the numbers
- 7 all-time installs (skills.sh)
- Ranked #1,549 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 1, 2026 (Skillselion catalog sync)
shopify-admin-page-content-audit capabilities & compatibility
Free skill; requires an authenticated Shopify store session with read_content scope.
- Capabilities
- content audit · seo audit · thin content detection
- Works with
- github
- Use cases
- seo
- Runs
- Runs locally
- Pricing
- Bring your own API key
- Requires keys
- SHOPIFYSTOREADMINAUTHVIASHOPIFYCLI
What shopify-admin-page-content-audit says it does
Scans all store pages and blog articles for missing or thin content (short body, missing SEO title/description, empty body).
A page with fewer than 300 words is generally considered "thin content" by search engines
npx skills add https://github.com/40rty-ai/shopify-admin-skills --skill shopify-admin-page-content-auditAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 7 |
|---|---|
| repo stars | ★ 173 |
| Last updated | June 26, 2026 |
| Repository | 40rty-ai/shopify-admin-skills ↗ |
What it does
Audit Shopify pages and blog posts for thin content and missing SEO fields.
Who is it for?
Store managers auditing content pages and articles for thin content and missing SEO metadata.
Skip if: Auditing products and collections; it explicitly complements seo-metadata-audit which covers those.
When should I use this skill?
You need to find thin-content or SEO-incomplete Shopify pages and blog articles, e.g. after a CMS migration.
What you get
A dated CSV lists every page and article with empty/short body or missing SEO title/description.
- CSV content_audit_<date>.csv with type, title, body_length, has_seo_title, has_seo_description, issue columns
By the numbers
- 9-column output CSV
- default min_body_length of 100 characters
Files
Purpose
Scans all store pages and blog articles for missing or thin content (short body, missing SEO title/description, empty body). Thin content pages are penalized by search engines and create a poor customer experience. Read-only — no mutations. Complements seo-metadata-audit (which covers products and collections).
Prerequisites
- Authenticated Shopify CLI session:
shopify store auth --store <domain> --scopes read_content - API scopes:
read_content
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| min_body_length | integer | no | 100 | Flag pages with body content shorter than this (characters) |
| include_unpublished | bool | no | false | Also audit unpublished pages and articles |
| format | string | no | human | Output format: human or json |
Safety
ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.
Workflow Steps
1. OPERATION: pages — query Inputs: first: 250, select title, body, bodySummary, seo, publishedAt, pagination cursor Expected output: All pages with content and SEO data
2. OPERATION: articles — query Inputs: first: 250, select title, body, seo, publishedAt, blog { title }, pagination cursor Expected output: All blog articles with content data
3. Flag: empty body, body < min_body_length, missing SEO title, missing SEO description
GraphQL Operations
# pages:query — validated against api_version 2025-04
query PageContentAudit($after: String) {
pages(first: 250, after: $after) {
edges {
node {
id
title
handle
publishedAt
bodySummary
body
seoTitle: metafield(namespace: "global", key: "title_tag") { value }
seoDescription: metafield(namespace: "global", key: "description_tag") { value }
}
}
pageInfo {
hasNextPage
endCursor
}
}
}# articles:query — validated against api_version 2025-04
query ArticleContentAudit($after: String) {
articles(first: 250, after: $after) {
edges {
node {
id
title
handle
publishedAt
body
summary
seoTitle: metafield(namespace: "global", key: "title_tag") { value }
seoDescription: metafield(namespace: "global", key: "description_tag") { value }
blog {
id
title
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}Session Tracking
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: Page Content Audit ║
║ Store: <store domain> ║
║ Started: <YYYY-MM-DD HH:MM UTC> ║
╚══════════════════════════════════════════════╝After each step, emit:
[N/TOTAL] <QUERY|MUTATION> <OperationName>
→ Params: <brief summary of key inputs>
→ Result: <count or outcome>On completion, emit:
For format: human (default):
══════════════════════════════════════════════
PAGE CONTENT AUDIT
Pages scanned: <n> | Issues: <n>
Articles scanned: <n> | Issues: <n>
Issues:
Page: "<title>" — empty body
Article: "<title>" — missing SEO description
Output: content_audit_<date>.csv
══════════════════════════════════════════════For format: json, emit:
{
"skill": "page-content-audit",
"store": "<domain>",
"pages_scanned": 0,
"articles_scanned": 0,
"issues_found": 0,
"output_file": "content_audit_<date>.csv"
}Output Format
CSV file content_audit_<YYYY-MM-DD>.csv with columns: type, id, title, handle, published_at, body_length, has_seo_title, has_seo_description, issue
Error Handling
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| No pages or articles | Minimal store | Exit with 0 results |
Best Practices
- A page with fewer than 300 words is generally considered "thin content" by search engines — use
min_body_length: 1500(characters ≈ ~250 words) as a starting threshold. - The About, FAQ, and Contact pages are high-trust pages that should never be empty — prioritize these.
- Run after any CMS migration or theme change that may have wiped page content.
- Pair with
seo-metadata-auditfor a complete SEO audit covering products, collections, pages, and blog articles in one workflow.
Related skills
FAQ
Does it cover products?
No, it covers pages and blog articles; pair it with seo-metadata-audit for products and collections.
What counts as thin content?
A page with fewer than 300 words is generally considered thin content; the default min_body_length flag is 100 characters and can be raised.