From shopify-admin-skills
Edits Shopify theme's robots.txt.liquid to allow AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.) so AI assistants can read your store catalog.
How this skill is triggered — by the user, by Claude, or both
Slash command
/shopify-admin-skills:shopify-admin-agentic-crawler-accessThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
If your `robots.txt` doesn't address the AI crawlers by name — or worse, disallows them — assistants like ChatGPT, Claude, and Perplexity may never read your store, so you simply don't exist to AI shoppers. Shopify generates `robots.txt` from a theme template (`templates/robots.txt.liquid`); this skill reads that template and appends explicit allow rules for the major AI user-agents (with a cle...
If your robots.txt doesn't address the AI crawlers by name — or worse, disallows them — assistants like ChatGPT, Claude, and Perplexity may never read your store, so you simply don't exist to AI shoppers. Shopify generates robots.txt from a theme template (templates/robots.txt.liquid); this skill reads that template and appends explicit allow rules for the major AI user-agents (with a clear, idempotent managed block) so foundational models and AI search are permitted to crawl your pages. Fixes the agentiq.report finding robots-ai-rules.
shopify auth login --store <domain>)read_themes, write_themesAll skills accept these universal parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| store | string | yes | — | Store domain (e.g., mystore.myshopify.com) |
| format | string | no | human | Output format: human (default) or json |
| dry_run | bool | no | true | Preview the new robots.txt.liquid without writing (defaults ON — this edits the live theme) |
Skill-specific parameters:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| theme_id | string | no | — | Theme GID to edit (defaults to the published MAIN theme) |
| agents | string | no | GPTBot,OAI-SearchBot,ChatGPT-User,ClaudeBot,Claude-Web,PerplexityBot,Perplexity-User,Google-Extended,Amazonbot,Applebot-Extended | Comma list of AI user-agents to allow |
| mode | string | no | allow | allow (add Allow rules) or audit (report current state only, no write) |
⚠️ Step 2 (
themeFilesUpsert) modifies a file in the LIVE published theme. A malformedrobots.txt.liquidcan de-index the store from ALL search engines. This skill writes only inside a clearly-delimited# BEGIN agentic-crawler-access … # ENDmanaged block (re-running replaces just that block, never your other rules), defaultsdry_run: true, and recommends duplicating the theme first. Review the full proposed file before settingdry_run: false.
OPERATION: themes — query
Inputs: roles: [MAIN] (unless theme_id given), then theme.files(filenames: ["templates/robots.txt.liquid"])
Expected output: Current robots.txt.liquid content (or absence — Shopify uses a default if the template doesn't exist).
COMPUTE (no API): construct the new template. If no custom template exists, start from the Shopify default ({{ robots.default_groups }}) and append the managed block with User-agent:/Allow: / stanzas for each agent in agents. If a managed block already exists, replace only it. Emit the full proposed file diff.
OPERATION: themeFilesUpsert — mutation
Inputs: themeId, files: [{ filename: "templates/robots.txt.liquid", body: { type: TEXT, value: <new content> } }] (skipped when dry_run or mode: audit).
Expected output: Upserted theme file; collect userErrors.
# themes:query — validated against api_version 2025-01
query CrawlerThemeFile {
themes(first: 1, roles: [MAIN]) {
nodes {
id
name
files(filenames: ["templates/robots.txt.liquid"]) {
nodes {
filename
body { ... on OnlineStoreThemeFileBodyText { content } }
}
}
}
}
}
# themeFilesUpsert:mutation — validated against api_version 2025-01
mutation CrawlerAllowUpsert($themeId: ID!, $files: [OnlineStoreThemeFilesUpsertFileInput!]!) {
themeFilesUpsert(themeId: $themeId, files: $files) {
upsertedThemeFiles { filename }
userErrors { filename code message }
}
}
Managed block written into templates/robots.txt.liquid (after {{ robots.default_groups }}):
# BEGIN agentic-crawler-access (managed by shopify-admin-agentic-crawler-access)
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /
User-agent: Google-Extended
Allow: /
# ... one stanza per agent in `agents`
# END agentic-crawler-access
Claude MUST emit the following output at each stage. This is mandatory.
On start, emit:
╔══════════════════════════════════════════════╗
║ SKILL: <skill name> ║
║ 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>
If dry_run: true, prefix every mutation step with [DRY RUN] and do not execute it.
On completion, emit:
For format: human (default):
══════════════════════════════════════════════
OUTCOME SUMMARY
<Metric label>: <value>
Errors: 0
Output: <filename or "none">
══════════════════════════════════════════════
For format: json, emit:
{
"skill": "<skill-slug>",
"store": "<domain>",
"started_at": "<ISO8601>",
"completed_at": "<ISO8601>",
"dry_run": false,
"steps": [
{
"step": 1,
"operation": "<OperationName>",
"type": "query",
"params_summary": "<string>",
"result_summary": "<string>",
"skipped": false
}
],
"outcome": {
"metric_key": 0,
"errors": 0,
"output_file": null
}
}
human: the before/after robots.txt.liquid and the list of agents now allowed. json: { theme_id, agents_allowed:[...], wrote: true|false, errors }.
| Error | Cause | Recovery |
|---|---|---|
THROTTLED | API rate limit | Wait 2s, retry up to 3 times |
ACCESS_DENIED | Missing write_themes | Abort with a clear scope message; do not partially write |
userErrors on upsert | Invalid template body | Do not write; surface the Liquid error for review |
dry_run: true until you've read the entire proposed file — a broken robots.txt.liquid can de-index the whole store.shopify-admin-agentic-llms-txt so crawlers also get a guided summary.npx claudepluginhub 40rty-ai/shopify-admin-skills --plugin shopify-admin-skillsGenerates an /llms.txt guide from Shopify store data (brand summary, flagship products, policies, contact) and publishes it as a theme template for AI assistant discovery.
Analyzes AI crawler access for a website by checking robots.txt, meta tags, and HTTP headers. Maps which AI crawlers (GPTBot, ClaudeBot, PerplexityBot, etc.) are allowed or blocked and provides recommendations to maximize AI visibility.
References Shopify development: Liquid templating, OS 2.0 themes/sections/blocks, GraphQL Admin/Storefront APIs, CLI/Polaris apps, Functions, Hydrogen React storefronts, Ajax cart, webhooks, performance, debugging. API v2026-01.