Magento SEO

How to do SEO on Magento (Adobe Commerce / Magento Open Source) — taming layered navigation and parameter duplication, URL rewrites, the missing JSON-LD problem, the Magento 1 vs 2 split, and the controls that actually move the needle on a Magento store.

First published: Jun 25, 2026 · Last updated: Jul 19, 2026 · Advanced
demand #2 in Ecommerce Platforms#12 in Platform SEO#110 in Technical SEO#146 on the site
1 evidence signal on this page

Magento SEO is mostly damage control on two duplicate-content generators: layered navigation and configurable/simple product variants, both of which need canonical + noindex handling. Get the version straight first — Magento 1 is end-of-life (June 2020); Magento 2 ships as paid Adobe Commerce, free Magento Open Source, or (since June 2025) the separate Adobe Commerce as a Cloud Service SaaS product, which drops the Luma theme entirely. Magento manages SEO-friendly URLs via the url_rewrite table, but does NOT emit JSON-LD schema by default — that takes an extension or custom dev.

TL;DR — Magento SEO is dominated by two duplicate-content generators: layered navigation spraying parameter URLs, and configurable/simple product variants spraying near-identical SKU pages. Canonicalize both back to their clean parent (category or configurable product) and noindex the low-value combinations; reserve indexable pages for filters or variants with real search demand. Settle the version question first — Magento 1 is EOL (June 2020); Magento 2 ships as Adobe Commerce (paid, self-hosted), Magento Open Source (free), or Adobe Commerce as a Cloud Service (ACCS — a separate SaaS product since June 2025 that drops Luma entirely). SEO-friendly URLs run through the url_rewrite table — distinct from HTTP redirects, which Magento can auto-create as 301s. Structured-data output varies by storefront theme and extensions, so inspect rendered pages before planning custom work.

Evidence for this claim Adobe Commerce layered navigation creates filterable category states that require deliberate URL and indexation handling. Scope: Adobe Commerce/Magento catalog navigation behavior; exact URLs depend on configuration and extensions. Confidence: high · Verified: Adobe Commerce: Layered navigation Evidence for this claim Google warns that faceted navigation can generate very large URL spaces and consume crawling resources. Scope: Google crawling guidance applied to Magento filtering; not a platform-specific penalty. Confidence: high · Verified: Google Search Central: Faceted navigation

Step zero: get the version straight

Half the bad Magento SEO advice online is bad because it’s aimed at the wrong version. Lock this down before anything else:

  • Magento 1 hit end-of-life on June 30, 2020. No security patches, no updates. If a client is still on it, the SEO work is a Magento 2 migration — with a full redirect map and a crawl-based QA pass, treated like any platform migration where ranking authority is on the line.
  • Magento 2 is the live codebase. It ships in two editions: Adobe Commerce (paid; B2B features, page builder, hosted PaaS option) and Magento Open Source (free; community edition). Same core, same SEO surface area. Adobe’s branding shift means “Magento,” “Adobe Commerce,” and “Magento Open Source” all show up for the same underlying platform — don’t let the naming fool you into thinking the SEO model differs.
  • Adobe Commerce as a Cloud Service (ACCS) is a third, separate product — a SaaS deployment launched June 2025 with a storefront built on Edge Delivery Services rather than the traditional Commerce/Luma stack. Luma isn’t supported on ACCS at all, so if a store is on it, the Luma-specific theme and schema notes below don’t carry over — you’re rebuilding that layer from scratch, not tweaking it.

Everything below assumes self-hosted Magento 2 (Adobe Commerce or Magento Open Source, on Luma or Hyvä) unless ACCS is called out specifically.

Layered navigation is the whole game

If you only fix one thing on a Magento store, fix layered navigation. It’s Magento’s term for faceted filtering on category pages, and by default each filter selection appends a query parameter:

/running-shoes
/running-shoes?color=159
/running-shoes?color=159&size=42
/running-shoes?color=159&size=42&price=50-100
/running-shoes?size=42&color=159        ← same filters, different order = new URL

