shopify-seo-learn
Skill0 starsChanged 2 months agoMITView on GitHub
Learn the shop from its own catalogue and sales, then rank what to optimise by revenue. Use for: learn my store, what should I fix first, build my profile automatically, which products matter, what do my sales tell me about my copy.
In this repository7 other files it gives its agents.
- shopify-seo-brandSkill
- shopify-seo-checkSkill
- shopify-seo-fixSkill
- shopify-seo-geoSkill
- shopify-seo-publishSkill
- shopify-seo-schemaSkill
- shopify-seoSkill
The file
We split this skill into the rules it gives an agent
5 rules. About 0 are common, 4 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈4
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 8
Read the shop instead of asking about it.
- Very specific: line 26
If a profile already exists, merge.
- Distinctive: line 64
If the shop has a physical presence, separate them before ranking anything, or you will send the owner to optimise a page for a product …
- Distinctive: line 89
Write the queue highest revenue first.
- Distinctive: line 103
Do not write a signal you cannot attach a figure to.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Learn
Read the shop instead of asking about it. Two sources, both already available through the Shopify MCP: what is in the catalogue, and what actually sold. Together they answer a question a checklist cannot, which is which page is worth touching first.
This skill writes facts. It does not rewrite copy. Run shopify-seo-fix afterwards.
What it produces
Everything lands in the owner's own directory, never in this repo:
<their profile dir>/
catalogue.json every live product, its real facts
revenue.json 180 days of sales, ranked
queue.md what to fix, in order, with the reason
signals.md what the sales imply about the copyIf a profile already exists, merge. Never overwrite a human-written field with a derived one.
Mark every derived field with source: "derived" and the date, so a later reader can tell what
came from a machine and what came from the owner.
Step 1, the catalogue
Pull every product: title, handle, type, vendor, tags, options, size range, price range, inventory state, and the first image. Record what you find, not what you expect.
Extract and write down the shop's own vocabulary, because this is what stops later skills inventing words the brand does not use:
- Product family names, the words that repeat across titles
- Materials and fabrics as they are actually spelled
- Colour names, which are often proprietary and must never be paraphrased
- The real size range, stated separately for each category where they differ
- Price bands per product type
Position 1 is the model shot. On most fashion stores the first image is the garment on a person and later images are fabric or detail. Take alt text and any visual claim from position 1.
Step 2, the sales
FROM sales SHOW gross_sales, orders GROUP BY product_title SINCE -180dThen read the result carefully, because three rows will mislead you.
A blank product title is not a product. It is custom or bespoke line items, usually written by hand at a counter. On a store with a showroom this row can be the largest by revenue. Record it as a channel fact, never as a product to optimise.
A service is not a product either. Rows like "Express Service", "Gift Wrap" or "Alterations"
are signals about what customers worry about. An express service selling in volume is customers
telling you the lead time matters. That belongs in signals.md and almost certainly belongs in
the product copy, but the service page itself is rarely the page to optimise.
Point of sale and online are mixed together. FROM sales includes counter and draft orders.
If the shop has a physical presence, separate them before ranking anything, or you will send the
owner to optimise a page for a product that actually sells in person:
source_name:pos counter sales
source_name:shopify_draft_order invoices and bespokeQuery orders through GraphQL with those filters and subtract. State the split plainly in
revenue.json. If you cannot separate them, say the number is mixed rather than presenting it
as online demand.
Step 3, the queue
Rank real products by online revenue, then check each one's copy against what you learned:
| Check | Why it ranks |
| Description under 300 characters | Nothing for search or an AI to quote |
| No lead time stated | The single most common cause of an abandoned basket at this price |
| No fabric or care detail | Cannot answer the question a buyer will ask |
| Meta title missing or duplicated | Free position, thrown away |
| Alt text missing on image 1 | Free relevance, thrown away |
| No schema | Invisible to AI answers |
Write the queue highest revenue first. Fixing the description of a product that sold four times beats fixing one that sold once, and revenue is the only honest tiebreak.
Step 4, the signals
This is the part worth the owner's attention. Write plain sentences, each tied to a number:
- A high-selling express or rush option means lead time is a live worry. Say so, and name the pages that do not mention it.
- One colour outselling its siblings several times over is a merchandising fact, and the copy on the others may be doing nothing for them.
- A product type with many orders and thin descriptions is the largest single opportunity.
- A best seller with no schema is losing AI answers it would otherwise win.
Do not write a signal you cannot attach a figure to.
Honest limits
Say these out loud rather than letting the owner assume otherwise.
- This learns what sold, which is not what people searched for. Keywords come from Search Console, and there is no connector for it, so that needs a CSV export. Until then, do not present catalogue words as keyword research.
- Revenue attributes to the product, not to the copy. A best seller may sell despite its description. Treat the ranking as where to look, never as proof the copy works.
- Six months of sales on a small store is a small sample. Say so where a ranking rests on three or four orders.
- Prices and stock go stale. Stamp the date on everything and re-run before publishing.
Re-running
Monthly is enough for most shops, or after a collection launch. On a re-run, diff against the previous file and report what moved, since a product climbing the ranking is itself a signal.
Confidentiality
The profile is the owner's commercial data: prices, margins, what sells and what does not. It stays in their directory. It never goes in this repository, an issue, a commit or an example. Examples shipped with this plugin are fictional and must stay fictional.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

