Keyboard with Red Seo Key, Highlighting Magento Seo Optimization Importance
Yaro Rogoza Avatar

A Magento store with 800 products can expose 20,000 crawlable URLs through filters, sorting and pagination, and that gap is the most common reason a well-built store ranks below a thinner competitor. Since the first version of this Magento SEO checklist in 2024, Magento 2.4.9 shipped, Hyvä became free, Google ran two broad core updates, and AI Overviews started appearing on shopping queries. This version reorders the checklist by what moves rankings in 2026, gives the exact admin setting for each item, and shows how to confirm a problem exists before you touch anything.

What changed since 2024

Five facts reshape the priorities below:

  • Adobe Commerce and Magento Open Source 2.4.9 reached general availability on May 12, 2026 (Adobe release notes, 2026). Adobe Commerce as a Cloud Service picked up the same changes on September 8, 2026.
  • Hyvä Theme became free and open source on November 10, 2025, removing the license fee that kept many mid-market stores on Luma (see our post on what Hyvä going open source means for Magento).
  • Google ran two broad core updates in 2026 (March 27 to April 8, and May 21 to June 2) and, as of its December 2025 documentation update, runs smaller core updates continuously between them (Google Search Central; Search Engine Journal, 2026).
  • AI Overviews appeared on 14% of shopping queries in March 2026, up from 2.1% in November 2025, across 20.9 million product-intent keywords (Visibility Labs via Search Engine Land, March 2026).
  • Interaction to Next Paint (INP) replaced First Input Delay as a Core Web Vital in March 2024. “Good” is 200 ms or less at the 75th percentile (web.dev).

The checklist at a glance

Work top to bottom. Items 1 to 8 fix problems that suppress a whole store; everything after that improves pages that are already eligible to rank.

#FixWhere in MagentoImpactEffort
1Measure index bloat (indexed URLs vs. real pages)Google Search Console > PagesHighLow
2Canonical tags on categories and productsStores > Configuration > Catalog > Catalog > Search Engine OptimizationHighLow
3Keep filters, sort and search results out of the indexDefault robots + theme/extensionHighMedium
4Self-referencing canonicals on paginated categoriesExtension or theme overrideHighMedium
5Noindex cart, checkout, customer and wishlist pages (do not block in robots.txt)Content > Design > Configuration > Search Engine RobotsHighLow
6Clean XML sitemap (products, categories, CMS only)Stores > Configuration > Catalog > XML SitemapMediumLow
7Public catalog for B2B stores, prices behind loginStores > Configuration > General > Website Restrictions + Shared CatalogHigh (B2B)Medium
8Pass INP, LCP and CLS on mobileTheme (Hyvä), hosting, full-page cacheHighHigh
9Product URLs without category path, permanent redirects onCatalog > Search Engine OptimizationMediumLow
10Redirect map for every URL key changeMarketing > URL RewritesMediumLow
11Unique title and meta description per pageProduct/Category > Search Engine Optimization; Product Fields Auto-GenerationMediumMedium
12One H1, keyword-led, on every templateTheme templatesLowLow
13Complete Product, Offer and AggregateRating schemaTheme or Rich Snippets extensionMediumMedium
14BreadcrumbList schema site-wideThemeLowLow
15Category pages with real buying guidanceCategory > ContentHighHigh
16Original product copy for top-revenue SKUsProduct > ContentMediumHigh
17Alt text and modern image formats (WebP/AVIF)Product > Images and Videos; CDNLowMedium
18hreflang for multi-store, multi-language setupsExtension or themeMedium (intl.)Medium
19Deliberate robots.txt policy for AI crawlersContent > Design > Configuration > Search Engine RobotsMediumLow
20Monthly monitoring: GSC Pages report, CrUX, index countSearch Console, PageSpeed InsightsMediumLow

1. Measure index bloat before you change anything

Compare the number of indexed URLs in Google Search Console with the number of products, categories and CMS pages you actually publish. A healthy store lands within a few percent of that count. If the indexed figure is a multiple of it, layered navigation, search results or pagination are leaking into the index, and every fix that follows gets checked against this one number.

