📊 State of Magento 2025

The Home for Magento 2 Excellence

Quality-tested Magento 2 modules. Explore. Evaluate. Elevate. #magento2

606 Modules
385 Ready
218 Need Help
🏆 Leaderboard
Top 10% by Downloads Stable v0.4.7

Elgento’s Regenerate Catalog URLs

elgentos/regenerate-catalog-urls

Set of console commands to regenerate catalog URLs.

2,385,529
Downloads
11x above avg
282
GitHub Stars
7x above avg
5mo ago
Last Release
3
Open Issues
Build Passing
Ready to install

Build Tests

Composer Install
DI Compile
Templates

Code Quality

Coding Standard
L0 PHPStan

Tested on Magento 2.4.8-p3

Recent Test History

Each release is tested against the latest Magento version at that time.

v0.4.7 on Magento 2.4.8-p3
Dec 15, 2025
v0.4.7 on Magento 2.4.8-p2
Aug 14, 2025
v0.4.6 on Magento 2.4.8
Aug 11, 2025
v0.4.5 on Magento 2.4.8
May 17, 2025
v0.4.5 on Magento 2.4.7-p4
Feb 15, 2025
v0.4.5 on Magento 2.4.7-p3
Oct 15, 2024

+9 older tests

Share This Module's Status

Elgento’s Regenerate Catalog URLs Magento compatibility status badge

README

Loaded from GitHub

Elgentos Regenerate Catalog URLs

What does it do

This extension adds console commands to be able to regenerate;

  • a product rewrite URL based on its url path;
  • a category rewrite URL based on its url path;
  • a CMS page rewrite URL based on its url path;
  • a category URL path based on its URL key and its parent categories.

Install

Using Composer;

composer require elgentos/regenerate-catalog-urls
php bin/magento setup:upgrade

Or download and copy the src directory into app/code/Elgentos/RegenerateCatalogUrls and run php bin/magento setup:upgrade.

How to use

Usage:
 regenerate:product:url [-s|--store="..."] [pids1] ... [pidsN]
 regenerate:category:url [-s]--store="..."] [-r]--root="..."] [cids1] ... [cidsN]
 regenerate:category:path [-s]--store="..."] [-r]--root="..."] [cids1] ... [cidsN]
 regenerate:cms-page:url [-s]--store="..."] [pids1] ... [pidsN]

Arguments:
 pids                  Products (or Pages) to regenerate
 cids                  Categories to regenerate

Options:
 --store (-s)          Use a specific store (store Id, store code or 'all')
 --root (-r)           Regenerate for root category and its children, ignoring cids. 
 --verbose (-v)        Verbose mode to display the errors. Eg: duplicated product urls
 --help (-h)           Display this help message

Eg:

# Regenerate url for all products and the global store
php bin/magento regenerate:product:url

# Regenerate url for products with id (1, 2, 3, 4) for store 1
php bin/magento regenerate:product:url -s1 1 2 3 4

# Regenerate url for all CMS pages
php bin/magento regenerate:cms-page:url -s all

# Regenerate url for root category 4 and its children for store 1
php bin/magento regenerate:category:url -s1 -r4

FAQ

What's the difference between url_key and url_path?

url_key contains the key, like joust-duffle-bag for the product "Joust Duffle Bag". The url_path is generated by taking the url_key and adding the suffix (which for products is stored in catalog/seo/product_url_suffix and defaults to .html). So the url_path would by default become joust-duffle-bag.html. It also adds the category slugs of the parent categories so the url_path might become bags/joust-duffle-bag.html. However, the use of url_path has been deprecated since early Magento 2.1 versions (see here). If you are running on a recent Magento 2 version, you can safely delete those values by running DELETE FROM catalog_product_entity_varchar WHERE attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'url_path' AND entity_type_id = (SELECT entity_type_id FROM eav_entity_type WHERE entity_type_code = 'catalog_product')).

URL paths are still used in categories though, so don't remove those.

Why am I getting a 'Duplicated url' warning when running the command?

If you see this error, you have duplicate url_key values (within a store) in catalog_product_entity_varchar. You can use this extension to check those (and you need to fix them manually): baldwin/magento2-module-url-data-integrity-checker.

This content is fetched directly from the module's GitHub repository. We are not the authors of this content and take no responsibility for its accuracy, completeness, or any consequences arising from its use.