3 min readNov 1, 2026by jakub
Changelog
Current version: 1.1.0
1.1.0 — 2026-11-01
Added
- A URL a run stops generating becomes a 301 redirect to the new URL in store views with "Create Permanent Redirect for URLs if URL Key Changed" on, as it does when a product or category is saved. The generated URL of an entity that no longer gets one is removed, and CMS pages keep no history, as in core
Changed
- A run now writes a correct URL for every eligible entity or changes nothing and lists every problem: two entities wanting one URL, a URL held by a hand-made rewrite or another entity's redirect, an entity without a URL key, or a URL over 255 characters. What counts as the same URL is decided by the database's own collation
- Two CMS pages with one identifier in the same assignment are refused; a store view's own page still replaces an All Store Views page there
--entity_typerequires a value: without one, or with an empty one, the command stops instead of regenerating everything- A redirect of an entity that no longer has a URL in a store view is removed, as Magento removes it when the entity stops being visible, leaves a website or is deleted. Hand-made rewrites that are not redirects stay
Fixed
- A generated URL no longer silently replaces whatever held it, an over-long URL is no longer cut off, and an empty URL key no longer produces a URL of just the suffix
- A store view's URL key alone is enough for a URL in that store view, and an empty store-view key falls back to the All Store Views key
- composer.json no longer points the package's source at the
mainbranch, so a release resolves to its own tag
Security
- Product and category URL keys are formatted the way Magento formats them before they become URLs, with each store view's settings, and a URL that cannot be a path on the shop (an absolute URL, markup, control characters) is refused. In 1.0.0 a value stored in
url_key, for example by a forged mass attribute update, was written as a URL as it stood, and Magento could redirect a visitor off the shop from it - Text from the database is made harmless before it is printed to the console
Notes
- A run that finished on 1.0.0 can stop on 1.1.0 and list problems instead. Correct what it lists and run it again: nothing changes until a run succeeds
- Run the command in a quiet window: catalog saves during a run can wait, fail, stay on an older URL until the next run, or slow the run down badly. The README covers backups, conflicts and recovery
1.0.0 — 2026-10-30
Added
- Console command
bin/magento qoliber:url:regeneratethat rebuilds the URL rewrites of CMS pages, categories and products in every store view, in that order, or of one entity type with--entity_type=cms|category|product, and reports how many URL rewrites each got - Product URLs as Magento builds them: products visible individually, in the store views of their websites, with the store view's own URL key and visibility over the All Store Views values
- Category URLs from the URL keys along the category path, below each store view's root category, and the category
url_pathvalues rebuilt for Magento's own saves - While "Generate category/product URL Rewrites" is Yes, product URLs under each of the product's categories and their anchor parents, linked so storefront product links find them
- CMS page URLs in every store view a page is assigned to
- Hand-made rewrites and Magento's redirect history are kept, and every kept redirect is pointed at the entity's new URL
- Each entity type runs in one transaction: a run that fails changes nothing
- Rewrites are read and written in batches of 1,000, with no query per product or category
Notes
- Replaces
qoliber/url-regeneration, which registers the same command; Composer refuses to install both