Open Search Console > Indexing > Pages. Three reasons tell you where the leak is:

  • “Alternate page with proper canonical tag” in large numbers is normal and means canonicals work.
  • “Duplicate without user-selected canonical” or “Duplicate, Google chose different canonical than user” means Google disagrees with your canonical choices, usually on filtered category URLs.
  • “Crawled – currently not indexed” in the thousands usually points to thin filter combinations or search results pages that Google crawled and discarded.

Write down the indexed count and the count of real pages. Items 2 to 6 exist to close that gap, and item 20 re-checks it monthly. It is also the first number we report in a Magento SEO audit, because it predicts how much of the rest of the list will matter.

2. Turn on canonical tags for categories and products

Magento ships with canonical link meta tags switched off, and this is the first setting to change on any new store. Go to Stores > Configuration > Catalog > Catalog > Search Engine Optimization and set both “Use Canonical Link Meta Tag For Categories” and “Use Canonical Link Meta Tag For Products” to Yes.

With these on, a product reachable through three categories declares one canonical URL, and a category page filtered by color, size or price points back to the unfiltered category. Google consolidates ranking signals to the canonical instead of splitting them across variants. Adobe documents the setting in its metadata and canonical tag guide, and the core config confirms both values default to No (catalog/seo/category_canonical_tag and product_canonical_tag are 0 in Magento/Catalog/etc/config.xml).

One trap: if “Use Categories Path for Product URLs” is also Yes, the same product exists at several paths, and the canonical is doing all the work. It holds up, but a clean top-level product URL (item 9) is the simpler design.

3. Keep filters, sort orders and search results out of the index

Canonicals hint; they do not stop crawling. Layered navigation on a category with six filterable attributes generates URL combinations that Googlebot will happily crawl for weeks, spending crawl budget that should go to new products. The fix is to decide which filter pages deserve to exist as landing pages and to stop the rest from being crawled or indexed.

