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#6 in Platform SEO#37 in Technical SEO#51 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 SEOMagento SEO is optimizing a store built on Magento — now Adobe Commerce (paid) or Magento Open Source (free), both running the Magento 2 codebase — to rank in organic search. The defining challenge is layered navigation (faceted filtering), which can spawn huge numbers of duplicate parameter URLs. 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 URLsURL structure is how the parts of a web address — scheme, domain, path, query string, and fragment — are organized and formatted. It mostly affects crawling, usability, and how engines understand a page, not rankings directly. run through the url_rewrite table — distinct from HTTP redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't., 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 redirectA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. 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/indexStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. 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-duplicateThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling. URLs. This is the canonical faceted-navigation failure mode, and Gary Illyes has put numbers on how much grief it causes Google — faceted navigationFaceted navigation (faceted search, product filtering) lets visitors refine a list of products or content by attribute — price, color, size, brand, rating. The SEO problem: each filter combination can spawn a distinct crawlable URL, turning a small catalog into millions of near-duplicate pages that waste crawl budget and dilute ranking signals. is the largest single source of crawl-waste complaints they receive (see the Quotes tab). The damage on your side: duplicate/near-duplicate contentThe same or very similar primary content reachable at more than one URL. There's no general duplicate content penalty — the real costs are possible signal dilution, the wrong URL getting chosen, and less-efficient crawling., index bloatAn SEO term for when a search engine has indexed a lot of low-value, thin, or duplicate URLs that don't serve search demand. It's a quality and crawl-efficiency problem, not a penalty., crawl budgetThe number of URLs an engine will crawl in a timeframe. burned on junk, and internal PageRankPageRank is Google's original recursive link-graph algorithm: a page's score depends on the scores of the pages linking to it, and in the published model each page's score is split across its outbound links (the simplified version: links are weighted votes). Google says it's evolved since launch but still part of its core ranking systems. 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.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. Disallow on the same URL, or GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer. can’t read the tag.
  • Consider robots.txt disallow for purely combinatorial parameter spaces if crawl budgetThe number of URLs an engine will crawl in a timeframe. is the acute problem — but know it controls crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor., not indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed., 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 linksAn internal link is a hyperlink from one page on a website to another page on the same website. Internal links help search engines discover your pages and pass ranking signals (PageRank and anchor-text context) between them., sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. inclusion. That’s where Magento faceted nav turns from liability into long-tail asset. (Full treatment in the faceted navigationFaceted navigation (faceted search, product filtering) lets visitors refine a list of products or content by attribute — price, color, size, brand, rating. The SEO problem: each filter combination can spawn a distinct crawlable URL, turning a small catalog into millions of near-duplicate pages that waste crawl budget and dilute ranking signals. hub, the canonical home for this topic on the Ecommerce side; the crawl-side mechanics live with URL parametersThe `?key=value` data tacked onto the end of a URL after a question mark — used for tracking, sessions, filtering, sorting, and search — and one of the biggest sources of duplicate URLs and wasted crawling in SEO. and crawl budgetThe number of URLs an engine will crawl in a timeframe..)

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 tagA rel=\"canonical\" annotation — in the HTML <head> or an HTTP Link header — that tells search engines which URL is the preferred version of duplicate or near-duplicate content. 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-LDJSON-LD (JavaScript Object Notation for Linked Data) is a script-based structured data format, typically paired with the schema.org vocabulary to describe page content for search engines and AI systems. Google recommends it over Microdata and RDFa because it's the easiest format to implement and maintain at scale — but all three work, and structured data isn't a ranking signal. structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding. 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 resultsRich results (formerly 'rich snippets') are enhanced search listings — stars, images, prices, breadcrumbs, video thumbnails, and more — that Google and Bing build from structured data. They're a display feature, not a ranking factor, and eligibility never guarantees they'll show. 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.

TIP Verify that the Magento product page actually emits Product and Offer data

Magento core does not supply the JSON-LD for you. Test the combined extension, theme, and catalog output instead of assuming installation equals valid markup.

Run a focused product-page preflight with my free PDP SEO Checker Free

  1. Test representative simple, configurable, and out-of-stock product URLs.
  2. Confirm Product, Offer price, and availability appear in the delivered markup.
  3. Fix the extension, template, or catalog source, then rerun and validate the rendered page with Google.
The live output is missing the commerce graph Magento needs an extension or custom implementation to provide.

The checker says no Product schema was found, no schema price was found, no schema availability was found, and price consistency was not evaluated from raw HTML.

The rest of the technical surface

  • Canonical tags. Beyond categories/products, watch the homepage (/ vs ?___store= and similar store-view params), paginationPagination splits a large set of content — product listings, blog archives, search results — across multiple sequentially numbered URLs. For SEO, each paginated page should be crawlable, indexable, and self-canonical; Google no longer uses rel=prev/next, but Bing still does., and the store-view/locale parameters Magento appends. See canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. and the canonical tagA rel=\"canonical\" annotation — in the HTML <head> or an HTTP Link header — that tells search engines which URL is the preferred version of duplicate or near-duplicate content. 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 hreflangHreflang is an annotation (in HTML, HTTP headers, or XML sitemaps) that tells search engines which language and optional region a page targets, and which alternate versions exist. It only works when every page in the cluster references all the others.. 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 VitalsGoogle's three real-user UX metrics — LCP (loading), INP (responsiveness), and CLS (visual stability) — used by Google's ranking systems, with no official weight attached, measured on field data.. 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 renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. 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 + noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. strategy for parameter URLs. This is the biggest share of the technical SEOTechnical SEO is the practice of making a site easy for search engines to crawl, render, index, and (now) be eligible for AI answers. It's the foundation that lets your content and links rank — not a ranking trick of its own. value.
  2. Configurable/simple product canonicalizationHow search engines pick one canonical URL among duplicates and consolidate signals onto it. — 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 a quote first.