URL Regenerator
Bring every product, category and CMS page URL back in one command after an import or migration, with old links still working and nothing half done if something is wrong.
Latest version: 1.1.0 — changelog

Who it's for
- Stores that write catalog data straight into the database, such as imports, migrations and integrations. Magento only creates a URL rewrite when an entity is saved, so those products and categories have no URL until something builds one.
- Stores with several store views or websites. Each store view gets URLs from its own URL keys, its own URL suffix and its own root category, and a product only gets URLs in the websites it belongs to.
- Stores that put category paths in product URLs. Every product also gets a URL under each of its categories.
- Teams that keep hand-made rewrites and redirects. A run leaves hand-made rewrites alone and points kept redirects at the entity's new URL. The only redirects it removes are those of an entity with no URL left in that store view.
Why it matters
- Missing URLs are lost pages. A product without a URL rewrite answers with a 404 to shoppers and search engines alike. One run brings them back.
- Old links keep working. When a URL key changed, the old URL becomes a 301 redirect to the new one, so links and search results keep landing on the page.
- All or nothing. Each entity type runs in one transaction. A run either writes a correct URL for everything or changes nothing and tells you exactly what stopped it, so a bad URL key cannot take a page offline.
- No mass re-save. The command reads URL keys straight from the catalog and writes in batches, with no query per product or category.
See it in action
A renamed product keeps its traffic. An import changes a URL key and you run the command. crown-summit-backpack.html now answers with a 301 to crown-summit-backpack-renamed.html.
A URL key for one store view. A product has its own URL key on a second store view and you run the command. That store view opens the product at its own URL, and the other store views keep theirs.

Category paths in product URLs. With Generate "category/product" URL Rewrites set to Yes, gear/bags/joust-duffle-bag.html opens Joust Duffle Bag from the Bags category, and its plain URL keeps working.

Two products want one URL. The command changes nothing, ends with an error and names the URL and both products, so neither product silently loses its page.
Features
| Feature | Benefit |
|---|---|
| Regenerate URLs | Rebuild the URLs of every product, category and CMS page, or of one entity type, with a single command. |
| Store views and websites | Give each store view the URLs it should have, from its own URL keys, suffix, website and root category. |
| Category URLs of products | Let shoppers reach a product under every category it belongs to, without losing its plain URL. |
| Redirects and hand-made rewrites | Keep old links alive with 301 redirects, and keep the rewrites you made by hand. |
| When a run stops on a conflict | See every URL conflict at once, with nothing changed, instead of finding broken pages later. |
| Running on a live store | Plan a run with clear guidance on backups, quiet windows and recovering from an interrupted run. |
- Runs inside your store. One console command reading and writing your own database: no external service, nothing leaves the server.
Competing solutions
The right-hand column describes common practice on extension marketplaces, not any one vendor.
| Qoliber | Typical marketplace extension | |
|---|---|---|
| GitLab access | Full access to the module's GitLab repository — source, history, issues and merge requests | Varies by vendor |
| Packagist installation | Installed and updated with Composer from our private Packagist (qoliber.repo.packagist.com) | Varies by vendor |
| Slack access to the development team | A shared Slack channel with the developers who build and maintain the module | Usually ticket-based |
| Integration tests | 111 Magento integration tests (14 classes), run before every release | Not typically published |
| E2E Playwright tests | 13 Playwright end-to-end tests on Luma (6 spec files), run before every release | Not typically published |
| Documentation | Full docs portal: installation, configuration, usage, troubleshooting and developer guide | Varies by vendor |
| PHP / Magento range | PHP 8.1 to 8.5, Magento Open Source and Mage-OS on magento/framework 103 | Varies by vendor |
Good to know
- Choose a quiet window. A run holds locks on the URL rewrite table until it commits. Catalog saves during a run can wait, fail, or leave a product or category on an older URL until the next run.
- A conflict stops the run. Nothing of that entity type changes until you correct what the run lists. That protects your pages, but it means a catalog with conflicting URL keys needs fixing first.
- A command, not a screen. There is no admin page: you run it on the server, and it does not flush caches for you.
- Replaces
qoliber/url-regeneration. The two packages register the same command, so Composer refuses to install both. Install covers the move.
Supported versions: PHP 8.1 to 8.5, Magento Open Source and Mage-OS with magento/framework 103. Tested on Magento Open Source 2.4.6-p15 (PHP 8.1, 8.2), 2.4.7-p10 (PHP 8.2, 8.3), 2.4.8-p5 (PHP 8.3, 8.4) and 2.4.9 (PHP 8.5) on MariaDB, on MySQL 8.4 from 2.4.8, and on Mage-OS 3.5.0.
Install the module · Settings it reads · Partnership program