One clarification before you copy any crawl/index strategy onto a store: Adobe documents standard layered navigation and Live Search (Adobe Commerce’s paid, AI-powered facet feature) as distinct implementations with different filter/URL behavior. The canonical and noindex guidance below is written for standard layered navigation — if a store runs Live Search, confirm the actual URL patterns it generates before assuming the same rules apply.

The combinatorial explosion is the problem. A catalog of a few thousand SKUs can generate tens of thousands of crawlable, near-duplicate URLs. This is the canonical faceted-navigation failure mode, and Gary Illyes has put numbers on how much grief it causes Google — faceted navigation is the largest single source of crawl-waste complaints they receive (see the Quotes tab). The damage on your side: duplicate/near-duplicate content, index bloat, crawl budget burned on junk, and internal PageRank diluted across hundreds of filter links per category page.

The decision is binary, per URL pattern: does this filtered page deserve a place in the index, or not?

For the ~99% that don’t (most color/size/price/sort combinations have no search demand):

  • Canonical the filtered URL to the clean category URL. Magento 2’s “Use Canonical Link Meta Tag for Categories” setting (Stores → Configuration → Catalog → Catalog → Search Engine Optimization) helps, but on its own it points a category to itself, not filtered variants to the parent — so for parameter URLs you typically lean on an SEO extension or template logic to emit the right canonical.
  • noindex the low-value filter combinations so they drop out of the index. Remember the rule from Google: noindex requires the page to be crawlable — never pair noindex with a robots.txt Disallow on the same URL, or Googlebot can’t read the tag.
  • Consider robots.txt disallow for purely combinatorial parameter spaces if crawl budget is the acute problem — but know it controls crawling, not indexing, and won’t remove already-indexed URLs.

For the minority that DO have demand (e.g. a “/running-shoes/nike/” type page where the brand filter is a real query): promote those to indexable, clean-URL landing pages — unique intro copy, self-referencing canonical, internal links, sitemap inclusion. That’s where Magento faceted nav turns from liability into long-tail asset. (Full treatment in the faceted navigation hub, the canonical home for this topic on the Ecommerce side; the crawl-side mechanics live with URL parameters and crawl budget.)

URL rewrites and SEO-friendly URLs

Magento generates clean URLs through URL rewrites, stored in the url_rewrite database table and managed in Admin under Marketing → SEO & Search → URL Rewrites. Adobe’s own docs draw a sharp line between two terms that get used loosely: a rewrite is a server-side mapping that changes what loads without touching the browser’s address bar, while a redirect sends the browser an HTTP response telling it to navigate to a different URL — the address bar updates. Magento’s automatic 301-on-URL-key-change is a redirect; the url_rewrite table also stores internal rewrites that never surface to the visitor. Two settings do most of the heavy lifting:

  • “Use Web Server Rewrites” (Stores → Configuration → General → Web → Search Engine Optimization) strips index.php from URLs.
  • URL suffixes / category-path-in-URL. Magento can include the category path in product URLs (/men/shoes/nike-pegasus). Be deliberate: including the category path means a product in multiple categories can resolve at multiple URLs, recreating duplication — which is exactly why Magento adds canonical options for products too (“Use Canonical Link Meta Tag for Products”). Many Magento SEOs set product URLs without the category path to sidestep this entirely.

When you change a product or category URL key, Magento can auto-create a 301 in the url_rewrite table (“Create Permanent Redirect for old URL”). Confirm that toggle is on before any bulk URL edits, or you’ll strand indexed URLs on 404s. Before changing category-path or suffix settings on a live store, inventory the affected URL patterns per store view and stage a redirect/canonical plan rather than flipping the toggle and hoping — Adobe’s own docs warn that regenerating rewrites for categories with many assigned products can be a real performance hit, not just an SEO one.

Configurable and simple products: the other duplicate-content driver

Layered navigation isn’t the only way a Magento catalog sprays near-duplicate URLs. Configurable products (the parent — “Running Shoe”) built from simple products (the actual purchasable size/color combinations) create the same failure mode at catalog scale. Vervaunt’s Paul Rogers frames the math well: a fashion store with 3,000 parent products, each in 8 sizes and 6 colors, can generate 144,000 simple-product combinations. In Magento those combinations are a catalog relationship, not an indexing decision — without an explicit canonical policy, Googlebot can find all of them as separate, indexable URLs pointing to near-identical content.

