From shopify-admin-skills
Scans active Shopify products, collections, and pages via GraphQL for missing or short SEO titles and meta descriptions. Outputs prioritized list of gaps sorted by traffic potential. Read-only.
npx claudepluginhub 40rty-ai/shopify-admin-skills --plugin shopify-admin-skillsThis skill uses the workspace's default tool permissions.
Scans all active products, collections, and pages and flags records with missing or short SEO titles (`seo.title`) and meta descriptions (`seo.description`). Produces a prioritized list of SEO gaps sorted by traffic potential (products → collections → pages). Read-only — no mutations.
Audits Shopify pages and blog posts for empty or short content and missing SEO title/description fields using read-only GraphQL queries.
Audits Wix store product listings for missing descriptions, images, prices, SKUs, short descriptions; computes catalog health score using REST API curl queries and jq. Useful for quality and SEO improvements.
Create Shopify pages, blog posts, navigation, redirects, SEO metadata, and metaobjects via GraphQL/REST Admin API or browser automation.
Share bugs, ideas, or general feedback.
Scans all active products, collections, and pages and flags records with missing or short SEO titles (seo.title) and meta descriptions (seo.description). Produces a prioritized list of SEO gaps sorted by traffic potential (products → collections → pages). Read-only — no mutations.
shopify store auth --store <domain> --scopes read_products,read_contentread_products, read_content| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| min_title_length | integer | no | 10 | Flag SEO titles shorter than this (characters) |
| min_description_length | integer | no | 50 | Flag meta descriptions shorter than this (characters) |
| scope | string | no | all | What to scan: products, collections, pages, or all |
| format | string | no | human | Output format: human or json |
ℹ️ Read-only skill — no mutations are executed. Safe to run at any time.
OPERATION: products — query (if scope includes products)
Inputs: query: "status:active", first: 250, select seo { title, description }, pagination cursor
Expected output: All active products with SEO fields; paginate until hasNextPage: false
OPERATION: collections — query (if scope includes collections)
Inputs: first: 250, select seo { title, description }, pagination cursor
Expected output: All collections with SEO fields
OPERATION: pages — query (if scope includes pages)
Inputs: first: 250, select seo { title, description }, pagination cursor
Expected output: All pages with SEO fields
Flag records: missing title, missing description, title < min_title_length, description < min_description_length
# products:query — validated against api_version 2025-01
query ProductSEO($after: String) {
products(first: 250, after: $after, query: "status:active") {
edges {
node {
id
title
handle
seo {
title
description
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
# collections:query — validated against api_version 2025-01
query CollectionSEO($after: String) {
collections(first: 250, after: $after) {
edges {
node {
id
title
handle
seo {
title
description
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
# pages:query — validated against api_version 2025-04
query PageSEO($after: String) {
pages(first: 250, after: $after) {
edges {
node {
id
title
handle
seoTitle: metafield(namespace: "global", key: "title_tag") { value }
seoDescription: metafield(namespace: "global", key: "description_tag") { value }
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: SEO Metadata 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):
══════════════════════════════════════════════
SEO METADATA AUDIT
Products scanned: <n> | Missing SEO: <n>
Collections scanned: <n> | Missing SEO: <n>
Pages scanned: <n> | Missing SEO: <n>
Top gaps (products):
"<title>" — missing: description
"<title>" — title too short (<n> chars)
Output: seo_audit_<date>.csv
══════════════════════════════════════════════
For format: json, emit:
{
"skill": "seo-metadata-audit",
"store": "<domain>",
"summary": {
"products": { "scanned": 0, "missing_title": 0, "missing_description": 0, "short_title": 0, "short_description": 0 },
"collections": { "scanned": 0, "missing_title": 0, "missing_description": 0 },
"pages": { "scanned": 0, "missing_title": 0, "missing_description": 0 }
},
"output_file": "seo_audit_<date>.csv"
}
CSV file seo_audit_<YYYY-MM-DD>.csv with columns:
type, id, title, handle, seo_title, seo_description, issue
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit exceeded | Wait 2 seconds, retry up to 3 times |
| Empty store | No products/collections/pages | Exit with summary: 0 records |
min_title_length and min_description_length to match these targets.product-data-completeness-score for a comprehensive catalog quality view.