SEO Toolkit
Find the SEO problems of your whole store and fix them one by one, in bulk with a preview, automatically or with AI, with every change recorded and revertible.
Check it fits your store
Questions about compatibility? Contact us.
Details
SEO Toolkit checks your products, categories, CMS pages and store settings and helps you fix what it finds (Marketing › SEO Toolkit).
Audit and fixes: a scheduled scan with a heuristic SEO score (not a Google metric) per area, issues by severity and one-click fixes with preview, bulk fixes, Autopilot for safe fixes after each scan, and a change history where every value the toolkit changed can be reverted. Meta templates fill missing meta titles and descriptions from product and category data.
AI with AI Content (included): AI texts such as meta titles and descriptions, keyword suggestions and product images in the Product Optimizer and in bulk, with a review queue, using Claude or ChatGPT through AI Content and its monthly budget. Everything else works without an AI provider.
SEO assistant in the admin forms: product, category and CMS page forms get a score, a desktop and mobile search result preview, length bars for title and description, focus keyword checks and Generate with AI buttons. URL key changes are checked first by URL Regenerator (included), so a key never takes the URL of another page.
Storefront SEO layer: one canonical URL per page, robots meta tags per page type with URL rules and a robots.txt editor, hreflang links between language store views, Open Graph and Twitter card tags, and JSON-LD structured data: Product or ProductGroup with offers, return policy, shipping, ratings and reviews (Magento's built-in microdata is replaced), BreadcrumbList on product and category pages, Organization and WebSite on the home page. Product types that cannot be bought in the store can be listed so their Product has no offers.
Sitemaps and indexing: XML sitemap profiles per store view (parts per type, images, hreflang, exclusions, schedule, validation), additional URLs for custom pages, Sitemap lines in robots.txt, IndexNow notifications and an HTML sitemap page.
Redirects and links: a 404 log with suggestions, single and bulk redirects, redirects for deleted and disabled products and categories, chain and loop detection, and cross links that turn keywords in descriptions and CMS content into underlined internal links with per-link and per-page limits.
Page Analyzer and SEO toolbar: analyze any URL of your store, and open a page with a signed link to see its score, problems, search result preview, headings and structured data in a toolbar on the storefront (only for admin users with the link).
Luma and Hyvä: one package for Luma, Luma-based and Hyvä themes (Hyvä Theme 1.3+, Hyva/default or a child theme). On Hyvä the head output is the same as on Luma without duplicates (Hyvä's own breadcrumb structured data is replaced on product and category pages), the HTML sitemap has its own plain-CSS styling in the theme colours, and the SEO toolbar works unchanged. No Tailwind rebuild is needed.
Managed in Marketing › SEO Toolkit (Dashboard, Issues & Fixes, Product Optimizer, Meta Templates, Indexing & Robots, Page Analyzer, XML Sitemaps, Redirects & 404, Cross Links, Change History), in the SEO sections of the product, category and CMS page forms and in Stores › Configuration › Techimprovement › SEO Toolkit; command line tools for scans, templates, AI and sitemaps.
Requirements
- Magento Open Source / Adobe Commerce 2.4.9 (magento/framework 103.0.9 or later, required by URL Regenerator 1.1); PHP 8.3 – 8.5 with ext-dom, ext-json and ext-zlib
- Themes: Luma, Luma-based and Hyvä (Hyvä Theme 1.3+, Hyva/default or a child theme; no Tailwind rebuild needed)
- Magento cron running (scheduled scan, Autopilot, AI queue, sitemaps, IndexNow, cleanup)
- For AI features only: an API key for Claude (Anthropic) or ChatGPT (OpenAI) in AI Content; for IndexNow only: outgoing HTTPS to api.indexnow.org
Change Log
Version 1.4.0 – November 1, 2026
New
- Rich snippets:
- Additional Product Properties maps attributes to schema.org product properties (color=color, material=material...); unknown names become additionalProperty name/value pairs (Product and ProductGroup).
- Product Description Source (Automatic, Description, Short Description, Meta Description, None).
- Breadcrumb Path in Rich Snippets: full path or only the deepest category.
- Organization Description and Additional Contact Points (contact type, phone, email per line).
- Product List on Category Pages: an ItemList of the products on the current category page, read from the collection the page already loaded (no extra queries), positions continue across pages (Block\RichData\CategoryItemList).
- Local Business Rich Snippets on the home page: business type, price range, opening hours (Mo-Fr 09:00-18:00 lines), coordinates, address and contact from the store information (Model\RichData\LocalBusinessBuilder).
- Open Graph and Twitter Cards: Page Types with Social Tags, and product and category title and description attributes for the share tags (option labels for select attributes).
- HTML sitemap: title and meta description settings, a Filter Field that filters the links while typing, Excluded Categories (with their subcategories), Hide Out-of-Stock Products and Additional Links with their own heading.
- Redirects and 404:
- Redirect Home Page Duplicates (on by default): /index.php, /cms, /cms/index, /cms/index/index and the URL key of the home CMS page redirect (301) to the base URL (Plugin\Redirect\HomeRedirectPlugin).
- Search Engine Friendly Search URLs: /search/ instead of /catalogsearch/result/?q=, with a 301 from the old URLs and a configurable Search URL Path (Controller\SearchRouter, Model\Search\SearchUrl).
- Remove Redirects of Deleted Items After (Days): redirects created for deleted products and categories get an [until YYYY-MM-DD] mark and are deleted by the nightly cleanup after that date (Model\Redirect\ExpiredRedirects).
- SEO toolbar: Show Toolbar Only for IP Addresses (addresses and IPv4/IPv6 CIDR ranges).
- llms.txt for AI assistants: a Markdown overview of each store view (llmstxt.org format) with company name, description, guidelines and lists of CMS pages, categories and products, served at /llms.txt (text/plain, one hour public cache, 404 when off). Scheduled generation (cron expression setting), Generate Now, CLI techimprovement:seo:llms, and an llms.txt card in the XML Sitemaps tab with status per store view and preview. New product and category attribute Include in llms.txt (store view scope).
- Google Indexing API: service account key upload (validated, stored encrypted), automatic "updated" and "deleted" notifications for saved, disabled and deleted products, categories and CMS pages (trigger attributes, a delay that merges later edits, daily limit counted in Pacific Time), sending every 10 minutes with retries and quota and error handling, log cleanup, CLI techimprovement:seo:google-index, and a Google Indexing API card with quota, queue, latest submissions, Submit URL, Send queued now and Test connection. Google officially supports the API only for job posting and livestream pages.
- Table ti_seo_google_index_queue; cron jobs ti_seo_llms, ti_seo_google_index and ti_seo_google_index_cleanup.
- Image Optimizer (Marketing › SEO Toolkit › Image Optimizer): WebP and AVIF copies with quality settings, mobile and tablet sizes, compression of originals (lossless with jpegoptim, optipng and gifsicle, or JPEG re-encoding) with backups and Restore originals; folder patterns with their own copies and compression (four default patterns); a queue filled by scans, WYSIWYG uploads, product saves and storefront views, optimized by cron every 5 minutes, the admin (Optimize now) and techimprovement:seo:images (parallel workers with -j); storefront elements with AVIF, WebP and optional mobile and tablet sources per page type, with an ignore list, lazy-load attributes and protection for script-bound images, stored in the full page cache; picture-sync.js shows images that colour swatches or galleries change. Tables ti_seo_image_pattern and ti_seo_image_queue, cron jobs ti_seo_image_optimizer and ti_seo_image_scan, ACL resource Manage Image Optimizer (::images).
- Dependencies: magento/module-search and magento/module-catalog-search (search URLs), AI Content ^1.4 (AI Prompts).
Upgrade notes
- Run bin/magento setup:upgrade (tables ti_seo_google_index_queue, ti_seo_image_pattern, ti_seo_image_queue, the attribute Include in llms.txt and the default image folder patterns), setup:di:compile, setup:static-content:deploy (new admin and storefront scripts) and cache:flush.
- Composer updates AI Content to 1.4. With ZIP files, install AI Content 1.4 first.
- New features are off until you turn them on, except Redirect Home Page Duplicates (on): /index.php, /cms and the URL key of the home CMS page now redirect to the home page.
- Give admin roles Manage Image Optimizer where needed.
Earlier versions (4)
Version 1.3.0 – November 1, 2026
New
- Do Not Log These URLs (Redirects and 404, store view scope): one path per line, * wildcard, /folder/* also matches /folder, full URLs reduced to their path, # comments.
- Clear log › Scanner probes and bots (the default choice): deletes the scanner probes, the Do Not Log These URLs paths, entries of bots and entries whose last request came from a scanner; redirected entries are kept (redirects.clear with status: probes).
- The nightly cleanup (ti_seo_cleanup) deletes the scanner probes and Do Not Log These URLs paths already in the log (open and ignored entries), so the log of an existing store is cleaned after the update.
Improved
- The 404 log no longer records vulnerability scanner probes, which made up most entries of live stores: dot files and folders (/.env, /.git/config), server scripts, configuration, backup, log, key and archive files (/wp-login.php, /shell.php, /config.yml, /database.sql, /laravel.log, also as a path segment such as /x.php/y), paths of other applications (wp-admin, wp-content, wp-includes, wp-json, xmlrpc, phpmyadmin, cgi-bin, magento_version...) and endpoints of other frameworks (livewire/update, actuator/env, vendor/phpunit...), framework paths starting with _ (/_next/, /_profiler/), the WordPress API query ?rest_route=, Magento's internal noroute path and form actions requested without the form (/customer/account/loginPost/..., .../uenc//...). The store's own product and category URL suffixes are never treated as probes (Model\Redirect\PathHelper::isProbe(), Model\Redirect\NotFoundFilter).
- Bot detection also recognises scanners that pass for browsers: a user agent that names no browser engine (Gecko, Trident, MSIE or Presto, which every browser names), such as a cut Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, a bare Mozilla/5.0 or a misspelled Mozlila/5.0; scanner names (scanner, fasthttp, zgrab, nuclei, Palo Alto Networks, extractor...); and a Referer that is the missing page itself. These are logged only with Log Requests from Bots.
- Search Instead of 404 sends only visitors and search engines to the search. Scanner probes, scanners and other bots get the 404 page, so their words ("wordpress", "env", "phpinfo") no longer end up in Search Terms.
Version 1.2.0 – October 30, 2026
New
- Hyvä theme support (Hyvä Theme 1.3+, Hyva/default or a child theme), with no change on Luma. Every storefront output was checked on a Hyvä store view: meta title, description and robots, canonical, hreflang, Open Graph and Twitter tags and the JSON-LD are rendered in head.additional like on Luma, with no duplicates of Hyvä's own output; the built-in product microdata of the Hyvä templates is removed like on Luma when the JSON-LD Product replaces it; the SEO toolbar of signed admin links works unchanged (it has its own scoped CSS and plain script).
- Hyvä: the breadcrumbs templates of the Hyvä default theme output their own BreadcrumbList JSON-LD. On product and category pages, where the toolkit outputs one, hyva_catalog_product_view.xml and hyva_catalog_category_view.xml set the skip_ld_json_schema flag of the breadcrumbs block (Model\RichData\ThemeBreadcrumbs), so a page has one BreadcrumbList. With Breadcrumbs rich data or the toolkit off, the theme's own BreadcrumbList stays.
- Hyvä: the HTML sitemap page is styled by sitemap-hyva.css (plain CSS loaded by hyva_ti_seo_sitemap_index.xml instead of sitemap.css, no Tailwind rebuild): category cards, page columns, A–Z letters and section links in the theme's colours, restyled with the --ti-seo-sitemap-* custom properties.
- Product Types without Offers (Rich Snippets, store view scope, default empty): product types that cannot be bought in the store (for example a type for apps sold elsewhere) get a JSON-LD Product without offers, so no price and no "OutOfStock" availability are reported for them; reviews and ratings stay. Their Open Graph price tags are left out, the built-in microdata is still replaced, the scan no longer reports a missing price for them, and the Page Analyzer accepts a Product without offers (a warning when it has no reviews or rating either).
- XML sitemaps: Additional URLs store setting (Sitemaps and IndexNow, one store-relative path per line such as /faq, validated on save) for pages of custom routes. The URLs are added to the additional part of every sitemap profile of the store view, with the profile's priority and change frequency of Additional URLs, also when the profile's own Additional URLs are off. Other modules can add URLs through Model\Sitemap\Source\AdditionalUrlProviderInterface items of the additionalUrlProviders argument of Model\Sitemap\Generator in di.xml.
Improved
- Cross links: no keyword is linked inside the name of the page's own product or category or the title of its CMS page (for example "Checkout" inside "One Step Checkout" on that product's page). Text inside headings (h1–h6) stays unlinked as before.
- Cross links are underlined (text-decoration: underline, a small in the head of product, category and CMS pages when the store view has active cross links), on Luma and Hyvä, so links in running text are recognisable without colour (Lighthouse "link-in-text-block"). Restyle with --ti-seo-crosslink-decoration and --ti-seo-crosslink-offset.
Version 1.1.1 – October 29, 2026
Improved
- New layout of the section: the fields on the left with their labels above them, and the SEO assistant on the right, where it follows the page while you scroll (on narrower screens it stays above the fields).
- SEO assistant: score ring with Good / Needs work / Poor and the number of things to improve, search result preview with a Desktop/Mobile switch, length bars for the meta title and description (characters and pixel width), problems listed first with the passed checks folded below them, and the focus keyword placements as chips.
- Focus Keyword is the first field of the category section, as on products.
- "Generate with AI" buttons of AI Content sit right under their fields as compact buttons.
Fixed
- The Search Engine Optimization section of products, categories and CMS pages was unstyled in production mode: the preview loaded its stylesheet by file name, and with CSS minification only the .min.css file is deployed. The stylesheet now comes with the page layout (catalog_product_form, catalog_category_edit, catalog_category_add, cms_page_edit), which picks the minified file; forms shown elsewhere load the right one themselves.
Version 1.1.0 – October 28, 2026
Improved
- Wording follows Google's Search Central guidance: the score is called "SEO score (heuristic, not a Google metric)" on the dashboard, in the SEO toolbar, the Product Optimizer, the SEO Optimizer section and the SEO preview of the edit forms; title and description lengths are described as common practice, not as Google limits; meta keywords are labelled "(not used by Google)".
- Thin content is a suggestion that does not count in the score, because Google has no minimum word count; the settings are now called Thin Content Hint: Product Words, Category Words and CMS Page Words. In the Product Optimizer a short text keeps its points and is shown as a hint.
- The focus keyword analysis has no density target any more. A focus keyword that makes up more than 3% of a text of at least 150 words gets an informational hint ("The focus keyword appears very often; write naturally for readers."); no points are taken off.
- AI rules: no invented reviews, testimonials, authors, awards or personal experience; no word count targets; category texts help shoppers choose between the products of the category.
- Reverting a URL key change in Change History is checked by URL Regenerator the same way; on a conflict the change is skipped with the reason.
- Autopilot never fixes Outdated year, Thin content, Main heading missing, Images in the text without alt text, URL key too long and URL key not descriptive; these need your decision. It fixes Duplicate description only for products and URL key not clean only for products and categories, never CMS pages.
Fixed
- Fix methods Generate URL key with AI and Write image alt texts with AI: always reviewed in the Product Optimizer, never used by Autopilot, and they need AI Generation.
- Generate with AI also writes the content heading for Main heading missing and new meta titles and descriptions for Outdated year.
- Generate URL key also fixes URL key too long, URL key not descriptive and CMS pages, and every key goes through the URL Regenerator check.
Other changes
- Requires Techimprovement URL Regenerator 1.1.0 or later (new dependency) and Techimprovement AI Content 1.3.0 or later.
AI
- New AI fields Image alt texts in the text (only the alt attributes of images in descriptions and CMS content change, nothing else in the text) and Content heading (CMS pages).
- URL keys and image alt texts in the text are generated only when ticked and saved only after your review: never by Autopilot, automatic generation for new products or Apply Without Review.
- Only URL keys that need work in Generate with AI: only items whose URL key has a problem get a new one.
Audit
- Five new checks, 51 issue types in all: URL key not descriptive, Images in the text without alt text, Generic link text, Broken links in the text (with a suggested target) and Outdated year (meta titles, meta descriptions, category names and CMS page titles; product names are not checked, and a year that is also in the name, such as a model year, is not counted).
- URL key checks now cover CMS pages, and Duplicate description now covers categories and CMS pages.
- Audit settings Check URL Keys Are Descriptive, Check Images in the Text, Check Link Texts with Generic Link Texts, Check Links in the Text with Paths Served by Other Modules, and Check for Outdated Years (all on). Pages of the Techimprovement FAQ, Free Products and Form Builder extensions are recognized by the broken link check automatically.
- Issue details list the links concerned (broken links with their suggested target, generic link texts), the images in the text without alt text and why a URL key is not descriptive.
SEO Optimizer in the category and CMS page forms
- New collapsible SEO Optimizer section in Catalog › Categories and Content › Pages: the SEO score of the saved page with the problems to improve, View page and a link to Google's Rich Results Test. The section opens by itself when the score is below 80 (Good). Root categories (such as Default Category) show a note instead.
- With AI Generation and Enable AI Features: AI texts for the meta title, meta description, description (CMS pages: content), content heading (CMS pages), URL key and image alt texts in the text, with focus keyword and instructions. Every value is reviewed first (editable, length hints, search result preview, URL key check) and saved with Save Selected into the change history. Texts built with Page Builder are not rewritten. Generate asks first when an AI result for the page is waiting for review; Stop waiting stops waiting at once while the task keeps running and its result waits for review.
- Content › Pages › Actions › Optimize SEO with AI: queues AI texts for the selected CMS pages (at most 5,000 per run; with more selected, a warning says that only the first 5,000 are queued) with the fields, store view, Only fill empty fields, Only URL keys that need work and instructions; the results wait in the AI review queue of the Product Optimizer.
Upgrade notes
- composer update installs Techimprovement URL Regenerator. Enable it with bin/magento module:enable Techimprovement_UrlRegenerator, then run setup:upgrade, setup:di:compile and setup:static-content:deploy. URL regeneration itself stays disabled; SEO Toolkit only uses its read-only check.
- SEO Toolkit 1.1.0 requires PHP 8.3 or later. URL Regenerator 1.1.0 also requires magento/framework 103.0.9 or later (Magento 2.4.9), so that applies to SEO Toolkit 1.1.0 too.
URL keys
- AI can suggest URL keys of products, categories and CMS pages (field URL key, never ticked by default), and the Product Optimizer editor can change them, CMS page URL keys included.
- Every URL key change (Product Optimizer, SEO Optimizer section, AI review, URL key fixes, Change History revert, AI Content product panel) is checked by URL Regenerator first. A key that takes the URL of another product, category or CMS page, a custom URL rewrite or a redirect left by another page is skipped with the reason, and nothing is written. An applied change always creates a permanent (301) redirect from the old URL, whatever Create Permanent Redirect for URLs if URL Key Changed says.
- Category URL keys from the Product Optimizer, the SEO Optimizer section and AI results are saved as the default value, also from a store view; a category with its own URL key in the store view is skipped. CMS page URL keys get a 301 from the old URL in every store view of the page, and redirects that led to the old URL are pointed to the new one. The URL keys of the home page, the 404 page and the cookie notice page, and CMS URL keys that are storefront routes (such as checkout), are never changed.
- When a CMS page URL key changes (or the change is reverted), the page's own URL rewrites and redirects from Marketing › SEO & Search › URL Rewrites ("For CMS page") are kept as custom rewrites, and those that redirected to the old URL redirect to the new one.
- A random 6-character code or -disabled at the end of a key counts as URL Regenerator's ending only when the rest is the item's name (or base key): only then the audit reports it and AI suggestions and the URL key clean-up remove it, so part numbers stay. Keys you type or approve in a review are never shortened; when one looks like the name plus a random code, the message after saving adds a hint.
- Installations with one store view: product and category keys are checked with the URLs of that store view and saved as the default value; a store view that still has its own key from an earlier setup is skipped with a message. A default key that no store view uses (each has its own) is skipped because it would change no URL.
- On catalogs above URL Regenerator's limits, or when its plan of the store cannot be built, keys are checked with a simplified check of the item's own URLs, and the message says so. Catalogs with content staging cannot be checked; their URL keys are not changed.
- The AI Content product panel can save its URL key suggestion through SEO Toolkit (AI Content 1.3.0). This needs Apply Fixes, Templates and Reverts; without it the URL key stays a suggestion to copy.
Reviews
Be the first to review SEO Toolkit
Reviews are written by customers with an account. Sign in to tell others how it works on your store.