The fix practitioner guides converge on: canonical each simple product to its parent configurable product, and don’t rely on catalog visibility settings alone — a simple product set to “Not Visible Individually” is still reachable by direct URL, sitemap, or internal link, so Googlebot can index it even though it’s hidden from on-site navigation. An explicit canonical tag pointing to the parent is the actual fix, and it’s server-side rendered, so it isn’t dependent on JavaScript.

Index a variant on its own only when it has real, independent search demand you can differentiate with unique content — a specific color/size combination people search for by name, not every SKU by default.

Check under Stores → Configuration → Catalog → Catalog → Search Engine Optimization that “Use Canonical Link Meta Tag for Products” is on, then confirm — on the actual rendered page, not just the setting — that simple product URLs carry the canonical back to the parent.

The JSON-LD gap

This one trips people up because they assume a platform this large handles schema. Magento 2 does not generate JSON-LD structured data out of the box. Some themes emit microdata on product pages, but:

  • Google recommends JSON-LD as the implementation format over microdata/RDFa (see the Official Docs tab).
  • To qualify for product rich results you need Product schema with name, image, description, offers (price, priceCurrency, availability), and — for the star ratings — aggregateRating/review, which must come from real reviews.

So getting rich results on Magento is an extension or custom-development task: a dedicated structured-data extension, a schema-aware theme, or template work that outputs JSON-LD. When you add it, audit for duplicate schema — if a theme’s leftover microdata and an extension’s JSON-LD both describe the product, you can ship two conflicting Product blocks. Pick one source of truth.

The rest of the technical surface

  • Canonical tags. Beyond categories/products, watch the homepage (/ vs ?___store= and similar store-view params), pagination, and the store-view/locale parameters Magento appends. See canonicalization and the canonical tag deep dives.
  • Pagination. Magento paginates categories with ?p=2. Give each page a unique, self-referencing canonical — do not canonical page 2+ back to page 1, and don’t noindex the sequence (that can cut link equity to products only listed deep in the pages). rel=prev/next is dead; don’t rely on it.
  • Store views (multi-language / multi-site). Magento’s store-view architecture is powerful for international setups but is a classic source of duplicate content and missing/mismatched hreflang. If you run multiple store views off one catalog, hreflang is manual work and partial deployment is worse than none.
  • Out-of-stock and disabled products. Decide a policy: keep ranking pages live with stock status, or 404/410 + redirect permanently gone SKUs. Don’t silently disable products and leave their URLs 404ing with inbound links.
  • Core Web Vitals. Self-hosted Magento’s performance is entirely on your infrastructure. Full-page cache (Varnish), a CDN, image optimization (WebP), and disciplined extension/JS hygiene are the levers. Two different headless paths get conflated here, so be precise about which one you’re evaluating: PWA Studio is Adobe’s older React-based storefront layered on your existing Commerce infrastructure, while Adobe Commerce as a Cloud Service (ACCS) is a separate SaaS product on Edge Delivery Services where Luma isn’t supported at all. Either can lift the CWV ceiling, but both add rendering and indexing considerations of their own — confirm which one (or neither) a store is actually running before planning a headless migration for CWV.

What to actually prioritize

On most Magento audits the order of impact is:

  1. Layered navigation — canonical + noindex strategy for parameter URLs. This is the biggest share of the technical SEO value.
  2. Configurable/simple product canonicalization — canonical simple SKUs to their parent configurable product; verify it on rendered pages, not just the admin setting.
  3. URL rewrites & redirects — friendly URLs on, redirect-on-change on, no stranded 404s.
  4. Schema — add JSON-LD (no native support), avoid duplicate blocks.
  5. Titles/meta + category copy — fill the fields; categories ship blank.
  6. Performance — cache, CDN, images.

Everything else is refinement. Magento gives you total control, which means almost every SEO problem on a Magento store is a configuration choice you can fix — and almost every one starts with the filters.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin an expert quote first.