The approach we use on client stores:

  • Filters with real search demand (brand, material, a key spec in B2B) become static landing pages with their own URL key, title, copy and self-referencing canonical, either as sub-categories or through a landing-page extension.
  • Every other filter, plus all sort and limit parameters (product_list_order, product_list_limit, product_list_mode), gets a noindex, follow meta robots tag. Magento’s default robots setting is global, so this needs a small custom module or one of the SEO extensions covered in our review of Magento 2 SEO extensions.
  • Internal search results (/catalogsearch/result/) are noindexed and disallowed in robots.txt. Magento’s default robots.txt template does not block /catalogsearch/, so add the rule yourself; these pages carry no link equity worth preserving. While you are in that template, look at Disallow: /*?. It ships in the default and blocks Googlebot from every URL with a query string, which includes paginated category pages and any filter page you want indexed. Replace it with rules for the specific parameters you want kept out (/*?product_list_order=, /*?product_list_limit=, /*?product_list_mode=, /*?dir=) and leave p alone.

Confirm the result with a crawl (Screaming Frog, Sitebulb) filtered to URLs containing ?. The count of indexable parameter URLs should be close to zero.

4. Give paginated category pages their own canonical

Which fix you need depends on your version. Through Magento 2.4.7, the core canonicalizes page 2, 3 and onward of a category to page 1, the behavior reported in magento/magento2 issue #37338. Since Google stopped using rel=”prev” and rel=”next” as an indexing signal in 2019, that default made products on deep pages harder to discover and attribute. Adobe fixed it in 2.4.8: Magento\Catalog\Helper\Category::getCanonicalUrl() now appends ?p=N to the category canonical, so paginated pages are self-referencing out of the box on 2.4.8 and 2.4.9.

On 2.4.7 or earlier, override the canonical on paginated URLs so ?p=2 declares itself as canonical; most Magento SEO suites include this as a toggle. On 2.4.8 or later, check that your theme or SEO extension is not overriding the core back to page 1, which several older modules still do. On every version, keep paginated pages indexable, link them from page 1 with plain <a href> links rather than “load more” buttons rendered only by JavaScript, and remove the Disallow: /*? rule from robots.txt (item 3), because a self-referencing canonical on a page Googlebot cannot crawl changes nothing.

5. Noindex checkout, cart, customer and wishlist pages. Do not block them in robots.txt

The 2024 version of this checklist said that a robots.txt rule overrides the meta robots tag. That advice causes a real problem. If robots.txt blocks a URL, Googlebot never fetches it, so it never sees the noindex. Google can still index the URL from links alone and show it in results with no snippet. Google’s robots meta tag documentation states this directly: a page must be crawlable for a noindex to take effect.

Magento’s default robots.txt template does the opposite of this advice: it ships with Disallow: /checkout/, /customer/, /review/, /sendfriend/ and /catalog/, and the “Reset to Defaults” button in the admin restores those lines (Magento/Theme/etc/config.xml). So for /checkout/, /customer/, /wishlist/, /sales/ and /review/ remove the robots.txt rules, use noindex, follow and let Googlebot crawl them. Reserve robots.txt for paths with no value at all and no risk of being linked to (/catalogsearch/, /sendfriend/, /*SID=, static and media folders that should not be indexed as pages).

Set the site-wide default at Content > Design > Configuration > (your scope) > Search Engine Robots > Default Robots. Keep it at INDEX, FOLLOW and apply NOINDEX, FOLLOW per page group through layout XML or an extension. Never leave a staging store at NOINDEX, NOFOLLOW and then copy its configuration to production; we have seen this take a launched store out of Google for weeks.

6. Generate a sitemap that lists only pages you want ranked

The XML sitemap should contain products, categories and content pages that return 200, are indexable and are canonical. Nothing else. Configure it at Stores > Configuration > Catalog > XML Sitemap. Three defaults need attention: scheduled generation is off (Enabled: No), submission to robots.txt is off, and product images are included (Add Images into Sitemap: All). Turn generation on with a daily cron, turn on “Enable Submission to Robots.txt” so the Sitemap: line is written automatically, and keep images unless the sitemap is hitting the size limit.

Two checks after generation:

  • Out-of-stock or disabled products should not appear. If they do, review product visibility settings; a product set to “Not Visible Individually” is excluded, one set to “Search” only is still included.
  • Magento splits sitemaps at 50,000 URLs or 10 MB per file by default (Magento/Sitemap/etc/config.xml) and writes a sitemap index. Submit the index file, not the parts, in Search Console.

Submit the sitemap and, after a week, compare “Discovered” against “Indexed” for the sitemap in Search Console. A large gap between the two means items 2 to 5 are not finished.

7. B2B stores: keep the catalog public, hide the prices

A B2B store that requires login to see any page is invisible to Google. Website Restrictions (Stores > Configuration > General > Website Restrictions) with “Private Sales” mode blocks Googlebot the same way it blocks an anonymous buyer. Distributors and manufacturers lose their category and product rankings this way without noticing, because internal users are always logged in.

The pattern that keeps rankings and protects pricing: leave the catalog public, show “Sign in for pricing” instead of a price, and use Adobe Commerce B2B Shared Catalogs or customer-group pricing so contract prices appear only after login. Product pages stay indexable with full specs, documents and structured data, minus the Offer price. For stores that must keep even the catalog private, publish a public “product information” subset (spec sheets, categories, applications) so there is at least one indexable page per product family.

We cover the SEO side of gated catalogs in more depth in B2B ecommerce SEO for Magento and Adobe Commerce. For how portals, quotes and pricing tiers fit together, see the B2B ecommerce strategy guide and our B2B ecommerce development services .

8. Pass Core Web Vitals on mobile, starting with INP

Core Web Vitals are assessed on real-user data at the 75th percentile: LCP at 2.5 s or less, INP at 200 ms or less, CLS at 0.1 or less (web.dev). We made the case for page experience as a ranking input in our earlier post on Google Page Experience and your ecommerce store; INP is where that argument now bites. On Magento, INP is the metric most stores fail, and the cause is almost always the Luma frontend: RequireJS loading dozens of modules, Knockout bindings on the product page, and long tasks blocking the main thread when a shopper taps a filter or swatch.

Work in this order:

  1. Server response. Full-page cache with Varnish, Redis for sessions and cache, the newest PHP your release line supports, and a CDN in front. Adobe Commerce on Cloud ships with Fastly, including its image optimizer. Aim for a TTFB under 500 ms on cached pages.
  2. Frontend. Bundle and defer JavaScript, load third-party tags after interaction, use fetchpriority=”high” on the LCP image, and reserve space for swatches and banners to stop layout shifts.
  3. Frontend replacement. If Luma cannot reach green INP after tuning, move to Hyvä. It replaces RequireJS and Knockout with Alpine.js and Tailwind, and typical builds ship a fraction of Luma’s JavaScript. Since Hyvä’s core theme went open source in November 2025 there is no license cost, only the build. Atwix is a Hyvä Silver Partner and every theme we ship comes with a Lighthouse report; see our Hyvä theme development services and our walkthrough of migrating an existing Magento theme to Hyvä.
  4. Adobe Commerce as a Cloud Service or Optimizer. Stores on Adobe’s SaaS line can use Edge Delivery Services for a storefront that renders at the edge. We cover what that means for performance on our Edge Delivery Services page.

Measure with the Core Web Vitals report in Search Console (field data) rather than a single Lighthouse run (lab data). If you need help isolating the bottleneck, that is exactly what a Magento performance audit produces.

9. Use flat product URLs and keep permanent redirects on

Under Stores > Configuration > Catalog > Catalog > Search Engine Optimization:

  • Use Categories Path for Product URLs: No (the core default). One product, one URL, regardless of how many categories it belongs to. Check it, because migrations and older SEO extensions often flip it.
  • Create Permanent Redirect for URLs if URL Key Changed: Yes (also the default). Every rename in the admin creates a 301 automatically.
  • Product URL Suffix / Category URL Suffix. Either keep .html or remove it, but decide once. Changing it later regenerates every URL and requires a full redirect map.
  • Generate “category/product” URL Rewrites: No unless you rely on category-path URLs. On large catalogs this setting inflates the url_rewrite table and slows imports.

Keep URL keys short and readable, hyphen-separated, and without repeating words the category already carries. A product imported as /safety-gloves/cut-resistant-gloves/cut-resistant-safety-gloves-level-a4 says “gloves” three times; /cut-resistant-gloves-a4 says it once and still describes the product on its own. Strip the size, color and pack quantity from the parent product’s key too, so configurable children do not produce keys like /widget-blue-small-pack-of-10.

10. Keep a redirect map for every catalog restructure

Magento’s automatic redirect covers URL key changes made in the admin. It does not cover products deleted and re-created during an import, categories merged, or a suffix change. Before any catalog restructure, export the current URL list, map old to new, and load the map through Marketing > SEO & Search > URL Rewrites (or via import for anything over a few hundred rows). After the change, crawl the old URLs and confirm every one returns a single 301 to a 200 page, not a chain.

11. Write titles and meta descriptions that earn the click

Google does not use the meta description for ranking, but it does affect click-through rate, and Google rewrites titles it finds unhelpful. Every indexable page needs a unique title under about 60 characters that leads with the product or category name and a description under 160 characters that says what the buyer gets.

Set the brand suffix once at Content > Design > Configuration > HTML Head > Page Title Suffix. For large catalogs, use Product Fields Auto-Generation (Stores > Configuration > Catalog > Catalog) to template product titles and descriptions with placeholders such as {{name}} and {{sku}}. The mask fills the meta fields when a product is created and leaves existing products untouched, so run it before a catalog import, not after, and expect to regenerate metadata for anything already live. One mask serves the whole store, so keep it generic and hand-write the metadata for your top 50 revenue products.

12. One H1 per template, and make it the page name

Magento’s default templates render the product name and category name as H1, which is right. Themes and page builders break this: a promotional banner with an H1, a logo wrapped in H1, or a category description block that starts with an H1. Crawl the site and filter for pages with zero or multiple H1s, then fix the template rather than the page. Headings below H1 should follow H2 > H3 order; skipped levels confuse both screen readers and the chunk-level extraction AI systems use.

13. Complete the Product schema Magento leaves half-finished

Magento’s default product markup is microdata scattered across Luma templates: Product with name, SKU, description and image, an Offer that carries only price and currency, and AggregateRating when the review summary renders (Catalog/view/frontend/layout/catalog_product_view.xml, Catalog/view/base/templates/product/price/amount/default.phtml, Review/view/frontend/templates/helper/summary.phtml in 2.4.9). There is no availability, brand, GTIN, MPN or item condition, and none of the shipping and return details Google uses for merchant listing enhancements. Hyvä replaces this with JSON-LD, but the field gaps are the same until someone maps the attributes. Those identifiers are how Google Shopping and AI systems match your product page to the same product elsewhere, so an incomplete schema means fewer rich results and fewer citations.

Add Product with brand, gtin13 or mpn, offers with price, priceCurrency, availability and itemCondition, plus aggregateRating and review where you have them. Follow Google’s Product structured data documentation for the merchant listing requirements, and validate with the Rich Results Test on a product page, a configurable product with swatches, and a bundle. Configurable products are where markup usually breaks, because the rendered price and the marked-up price diverge.

We add these fields as a small module that reads product attributes and outputs JSON-LD without touching theme templates, which survives theme upgrades and works on Luma and Hyvä alike; it is part of our Magento extension development work.

14. Add BreadcrumbList schema everywhere

Breadcrumb markup gives Google and AI systems the category hierarchy of every product in one structured block. Magento renders visible breadcrumbs but does not mark them up by default on all themes. Add BreadcrumbList JSON-LD in the theme’s breadcrumb template so it reflects the canonical category path, not the path the shopper happened to navigate.

15. Make category pages worth ranking

Google’s 2026 core updates were hard on category pages that consist of a product grid and two sentences. Google’s guidance is consistent: content should help the searcher decide, and a category page competes with buying guides and comparison articles for the same query. Categories that gained visibility in 2026 carry an introduction that explains who the products are for, how the options differ, and what to check before ordering, then the grid.

Practical structure for a category description in Magento (Catalog > Categories > Content):

  • 150 to 300 words above the grid answering “which one do I need?” in the buyer’s language.
  • A short comparison table where the range has a clear axis (capacity, material, compatibility).
  • Links to the two or three sub-categories or guides that answer the next question.
  • Expandable detail below the grid for the long tail: specs explained, standards, FAQs.

Do this for the twenty categories that drive the most revenue first. A category with 40 products and a real guide beats a category with 400 products and none. Our HyperVSN case study shows how this content work and the technical items above combine on a live Magento store.

16. Rewrite product copy where it is manufacturer copy

Manufacturer descriptions appear on every retailer selling the product, so Google has no reason to prefer your page. Original copy pays off on the SKUs that make money and the ones you want to rank; the long tail can keep manufacturer text. Add what the manufacturer left out: fit and compatibility, what it replaces, what is in the box, common failure points, and the question your support team answers most. On B2B catalogs, structured attributes (dimensions, materials, certifications, MOQ) do more than prose, because they render as specs, feed the schema, and answer the exact queries AI assistants receive. The platform-agnostic side of this, from keyword mapping to review content, is covered in our ecommerce SEO best practices guide.

17. Optimize images: alt text, format, size

Every product image needs descriptive alt text (Catalog > Products > Images and Videos > Alt Text), written for a person who cannot see the image, not a keyword string. Serve WebP or AVIF through the CDN (Fastly Image Optimizer on Adobe Commerce on Cloud, or a CDN transform on other hosting), set explicit width and height attributes to prevent layout shift, and lazy-load everything below the fold except the LCP image.

18. Add hreflang for multi-store, multi-language stores

Magento does not output hreflang tags by default. If you run store views for different countries or languages, each page needs <link rel=”alternate” hreflang=”…”> tags pointing to every equivalent store view, plus an x-default. Without them, Google can pick the wrong language version for a market or treat translated pages as duplicates. Most SEO extensions add this; verify that the output uses the correct region codes (en-gb, not en-uk) and that every referenced URL returns 200.

19. Set an AI crawler policy on purpose

AI assistants and AI Overviews send buyers to ecommerce sites, so the crawler rules in robots.txt are now a distribution decision, and Magento’s default template makes none. Two facts shape it. Google’s Google-Extended token controls whether your content trains Gemini and grounds some Gemini features; it has no effect on Google Search or AI Overviews, which draw on the ordinary Googlebot crawl (Google crawler documentation). And a Disallow for GPTBot, ClaudeBot or PerplexityBot removes your product pages from that assistant’s answers entirely; there is no partial setting. Our position for B2B catalogs is to allow the assistant crawlers on product and category pages, keep them off search results and account pages like every other bot, and handle load at the CDN with rate limits rather than in robots.txt. A distributor whose specs appear in an AI answer gains a channel; one whose specs are blocked hands it to a competitor. Our guide to generative engine optimization for B2B ecommerce covers what to do once the crawlers are in.

Write the rules in Content > Design > Configuration > Search Engine Robots > Edit custom instruction of robots.txt file, and check the CDN and WAF layer too. CDN-level bot rules can override anything in robots.txt; we documented a case where a CDN setting blocked Googlebot itself in our post on Cloudflare blocking Googlebot.

20. Monitor monthly, and know what each report is telling you

SEO on Magento regresses every time the catalog, theme or an extension changes. A monthly check takes an hour:

  • Search Console > Pages: compare indexed count with real page count (item 1). A jump usually means a new filter or parameter started indexing.
  • Search Console > Core Web Vitals: the mobile “poor” URL count, grouped by template.
  • Search Console > Enhancements: Product snippets and Merchant listings, for invalid items after any theme deployment.
  • Crawl the top 200 URLs and diff titles, canonicals and robots tags against last month.
  • Check robots.txt and the sitemap index resolve with 200 and have not reverted to a staging version.

Keep a log. If nobody owns this hour, fold it into a Magento maintenance retainer so it happens after every deployment rather than after every traffic drop. When a core update lands, Google recommends waiting a full week after rollout completes before analyzing performance, and the log tells you whether a drop coincided with a deployment or with the update.

Common Magento SEO mistakes we still find in audits

  • Canonicals off. Still the most frequent finding on stores launched by generalist agencies.
  • Staging robots settings shipped to production. NOINDEX, NOFOLLOW in the production default robots, sometimes for months.
  • Default robots.txt left untouched. Disallow: /*? blocks every paginated and filtered page from crawling, and /checkout/, /customer/ and /review/ are blocked instead of noindexed, which leaves those URLs indexed without content.
  • Suffix change without redirects. Removing .html regenerates every URL; done without a map it produces thousands of 404s.
  • Category paths and flat URLs both enabled with canonicals off, tripling product URLs.
  • Configurable product schema showing the wrong price because the markup renders the first child’s price while the page shows a range.
  • Login-gated B2B catalogs with zero indexable product pages.
  • Luma with 30 third-party extensions, each adding its own JavaScript, and INP above 500 ms.
  • Mixed HTTP and HTTPS URLs in canonicals, sitemaps or hreflang after a certificate or CDN change. HTTPS has been table stakes since 2014; a security audit catches the certificate and redirect gaps that also leak into SEO.

Frequently Asked Questions

Got some questions? We’re here to answer. If you don’t see your question here, drop us a line with out Contact form.

Is Magento good for SEO in 2026?

Yes, once the defaults are changed. Canonicals ship off, the default robots.txt blocks every URL with a query string, and sitemap generation is disabled, so a store launched on defaults under-performs the same catalog on a SaaS platform. Change those three, control layered navigation, and Magento gives you more indexation control than most platforms allow.

What is the single biggest Magento SEO fix?

Controlling indexation. Turn on canonical tags, keep filters and search results out of the index, and give paginated pages their own canonical. On most stores we audit, this one cluster of changes outweighs every content change combined.

Does Magento need an SEO extension?

Not necessarily. Core Magento covers canonicals, robots, sitemaps and metadata templates. Extensions add per-page robots control, pagination canonicals, hreflang, richer schema and redirect management. If you have in-house developers, a small custom module does the same with less overhead; if not, a well-maintained extension is the practical route.

How do AI Overviews affect a Magento store?

AI Overviews appeared on 14% of shopping queries in March 2026 (Visibility Labs via Search Engine Land), up from 2.1% four months earlier. They are assembled from pages that are crawlable, fast, and carry complete structured data and fact-dense copy, which is the same work that earns organic rankings. The technical items above are the AI checklist.

Should I move from Luma to Hyvä for SEO?

If your store fails INP on mobile after caching and hosting are fixed, yes. Hyvä removes the frontend stack that causes most Magento interaction delays and has been free since November 2025. If your Luma store already passes Core Web Vitals, spend the budget on category content and structured data instead.