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_type requires 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 main branch, 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:regenerate that 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_path values 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
Changelog — URL Regenerator — Deployment & Operations — Extensions | qoliber Docs