Magento 2 SEO: The Complete 2026 Checklist
Magento 2 ships with solid SEO bones, but a fresh install points most of them in the wrong direction. This checklist covers every layer of the stack — indexation, canonicals, structured data, Core Web Vitals, faceted-navigation control, hreflang, image SEO, and AI visibility — with exact admin paths and bin/magento commands.
Magento 2 SEO starts from a better position than almost any other platform: clean URL rewrites, a built-in sitemap generator, native canonical tag support, and a structured-data pipeline that is straightforward to extend. The problem is that the defaults are misconfigured — category paths duplicate every product URL, the sitemap excludes images, robots.txt blocks assets Googlebot needs, and the JS bundle crushes Core Web Vitals on mobile. This checklist works through every layer of the stack in the order that gives you the highest return for the least risk, from basic indexation settings you can flip in the Magento admin in under an hour to the JSON-LD and llms.txt work that puts your store in front of AI-generated answers.
1. Indexation and robots fundamentals
Before any on-page work, confirm that Googlebot can actually reach your pages. In Magento 2.4.4 — 2.4.9 the canonical place to manage this is Stores → Configuration → General → Web → Search Engine Optimization.
- Set Use Web Server Rewrites to Yes. This removes
index.phpfrom every URL — the single most impactful one-click Magento SEO win. - Under Stores → Configuration → Catalog → Catalog → Search Engine Optimization, set Use Categories Path for Product URLs to No (or Yes only if every product lives in exactly one category). With Yes and multiple categories, Magento creates duplicate product URLs per category path and canonical-loops them — a top cause of Google re-crawl waste.
For page-level robot instructions go to Content → Design → Configuration → [store view] → HTML Head. Set Default Robots to INDEX, FOLLOW for storefront pages. Edit your robots.txt through the same screen — never hand-edit the file in pub/ because Magento overwrites it on deploy. Add these minimal disallows to every Magento robots.txt:
User-agent: *
Disallow: /checkout/
Disallow: /customer/
Disallow: /catalog/product_compare/
Disallow: /catalogsearch/
Disallow: /wishlist/
Disallow: /review/product/
Allow: /catalogsearch/result/
Sitemap: https://yourdomain.com/sitemap.xmlWeb-server rewrites and category-path canonicalization are the two settings that cause the most Magento 2 SEO technical debt when left at their defaults. Fix both before anything else.
2. Canonical tags and URL rewrites
Magento generates canonical tags automatically when you enable them, but you still need to audit the output. Enable canonical tags at Stores → Configuration → Catalog → Catalog → Search Engine Optimization:
- Set Use Canonical Link Meta Tag For Categories to Yes.
- Set Use Canonical Link Meta Tag For Products to Yes.
With these on, every filtered and paginated URL points back to the unfiltered page. Verify the output with:
curl -s https://yourdomain.com/women/tops/ | grep -i canonicalURL rewrites management lives at Marketing → SEO & Search → URL Rewrites. When you rename a category or move a product, always confirm Magento created a 301 redirect from the old URL to the new one. The setting that controls this is Create Permanent Redirect for URLs if URL Key Changed under Stores → Configuration → Catalog → Catalog → Search Engine Optimization — set it to Yes.
Suffix management matters too. By default Magento appends .html to product and category URLs. There is no SEO advantage to the suffix and it creates friction when you add REST API endpoints alongside the same paths. Remove it by setting Category URL Suffix and Product URL Suffix to blank under the same Search Engine Optimization section. Do this at launch, not after — changing suffixes on a live site requires 301 redirects for every existing URL.
3. Meta titles and descriptions
Magento generates meta titles from product name + store name and leaves meta descriptions blank by default. Fix the title template at Stores → Configuration → Catalog → Catalog → Search Engine Optimization → Page Title Suffix. For individual pages:
- Products: Edit each product, open the Search Engine Optimization panel, fill Meta Title (50-60 chars, primary keyword near front) and Meta Description (150-160 chars with benefit + CTA).
- Categories: Same panel inside each category edit page.
- CMS pages: Content → Pages → [page] → Search Engine Optimization.
At scale, inject meta via a DataPatch:
<?php
// app/code/Panth/Seo/Setup/Patch/Data/SeedProductMeta.php
namespace Panth\Seo\Setup\Patch\Data;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Framework\Setup\Patch\DataPatchInterface;
class SeedProductMeta implements DataPatchInterface
{
private array $meta = [
'SKU-001' => [
'meta_title' => 'Widget Pro — Fast Shipping | Acme Store',
'meta_description' => 'Buy Widget Pro from a certified reseller. Free shipping over $50, 30-day returns. Ships same day.',
],
];
public function __construct(
private ProductRepositoryInterface $productRepo
) {}
public function apply(): void
{
foreach ($this->meta as $sku => $data) {
$product = $this->productRepo->get($sku);
$product->setCustomAttribute('meta_title', $data['meta_title']);
$product->setCustomAttribute('meta_description', $data['meta_description']);
$this->productRepo->save($product);
}
}
public static function getDependencies(): array { return []; }
public function getAliases(): array { return []; }
}4. XML and HTML sitemaps
Magento’s built-in XML sitemap is at Marketing → SEO & Search → Site Map. Before generating it, configure the frequency and priority at Stores → Configuration → Catalog → XML Sitemap. Key settings:
- Set Images to All so Googlebot discovers product images via the sitemap — omitting images costs you image-search traffic.
- Set Maximum No of URLs Per File to 10000 (the Google-recommended maximum per sitemap file).
- Enable Enable Submission to Robots.txt so the sitemap URL is injected automatically.
Generate or regenerate the sitemap with:
bin/magento sitemap:generateIf you have the Panth_XmlSitemap module installed, run:
bin/magento panth:seo:sitemap:generateFor the HTML sitemap — useful for both users and Googlebot’s internal link discovery — ensure your HTML sitemap page is linked from the footer and covers all category and CMS page URLs. Verify the page is indexed and linked within two clicks of the homepage.
A sitemap that excludes images is leaving image-search traffic on the table. Turn the images setting to “All” and regenerate before your first Google Search Console submission.
5. Structured data: Product, BreadcrumbList, FAQPage
Structured data is where Magento 2 SEO compounds its return — rich results, AI Overview citations, and machine-readable content for LLMs. JSON-LD is the only format Google recommends.
Product schema (PDP)
Every product detail page must emit Product schema. A minimal, valid example for Magento 2.4.4 — 2.4.9:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Widget Pro",
"sku": "SKU-001",
"image": [
"https://yourdomain.com/media/catalog/product/cache/w/image/widget-pro.jpg"
],
"description": "High-performance widget for Magento stores.",
"brand": {
"@type": "Brand",
"name": "Acme"
},
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": "49.99",
"availability": "https://schema.org/InStock",
"url": "https://yourdomain.com/widget-pro.html"
}
}BreadcrumbList schema
BreadcrumbList replaces the raw URL in SERPs with a readable path. Place it on every non-home page:
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://yourdomain.com"},
{"@type": "ListItem", "position": 2, "name": "Widgets", "item": "https://yourdomain.com/widgets"},
{"@type": "ListItem", "position": 3, "name": "Widget Pro"}
]
}FAQPage schema
Google ended FAQ rich results in traditional SERPs in May 2026, but FAQPage schema remains highly valuable for AI Overviews and LLM-powered search tools that extract Q&A pairs directly from structured data. Add it to CMS pages and PDP FAQ blocks:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Does this widget work with Magento 2.4.9?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. The Widget Pro is tested against Magento 2.4.4 through 2.4.9 and Adobe Commerce 2.4.7."
}
}
]
}6. Core Web Vitals for Magento 2
INP replaced FID in March 2024. Thresholds in 2026: LCP under 2.5s, INP under 200ms, CLS under 0.1 — measured at the 75th percentile of real field data. Only 47% of sites globally pass all three. Magento’s default JS bundle and unoptimized image pipeline fail all three on mobile without intervention.
| Metric | Good | Needs work | Poor |
|---|---|---|---|
| LCP | < 2.5s | 2.5s – 4.0s | > 4.0s |
| INP | < 200ms | 200ms – 500ms | > 500ms |
| CLS | < 0.1 | 0.1 – 0.25 | > 0.25 |
LCP
The LCP element is almost always the first product image. To hit 2.5s on mobile:
- Add
fetchpriority="high"andloading="eager"to the first above-the-fold product image. All other product images getloading="lazy". - Serve WebP with a JPEG fallback via
<picture>+ Magento’s image resize pipeline. Enable at Stores → Configuration → General → Web → Browser Capabilities Detection → Use WebP Images (Magento 2.4.4+). - Enable Varnish full-page cache. A cold TTFB above 600ms on origin makes LCP < 2.5s nearly impossible on mid-range mobile. See the TTFB optimization guide for the exact Varnish + Cloudflare stack.
INP
INP measures time from user interaction to next paint. On Luma, the main offenders are RequireJS loading on first interaction and Knockout watchers blocking the main thread. On Hyvä, Alpine’s overhead is negligible by comparison.
- Enable JS merging and bundling at Stores → Configuration → Advanced → Developer → JavaScript Settings — Merge JavaScript Files and Enable JavaScript Bundling to Yes. Note: this setting context is only effective when combined with Varnish; without FPC it worsens cold-load INP.
- Defer non-critical JS via the
deferattribute. Never deferrequire.jsitself — deferring it breaks PageBuilder’s inlinerequire.config()calls with “require.config is not a function”.
CLS
CLS on Magento 2 is caused by images or embeds without reserved space. Fix it:
- Always specify explicit
widthandheightattributes on every<img>tag so the browser reserves space before the image loads. - Avoid inserting banners or notification bars above existing content after page load — this is the most common CLS source in Magento stores with third-party marketing modules.
For a full deep-dive on diagnosing and fixing LCP, INP, and CLS on Magento, see the Core Web Vitals recipe guide. And for a complete performance audit approach, visit the Magento 2 performance optimization page.
INP replaced FID as the responsiveness metric in March 2024 and it is the metric most Magento stores fail. Profile your add-to-cart and filter interactions with Chrome DevTools — a single long RequireJS task on first interaction is usually the culprit.
7. Faceted navigation and index bloat
Magento’s layered navigation is the most dangerous source of index bloat in an e-commerce SEO program. A store with 10 filterable attributes and 1,000 products can generate over 1 million unique URLs — each thin and near-duplicate. Google wastes crawl budget on them and may demote or deindex the whole site.
The fix is a two-layer approach:
- Canonical all filtered URLs back to the unfiltered category. With Use Canonical Link Meta Tag For Categories set to Yes (see section 2), Magento already does this for standard filter URLs. Verify it is working for your specific URL structure with
curl -s "https://yourdomain.com/women/tops/?color=10&size=167" | grep canonical. - Noindex attribute combinations that have no search demand. For color/size/price combinations that nobody searches, set
X-Robots-Tag: noindexat the server layer or via thePanth_FilterSeomodule’s attribute allowlist. Keep canonical + index only for combinations with documented search volume (e.g., “red running shoes size 10”).
“Crawl budget is finite. Every thin filter URL you let Googlebot index is a crawl slot taken away from your money pages.”
8. Hreflang and multi-store SEO
If your Magento instance runs multiple store views for different locales or countries — the most common B2C configuration on Magento 2.4.4 — 2.4.9 — you need hreflang annotations to tell Google which store view to serve to which user.
Hreflang tags go in the <head> of every page, one per target locale plus an x-default pointing to your global-default URL:
<link rel="alternate" hreflang="en-us" href="https://yourdomain.com/widget-pro.html" />
<link rel="alternate" hreflang="en-gb" href="https://uk.yourdomain.com/widget-pro.html" />
<link rel="alternate" hreflang="de-de" href="https://de.yourdomain.com/widget-pro.html" />
<link rel="alternate" hreflang="x-default" href="https://yourdomain.com/widget-pro.html" />Hreflang must be bidirectional — every store view must reference all the others. A one-way annotation is treated by Google as absent. The Panth_Hreflang module handles bidirectional injection automatically.
Common multi-store Magento SEO mistakes:
- Setting all store views to the same locale code (
en) — Google cannot differentiate them and picks one at random to serve. - Forgetting hreflang in the XML sitemap — Google also reads hreflang from sitemap entries, not only from page
<head>tags.
9. Image SEO
Image SEO on Magento 2 is two problems: the quality of the image metadata, and the format/size of the files served. Both are under-addressed in the average Magento build.
Alt text
Magento uses the product name as alt text by default, which is better than nothing but rarely optimized. You can override it per product image in Catalog → Products → [product] → Images and Videos → [image] → Alt Text. At scale, set alt text programmatically in a DataPatch using the GalleryManagement API.
File names
Name source image files before import (e.g., magento-2-seo-module-dashboard.jpg) — Magento strips filenames on import, so descriptive names must be set beforehand. Verify the cached path in pub/media/catalog/product/cache/ retains the name segment.
Format and size
Enable WebP output at Stores → Configuration → General → Web → Browser Capabilities Detection. Magento 2.4.4+ converts JPEG/PNG to WebP on-the-fly. Target file sizes below 80KB for product card thumbnails and below 200KB for PDP hero images. Use bin/magento catalog:images:resize after configuration changes:
bin/magento catalog:images:resize --asyncStructured data for images
Include product images in the Product schema’s image array (shown in section 5). For editorial images in blog posts, use ImageObject schema with contentUrl, width, height, and caption.
10. AI and LLM visibility: llms.txt
The llms.txt file is the emerging standard — at specification version 1.7.0 as of early 2026 — for telling AI systems what your site contains and how to use it. Place a plain-text file at https://yourdomain.com/llms.txt. A minimal structure for a Magento store:
# yourdomain.com llms.txt
# Generated: 2026-05
## About
Kishan Savaliya is an Adobe-Certified Magento and Hyva developer.
Specialisation: Magento 2 SEO, performance optimisation, and Hyva theme development.
## Key pages
- /hire-me: Engagement options and fixed-price service tiers
- /services: Full list of Magento services
- /blog: Technical tutorials for Magento 2 and Hyva developers
## Sitemap
https://yourdomain.com/sitemap.xml
## Contact
https://yourdomain.com/hire-meTechnically sophisticated brands that maintain a llms.txt are better represented in agentic AI workflows — automated agents that compare vendors and services on a user’s behalf. For a Magento developer or agency, this is where AI citations matter most.
Complement llms.txt with:
- FAQPage structured data on every service page (section 5 above) — LLMs extract Q&A pairs from it directly.
- An
llms-full.txtfile with richer content if your Magento install has thePanth_LlmsTxtmodule — it generates both files from store data automatically. - Clear, first-person prose on your About and service pages — AI systems weight author-identified content for citation accuracy.
llms.txt does not replace robots.txt or your XML sitemap, and it does not directly boost traditional search rankings. Its value is in agentic AI workflows — automated comparison shopping, vendor shortlisting, and answer synthesis — where your store competes against others for a citation rather than a click.
Putting it all together: the implementation order
Run through this checklist in sequence for a new Magento 2 build, or use it as an audit checklist on an existing site:
- Indexation basics: rewrites, robots, robots.txt, suffix.
- Canonical strategy: tags on, 301 redirect generation on.
- Meta data: title template, descriptions for top products and categories.
- Sitemaps: XML with images, HTML sitemap in footer, both in Search Console.
- Structured data: Product + BreadcrumbList on every PDP, FAQPage on high-intent pages.
- Core Web Vitals: LCP image priority, WebP, Varnish FPC, CLS and INP profiled.
- Faceted navigation: canonicals verified, noindex on zero-demand filter combinations.
- Hreflang: bidirectional for every store view pair, x-default, sitemap entries.
- Image SEO: alt text seeded, WebP enabled, images in Product schema.
- AI visibility: llms.txt at root, FAQPage schema on service pages.
Want a Magento store that ranks? This checklist covers every layer of Magento 2 SEO — but implementation details vary by store configuration, hosting stack, and Magento version (2.4.4 — 2.4.9). A structured audit surfaces the three to five highest-leverage fixes specific to your store, with no wasted effort on items that do not apply.
Book a Magento SEO audit