Loading tutorials…
Loading tutorials…
Magento generates more duplicate-content URLs by default than any other major e-commerce platform. Pagination, layered nav, product attributes, store-view duplicates — every one is an SEO leak. Here's the essentials checklist that handles 90% of Magento SEO issues.
Who this is forMagento operators whose organic traffic is flat or declining. Or operators launching a new store who want SEO done right on day one — not retrofitted in month six after Google has indexed thousands of duplicate URLs.
What you'll need
Step 1
Stores → Configuration → Catalog → Catalog → Search Engine Optimization. 'Use Web Server Rewrites' = Yes. Product URL suffix usually empty. Categories include suffix.
Stores → Configuration → Catalog → Catalog → Search Engine Optimization. 'Use Web Server Rewrites' = Yes. This strips `/index.php/` from URLs — without it, every URL has /index.php/ which is ugly and hurts CTR.
Product URL Suffix: usually leave EMPTY (recommended) or set to `.html` if migrating from a platform that used that pattern. Avoid `/` — trailing slashes on product pages cause inconsistent canonicalization.
Category URL Suffix: usually leave EMPTY. Some legacy installs use `.html` — fine to keep if existing URLs are indexed.
Save. Run `bin/magento cache:flush` and `bin/magento indexer:reindex url_rewrite`. The full URL rewrite reindex on a 10K SKU catalog takes 5-30 minutes.
Verify a product URL is now `/yourdomain.com/product-name` (or `/product-name.html`), NOT `/yourdomain.com/index.php/catalog/product/view/id/123/`.
Step 2
Stores → Configuration → Catalog → Catalog → SEO. Set 'Use Canonical Link Meta Tag for Products' = Yes AND for Categories = Yes. Both default to No.
Stores → Configuration → Catalog → Catalog → Search Engine Optimization. 'Use Canonical Link Meta Tag for Categories' = Yes. 'Use Canonical Link Meta Tag for Products' = Yes. Both default to No — this is a major SEO leak.
After enabling, every product page outputs `<link rel="canonical" href="/product-name" />` pointing to itself. Every category outputs the same.
This handles the simple case (product accessible via /category/product AND /product) — canonical points to the cleaner URL.
But layered nav and pagination need additional handling — see Step 4.
After save, run `bin/magento cache:flush`. Verify with view-source on a product page: confirm `<link rel='canonical'` is present and points to the canonical URL (not the current URL with query strings).
Step 3
Default Magento meta is "{name} - {store name}" — generic and CTR-hostile. Custom meta titles + descriptions per product and category lift CTR 15-40% and rankings 5-15 positions.
Catalog → Products → [Product] → Search Engine Optimization tab. Fields: URL Key, Meta Title, Meta Keywords, Meta Description.
URL Key: lowercase, hyphens, keyword-rich, under 60 chars. Examples: "organic-cotton-tshirt-mens-navy" (good) vs "product-1234" (bad) vs "really-amazingly-soft-tshirt-100-organic-fair-trade-cotton" (too long).
Meta Title: 50-60 chars, includes primary keyword + brand. Example: "Organic Cotton T-Shirt — Mens Navy | YourBrand". Default of "Product Name | Store Name" works for some but custom titles always outperform.
Meta Description: 140-160 chars, includes primary keyword + value prop + CTA. Default Magento leaves this blank — Google generates one from the page content, usually badly. Custom descriptions lift CTR 15-40%.
Meta Keywords: Google ignores. Leave blank or fill in 3-5 for internal taxonomy. Don't optimize.
Categories: Catalog → Categories → [Category] → Search Engine Optimization. Same four fields. Often more impactful than product meta because categories rank for higher-volume head terms.
Bulk-edit via CSV: System → Data Transfer → Export Products → edit meta fields in spreadsheet → Import in 'Add/Update' mode. Saves 10x time for catalogs over 200 products.
Step 4
Magento generates URLs like /category?color=red&size=m&p=2&product_list_order=price. Each is a unique URL Google can index. Use robots meta or rel=canonical to consolidate.
There are three sources of duplicate-content URLs in Magento: (1) layered nav filters (?color=red), (2) pagination (?p=2), (3) sort order (?product_list_order=price).
Default fix: enable canonical on categories (Step 2). With canonical on, /category?color=red has `<link rel='canonical' href='/category'>` — Google consolidates the signal.
Better fix: use Magento's built-in handling via Stores → Configuration → Catalog → Catalog → Use Flat Catalog + URL rewrites + the `magefan/module-rich-snippets-and-seo` extension (free, $0). This adds proper meta robots="noindex,follow" to filtered URLs.
For pagination: by default Magento 2.4.7 includes `rel='next'` and `rel='prev'` — which Google has deprecated. Modern best practice: canonical to page 1 (default behavior with canonical on) and let Google handle pagination via crawl signals.
For session ID URLs (`?___SID=U`): these should not exist in modern Magento, but legacy stores sometimes have them. Block in robots.txt: `Disallow: /*?___SID=*`. Also disable in Stores → Configuration → Web → Session Validation if enabled.
Step 5
Marketing → SEO & Search → Site Map → Add Sitemap. Configure update frequency, priority per content type, and submission to Search Console.
Marketing → SEO & Search → Site Map → Add Sitemap. Filename = `sitemap.xml`. Path = `/`. Save.
Stores → Configuration → Catalog → XML Sitemap. Set Frequency: Categories = weekly, Products = weekly, CMS Pages = monthly. Priority: Categories = 0.7, Products = 0.5, CMS Pages = 0.3. Submission to Robots.txt = Yes.
'Enable Submission to Robots.txt' adds a Sitemap: line to your robots.txt so search engines discover the sitemap automatically.
After saving the sitemap config, click "Generate" on the sitemap entry. This creates `/sitemap.xml` (or `/sitemap_1.xml` for the first sitemap of a store).
For large catalogs (10K+ products), Magento splits sitemaps into multiple files automatically (Google limits per-file to 50K URLs). The sitemap index file at /sitemap.xml references all sub-files.
Submit to Google Search Console: Search Console → your property → Sitemaps → Add a new sitemap → enter `sitemap.xml`. Wait 24-48 hours and confirm submitted = N URLs, indexed = M URLs.
Schedule regeneration via cron: Stores → Configuration → Catalog → XML Sitemap → Generation Settings → enable Daily generation. Without cron-driven regen, the sitemap goes stale within a week.
Step 6
Out-of-box Magento 2.4 emits some JSON-LD for products, but it is incomplete (missing aggregateRating, brand, sku in some cases). Validate and supplement.
On any product page, view source and search for `application/ld+json`. Confirm Product schema is present with: @type=Product, name, image, description, sku, brand, offers (with price, priceCurrency, availability, url).
If aggregateRating is missing AND you have product reviews enabled (Stores → Configuration → Catalog → Catalog → Product Reviews), install or build a small module to add it. Without aggregateRating, your products get star ratings in SERP only sporadically.
BreadcrumbList schema: Magento 2.4.6+ ships this on category pages but NOT product pages by default. Add via a custom layout XML block injecting JSON-LD on product view pages.
Test in Google Rich Results Test (search.google.com/test/rich-results): paste a product URL. Confirm Product detected, no errors. Common errors: missing image, malformed offers.price (string instead of number), missing url field.
For category pages: add BreadcrumbList and ItemList schema. ItemList lifts category-page rich results in some markets.
If you sell on Google Shopping, the Product schema must match your Merchant Center feed exactly — mismatched GTIN, brand, or availability between schema and feed causes Merchant Center disapprovals.
Step 7
Marketing → SEO & Search → URL Rewrites. Magento accumulates orphan rewrites from deleted products, renamed categories, and old imports. Clean periodically.
Marketing → SEO & Search → URL Rewrites. This is the table of every URL alias in your store: products, categories, custom pages.
Filter by Type = Product. Sort by Request Path. Look for duplicates: multiple SKUs pointing to similar URLs, or multiple URL aliases for the same product (e.g., /tshirt, /tshirt-v2, /tshirt-redirect).
Each duplicate is a 301 redirect Magento creates when you rename a URL key or move a product between categories. Most are fine. Some are loops (URL A → URL B → URL A) which break crawling.
Bulk-delete obviously dead rewrites (products no longer in catalog, categories deleted years ago) via SQL: be careful, test first. There is no admin bulk-delete for URL rewrites in stock Magento.
For huge catalogs (50K+ URLs), use the free `magefan/module-fast-url-rewrites` to speed up the URL rewrite table or `mirasvit/seo` for an admin UI to manage redirects properly.
Run Screaming Frog on the storefront → check for 301 chains (A → B → C) and infinite loops. Fix the worst offenders manually.
Common mistakes
Canonical tags disabled (the Magento default)
What goes wrong: Out-of-box, Magento 2.4 does NOT emit canonical tags on product or category pages. Google indexes /category/product AND /product as separate URLs. Ranking signal splits. Authority dilutes across duplicates.
How to avoid: Stores → Configuration → Catalog → Catalog → SEO → enable canonical for Products AND Categories. Cache flush. Verify in view-source.
Default meta titles ("{name} - {store name}")
What goes wrong: Generic, low-CTR meta titles. Your category page "Womens Dresses - YourBrand" competes against rivals with handcrafted titles like "Womens Dresses — Free Shipping + 30-Day Returns | YourBrand." You rank position 4 instead of position 2.
How to avoid: Bulk-edit meta titles via CSV export/import. Aim for 50-60 chars, primary keyword first, brand last, unique value proposition embedded where possible.
Sitemap never regenerated after launch
What goes wrong: Sitemap submitted to Search Console reflects launch-day catalog. New products published in month 2-3 take weeks to discover. Old products that were deleted still appear in sitemap and 404 — Google trust drops.
How to avoid: Schedule daily sitemap regeneration via cron (Stores → Configuration → Catalog → XML Sitemap → Generation Settings). Verify the file timestamp updates daily.
Layered navigation URLs indexed
What goes wrong: Google indexes /category?color=red and /category?color=blue and /category?color=red&size=m as separate URLs. For a category with 5 colors and 5 sizes, that's 25+ duplicate pages indexed per category. On a 50-category catalog, that's 1,250+ duplicates.
How to avoid: Enable canonical on categories. For aggressive cleanup, install `mirasvit/seo` or `magefan/module-rich-snippets` to add noindex,follow meta on filter URLs.
Wrong URL suffix change mid-life
What goes wrong: You change product URL suffix from `.html` to empty (or vice versa) on a live store. Every indexed URL 301-redirects. Google must re-evaluate every page. Organic traffic drops 30-50% for 30-60 days.
How to avoid: If you must change, do it once, redirect old URLs to new with 301, and accept the 30-60 day drop. Or — better — pick a suffix at launch and never change it.
No structured data on product pages
What goes wrong: Products do not get rich results (star ratings, price, availability) in SERP. Click-through rate is 15-30% lower than competitors with rich snippets. Especially harmful in price-comparison searches.
How to avoid: Verify JSON-LD Product schema with Rich Results Test. Add missing fields (aggregateRating, brand). Add BreadcrumbList schema. For category pages, add ItemList schema.
Robots.txt blocking layered nav (the WRONG fix)
What goes wrong: Blocking /catalog?* in robots.txt prevents Google from crawling those URLs. The URLs already in the index stay there as 'indexed but not crawled.' Canonical tags Google never reads. Net result: SEO worse than doing nothing.
How to avoid: Remove the robots.txt block. Use canonical tags + noindex meta on filter URLs instead. Both signals require Google to crawl the page to read them — never block via robots.txt.
Recap
Done — what's next
How to set up a Magento product catalog correctly
Read the next tutorial
Hand it off
Magento SEO has more sharp edges than any other major e-commerce platform — and the defaults are mostly wrong for SEO. The essentials checklist above handles 90% of issues, but every store has unique edge cases (legacy URLs, multi-store, custom modules). A vetted Magento SEO specialist can audit + fix in 1-3 weeks at $14-16/hr — typically $800-2,000 total. The organic-traffic recovery usually shows within 60-90 days.
See specialist rates
Stock Magento covers the basics. Paid extensions (Mirasvit SEO, Magefan SEO suite, $99-299) add: layered-nav noindex automation, hreflang for multi-store, advanced sitemap controls, and admin UI for redirects. Worth it for stores past 1,000 SKUs or multi-language.
Technical fixes (canonical, sitemap, structured data): 2-6 weeks for Google to re-crawl and apply. Content + meta changes: 4-12 weeks. Full SEO recovery from a botched launch (wrong suffix, missing canonicals): 6-12 months. Patience is the price.
Stock Magento 2.4 does NOT emit hreflang tags automatically — even on multi-store-view setups with translated content. You need a paid extension (Mirasvit, Mageworx) or custom code. Without hreflang, Google can't tell your French site from your English site for the same product.
Export all M1 URLs from URL Rewrites. Map each old URL to its new M2 URL (most map cleanly if you keep the same URL keys). Import into M2 as 301 redirects via URL Rewrites or a redirect-management extension. Validate with Screaming Frog. Plan 30-90 day traffic dip — it always happens, even with perfect redirects.
Most likely Stores → Configuration → Web → Default Pages → 'CMS Home Page' is set to a CMS page (e.g., 'home'). The homepage URL resolves to /home or /cms/page/view/page_id/1. Canonical reflects this. Fix: set up a URL rewrite from / to your home CMS page, or canonicalize all variations to the root URL via a custom plugin.
Same as any platform. Google's algorithm has been good at ignoring spammy links since 2022. Disavow only obvious negative-SEO attacks (sudden spike in low-quality links from PBNs). Don't proactively disavow normal-looking links from low-DA sites.
Adobe Commerce
The Magento catalog is the most powerful — and most easily mismanaged — part of the platform. Most stores ship with attributes used once, sets that nobody understands, and categories indexed into oblivion. Here's the catalog architecture that scales past 10,000 SKUs without grinding to a halt.
Shopify
Shopify ships with decent SEO defaults but several land mines. Wrong title template, duplicate collection URLs, missing structured data — these are the issues that cap your organic ceiling no matter how much you blog. Here's the foundation, done right.