Shopify Product Page SEO: Beyond the Title Tag
Product pages rarely fail because of their title tags. They fail because the data is thin, the specifications are in an image, and nothing links to them.

On this page
Key takeaways
- Product data completeness matters more than keyword placement, and it now feeds classic search, shopping surfaces and AI agents at once.
- Specifications published as images are invisible to every machine reading your catalogue, and this is extremely common.
- Variant pages are a duplication risk — decide deliberately which variants deserve indexable URLs.
- Products are usually over-linked internally while collections are under-linked, which is backwards for category queries.
Product page SEO advice tends to be about title tags and keyword placement. Those matter and they are rarely the reason a product page underperforms.
The common causes are duller: fields left empty, specifications published as graphics, manufacturer copy identical to forty other retailers, and a page that nothing internally links to. All four are fixable, and none of them require writing better headlines.
One piece of work, three channels
Everything below improves classic Google ranking, your shopping feed, and the AI surfaces Shopify now syndicates eligible products to. That is the strongest argument for doing it — the same effort pays three times.
Completeness beats cleverness
The fields on a Shopify product are not just admin metadata. They are what machines use to understand and categorise what you sell.
A product with an empty product type, unlabelled variant options and a description of brand voice is not ranked poorly so much as poorly understood. Systems cannot categorise it, cannot match it to specific queries, and cannot answer comparison questions about it.
Fields that need to be right, across the catalogue
- Title stating the thing literally — what a person would type
- Product type, populated and consistent across similar products
- Vendor, populated
- Variant options describing real attributes, not internal codes
- Description containing material, dimensions, compatibility and use case
- Alt text describing the product rather than the marketing concept
Consistency across the catalogue matters as much as correctness within one product. A product type of "Boots" on some items and "Footwear - Boots" on others fragments your own categorisation for no benefit.
Specifications in images are invisible
The single most common and most costly technical error in product catalogues.
A great many stores publish dimensions, materials, compatibility and care instructions as a designed graphic. It looks good. To a shopper it is perfectly usable. To every machine reading the page, that information does not exist.
The consequence is that the product cannot match any query mentioning those attributes, cannot answer a comparison question, and is invisible to the AI shopping surfaces Shopify now syndicates to automatically.
Keep the graphic if it serves shoppers, and add the same information as text as well. This is not a design compromise — the two can coexist, and the text version can sit in a specifications table below the image.
Manufacturer copy is a losing position
If you resell products, your descriptions are probably the manufacturer's, and so are those of every other retailer carrying the item.
This is rarely penalised. It is simply that nothing distinguishes your page, so there is no reason for a search engine to prefer it over any of the others.
What creates a reason:
Your own photography, particularly showing scale and real use.
Your own specifics — the things you know from selling it that the manufacturer's copy does not say. Which size runs small. What it does not work with. Who it suits.
Genuine reviews, which are original content by definition and answer questions the description does not.
The questions your customers actually ask, answered on the page. Your support inbox is the best content brief available for a product page, and almost nobody uses it.
You do not need to rewrite eight hundred descriptions. Add original detail to the products that matter commercially, and let the long tail carry manufacturer copy.
Identifying which products matter is easier than it sounds. Sort by revenue, then by search impressions in Search Console, and look at where the two lists overlap and where they diverge. Products with impressions but few clicks are usually a title or description problem you can fix cheaply. Products with revenue but no impressions are ranking for nothing and being found some other way, which means original content there has the most headroom.
Variants and the duplication question
Shopify variants raise a decision most merchants make by default rather than deliberately.
Variants that represent genuinely different search intent can justify indexable URLs — different capacities, different formats, meaningfully different products sold under one listing. Someone searching for the 512GB model has a specific intent that a generic product page serves poorly.
Variants that are colours or sizes of the same item generally should not each have an indexable page. They produce near-duplicates competing with each other, and none of them accumulates the signals that would let one rank.
The practical check is Search Console. If variant URLs are appearing in the duplicate or crawled-not-indexed buckets in volume, the platform has already decided they are not distinct, and you should stop generating them.
How to actually stop generating variant URLs
Deciding that colour and size variants should not each have an indexable page is the easy part. Implementing that decision on Shopify takes a bit more than flipping a setting, because the platform does not offer a single switch for it.
The most reliable route is the canonical tag your theme renders in the page head. When a shopper lands on a variant URL, such as a product page with a query string identifying a specific colour, the canonical tag should point to the base product URL without that parameter. Most modern Shopify themes do this by default, so the first step is checking rather than building: view source on a few variant URLs and confirm the canonical link element points to the clean product URL, not to itself.
Where a theme is not doing this correctly, or where a custom template has broken it, the fix usually lives in the product template's head section, and it is a small, contained change rather than a structural one. This is worth confirming directly with whoever maintains your theme rather than assuming, since a broken canonical tag on variant URLs is exactly the kind of quiet issue that produces the duplicate-content signals mentioned above without ever throwing an obvious error.
Beyond the canonical tag, check whether your theme or any installed app is generating separate crawlable links to each variant, for instance a colour swatch that changes the page URL and creates a new, distinct link a crawler can follow independently, rather than updating the page in place with JavaScript. If variant swatches behave this way, a crawler can discover and attempt to index each combination as if it were a separate page, working against the canonical tag rather than with it.
The Search Console check described above should be repeated after making any of these changes, not just once at the start. Canonical and indexation signals take time to be reprocessed, so treat this as a fix you verify weeks later rather than one you confirm the same day, and note the date you made the change so you know how long to wait before concluding it did or did not work.
Nothing links to your product pages
Internal linking on Shopify stores is consistently lopsided, and usually in a way that hurts.
Products are reachable from collections and search. Collections are reachable from navigation. Editorial content, where it exists, tends to link to individual products.
That last habit is the problem. A blog post about choosing walking boots should link to the walking boots collection, because the collection is the page that should win the category query. Linking to one product instead spends the link on a page that was never going to rank for the category and deprives the page that could.
Where internal links should point
| Content | Should link to | Common mistake |
|---|---|---|
| Category or buying guide | The collection | One specific product |
| Product comparison | Both products, and the collection | Only the winner |
| How-to content | The collection, plus one relevant product | Nothing at all |
| Product page | Its collection, via breadcrumbs | No breadcrumb |
| Collection | Adjacent collections | Nothing |
Breadcrumbs deserve specific attention. They are the most reliable product-to-collection link on a store, and many themes either omit them or render them without markup. Adding them is usually a small template change, it benefits shoppers who want to browse sideways, and it emits BreadcrumbList structured data that clarifies your site hierarchy at the same time.
Schema, and where it should come from
Product schema — price, availability, condition, reviews where genuine — should be rendered server-side in the page source, so a crawler sees it without executing JavaScript.
Two things to check before adding anything:
What your theme already emits. View source on a product page and look. Modern themes frequently emit product schema, and installing an app to add it produces two conflicting copies.
Whether it matches the visible page. Schema stating a price the page does not show is worse than no schema, because it undermines trust in everything else you mark up.
Out-of-stock and discontinued products
What you do with products that are no longer available is a genuine SEO decision, and the default — deleting them — is usually the worst option.
A product page that has been live for two years has accumulated links, search history and sometimes rankings. Deleting it discards all of that and produces a 404 for everyone who arrives from an old link, an old email or a bookmark.
The better options, in order of how permanent the absence is:
Temporarily out of stock: keep the page live. Show that it is unavailable, offer a notify option, and suggest alternatives. The page keeps its rankings and is ready when stock returns. Removing and recreating it later starts from zero.
Permanently discontinued, direct replacement exists: redirect to the replacement. The link equity transfers and the customer lands somewhere useful.
Permanently discontinued, no replacement: redirect to the collection. Less ideal than a direct replacement but far better than a 404, and the shopper arrives among relevant alternatives.
Seasonal products: keep the page year-round. A page that vanishes each spring and reappears each autumn never accumulates anything. Keep it, mark it unavailable, and let it build history across seasons.
Availability schema must match reality
Whatever you do, the structured data has to agree with the page. An out-of-stock product still declaring availability in its schema is exactly the kind of mismatch that erodes trust in all your markup — and on shopping surfaces it produces a listing that sends buyers to something they cannot purchase.
The order to work in
- Audit field completeness across the catalogue. This is a bulk problem, so treat it as one.
- Move specifications out of images into text.
- Decide the variant indexation question and stop generating what you do not want.
- Add original detail to commercially important products only.
- Fix internal linking, particularly breadcrumbs and editorial link targets.
- Verify schema is present once, server-side, and accurate.
Steps one to three are mechanical and finite — they have an end state, and once reached they stay reached. Steps four and five are ongoing, but only across the products that matter commercially, which is what keeps the work sustainable rather than endless.
For the structural work at collection level, see SEO and AI search. Product data for AI surfaces is covered in the same archive, and page design in storefront and design.
Frequently asked questions
- Should every product variant have its own URL?
- Usually not. Variants that represent genuinely different search intent — a different capacity, a different format — can justify their own indexable page.
- How long should a Shopify product description be?
- Long enough to state the facts a buyer needs and no longer. Length is not the metric; completeness and structure are.
- Does duplicate manufacturer copy hurt product pages?
- It makes ranking harder, because your page is then one of many carrying identical text and nothing distinguishes it.
- Where should product schema come from?
- Ideally your theme, rendered server-side in the page source so a crawler sees it without executing JavaScript.
- What is the highest-impact product page SEO fix?
- For most catalogues, moving specifications out of images and into text, and filling the empty structured fields.



Comments