From ecom
Backfills missing image alt text on Shopify stores for accessibility and SEO. Finds images without alt attributes across product media and the Files library, then writes alt text via a single fileUpdate mutation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ecom:shopify-alt-textThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Backfill missing image alt text across a Shopify store. Alt text is an
Backfill missing image alt text across a Shopify store. Alt text is an accessibility requirement first (screen readers announce it) and an image-SEO signal second. This skill fills the gap for images that have none; it does not rewrite alt text that already exists.
The sister backfill for SEO titles and descriptions is shopify-seo-metadata: same safe-mode doctrine, different fields. The FIND stage (measuring how many images lack alt across the catalog before you commit to a sweep) belongs to shopify-catalog-audit.
Images live in two places on a Shopify store, but both write through the same
mutation. A product image and a Files-library image are both MediaImage
nodes, which are File subtypes, so a single fileUpdate sets alt on either.
There is no separate product-media alt mutation to learn.
fileUpdate is the one write. It takes the image's MediaImage GID and
the new alt. This is the write path both source tools converge on. (Shopify's
old productUpdateMedia is deprecated on shopify.dev; do not use it for
alt text.)MediaImage under product.media.
Needs read_products.files connection (Content → Files: theme
sections, metaobjects, rich-text, collection banners). Needs read_files.MediaImage GIDs; feed those straight into fileUpdate.Full count/fetch/update/verify recipes for both find paths are in references/queries.md.
Every skill that touches the Admin API opens with this stanza. Two lanes; pick one.
Lane A, custom-app token (scriptable). In Shopify admin: Settings → Apps and sales channels → Develop apps → create an app → grant the minimum scopes below, then install and copy the Admin API access token. Export it; never write it to a committed file:
export SHOPIFY_STORE="your-store.myshopify.com"
export SHOPIFY_ACCESS_TOKEN="<your Admin API access token>" # keep it in the env, not on disk
Call the GraphQL endpoint (minimum scopes for this skill: read_products to
enumerate product-image owners, read_files to page the Files library, and
write_files because fileUpdate writes alt for both):
curl -s "https://$SHOPIFY_STORE/admin/api/2025-07/graphql.json" \
-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"{ shop { name } }"}'
Lane B, Shopify CLI OAuth (no stored token). shopify store auth --store $SHOPIFY_STORE --scopes read_products,read_files,write_files then shopify store execute to run a validated operation. Good for token-less stores where the owner
logs in interactively.
Toolkit preflight. Lane B rides on the Shopify CLI: run shopify version
first and install it if missing. For the full Admin GraphQL schema and
validated execution, pair this skill with Shopify's official AI toolkit
plugin. In Claude Code, check claude plugin list; if it isn't there:
claude plugin marketplace add Shopify/Shopify-AI-Toolkit
claude plugin install shopify-plugin@shopify-ai-toolkit
Recommended, not required: Lane A needs only curl and a token. The toolkit gives your agent the API; this skill gives it the playbook.
This is a recipe, not a program. The GraphQL blocks in the reference are copy-and-adapt starting points: write throwaway code per engagement against the current schema, run it, discard it. Do not ship a standing binary that silently rots when Shopify changes the schema.
State it standalone, run it every time. This is a bulk write against a live store; the difference between a clean sweep and a support ticket is discipline.
alt is null or empty after trimming whitespace. An image that
already has alt text, even mediocre alt text, is out of scope. Overwriting
existing alt is a separate, deliberate decision a human makes per-image, never
the default of a sweep.models.list /
auth-only check: a key that lists models can still fail on the actual
completion (billing, per-model access, org limits), and you find out 400
images into the sweep instead of before it.admin/api/.../graphql.json and confirm alt is populated. The storefront is
CDN-cached and shows stale (empty) alt for minutes; it is not evidence the
write landed. The reference has the readback query.Alt text describes the image for someone who cannot see it. It is not a place to stuff keywords or repeat the product's sales pitch.
alt=""), not a caption. If five images on a product
are near-identical angles, they do not each need a distinct paragraph;
differentiate only what a sighted user would notice ("front", "back",
"worn on model").If you generate captions from the image (vision model), still gate every write through the safe-mode rules above. Canonical guidance: the W3C WAI alt-text decision tree.
fileUpdate, with pagination and MIME filtering.Last verified: 2026-07-05. GraphQL pinned to Admin API 2025-07; Shopify
deprecates versions on a rolling quarterly schedule, so confirm fileUpdate
against shopify.dev before trusting
a version-specific claim. productUpdateMedia is deprecated; fileUpdate is the
current alt-text write for both product media and Files. Read-only
re-verification a stranger can run, listing product media and seeing which lack
alt while mutating nothing:
curl -s "https://$SHOPIFY_STORE/admin/api/2025-07/graphql.json" \
-H "X-Shopify-Access-Token: $SHOPIFY_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query":"{ products(first: 5) { edges { node { title media(first: 10) { edges { node { ... on MediaImage { id alt } } } } } } } }"}'
Canonical docs: fileUpdate and the WAI images tutorial. These skills capture operational lessons the docs don't; they are not a replacement for the reference.
npx claudepluginhub kgelster/awesome-ecom-skills --plugin ecomScans Shopify product images for missing or low-value alt text and generates descriptive alternatives from product title, options, type, and tags. Fixes the `listing-image-alt-text` agentiq.report finding and helps AI shopping agents understand product appearance.
Backfills missing SEO titles and meta descriptions across Shopify products, collections, pages, and blog articles without overwriting existing values.
Fixes Shopify store SEO, data quality, and theme issues via Admin GraphQL API. Supports product/collection content, image alt text, tags, schema markup, robots rules, and internal linking with rollback safety.