Magento · Category paths, canonical link meta tags, product visibility and URL rewrites
In Magento, a product URL is not one thing. Depending on configuration, the same product can answer at its short URL, at one URL per category it belongs to, as a child of a configurable product, and once per store view.
Duplicates are not a penalty on their own. The risk is that signals split across addresses, crawlers waste time on copies, and the wrong URL ends up indexed. The fix is one indexable URL per product, with everything else pointing at it.
Where product duplicates come from
| Source | Example | What usually breaks |
|---|---|---|
| Category path URLs | /women/tops/linen-shirt.html and /sale/linen-shirt.html | One product, one URL per category, plus the short URL |
| Product canonical turned off | Every path URL self canonical | All variants compete as separate indexable pages |
| Configurable children | Each size and color as its own visible simple product | Near duplicate pages with the same description and images |
| URL key clashes | linen-shirt-1.html | Imports or duplicated products create numbered copies |
| Store views | /en/ and /default/ with identical content | Same language duplicated across store codes or domains |
| Raw catalog routes | /catalog/product/view/id/123 | Internal route reachable through old links or extensions |
Catalog SEO settings that decide product URLs
These live under the catalog Search Engine Optimization settings and can differ per store view. Check each scope.
What to check
| Check | Healthy result |
|---|---|
| Product canonical | Present on every product URL, pointing at one chosen URL |
| Category path URLs | Canonical to the chosen URL, or not generated at all |
| Duplicate titles across products | Only on true variants that are not visible individually |
| Numbered URL keys | None, or each one intentional |
| Canonical tags per page | Exactly one, no second tag from an extension |
| Internal links | Point at the canonical product URL, not a path variant |
| Sitemap | Lists only canonical product URLs |
How to run the checks
- Crawl the storefront including category listings, so every path variant is discovered the way a bot finds it.
- Group URLs by product. Sort by title or SKU in schema and count URLs per product.
- Check canonical targets on every variant. Use Custom Source Search to find pages with two canonical tags.
- Check where internal links point. Category listings often link to the path URL while the canonical points elsewhere.
- Review product visibility for configurable children and grouped products in the admin.
- Save the crawl as the baseline before changing configuration.
How to identify the scope
How to apply the fix
Path variant /women/tops/linen-shirt.html canonical to /linen-shirt.html
Child product linen-shirt-blue-m Not Visible Individually
Old URL key /linen-top.html 301 to /linen-shirt.html
- Turn on product and category canonical link meta tags in every store view scope.
- Choose whether to use category paths. Turning them off makes listings link straight to the short URL, which removes duplicates at the source. Turning them on keeps breadcrumbs in URLs but relies on canonicals.
- Change the setting with redirects in place. Changing category path or suffix settings changes live URLs, so confirm URL rewrites and 301s exist for the old addresses before deploying.
- Hide child products of configurables by setting them to Not Visible Individually, unless each variant has truly unique content and demand.
- Clean up URL keys with numeric suffixes, redirecting the old key to the clean one.
- Remove duplicate canonical output by letting only one module, core or an extension, own the tag.
How to validate the fix
- Reindex, flush caches, and recrawl with the same scope.
- Count indexable URLs per product: the target is one.
- Test old URLs for a single 301 to the chosen URL.
- Compare in Audit Comparison and check the sitemap after the next generation run.
- Watch Search Console for duplicate and alternate page reports shrinking over the following weeks.
Downloadable checklist
0 of 14 done
Common mistakes
- Switching category paths off without checking redirects. Every indexed path URL changes in one deployment.
- Changing the URL suffix on a live store. Removing .html moves every product and category URL at once.
- Trusting canonicals while linking to variants. Internal links are a strong signal. Link to the URL you want indexed.
- Making every configurable child visible for search. Dozens of near identical pages compete with the parent.
- Running two SEO extensions. Conflicting canonical tags confuse search engines more than none.
- Ignoring store view scope. A setting fixed at default level can be overridden in one store view.
Related resources
One product, one URL
Magento will happily serve a product at many addresses. Decide which one counts, point canonicals and internal links at it, hide variants that add nothing, and redirect every URL you retire. Then confirm with a crawl that each product has exactly one indexable URL.