elgentos / regenerate-catalog-urls
Regenerate Catalog URL Rewrites (products, categories, cms pages)
Installs: 1 521 697
Dependents: 1
Suggesters: 0
Security: 0
Stars: 260
Watchers: 20
Forks: 69
Open Issues: 0
Type:magento2-module
Requires
- php: ~7.4|~8.0|~8.1
- magento/framework: ^102.0|^103.0
- magento/module-catalog-url-rewrite: ^100.3|^100.4
- magento/module-url-rewrite: ^101.1|^102.0
Requires (Dev)
- mediact/coding-standard-magento2: @stable
- mediact/testing-suite: ^2.9
Suggests
- baldwin/magento2-module-url-data-integrity-checker: Magento 2 module which can find potential url related problems in your catalog data
- fisheye/module-url-rewrite-optimiser: A Magento module that stops URL rewrites with category paths being generated for products when 'Use Categories Path for Product URLs' setting is disabled in config.
Replaces
README
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.
--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 = 4)
.
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.