PrestaShop 9 product URLs: why your old category/product links 404 (and how to fix it)

Summary: PrestaShop 9 introduces a new “category-less” product URL format. That sounds nice and clean on paper, but out of the box PS9 does not redirect old /category/product URLs to the new bare product URLs. If you upgrade or migrate and keep using the default PS9 routing, all existing external links that include the category segment will return a 404 until you either restore a category-aware route or build the redirects yourself.

Follow along on PrestaShop github.


What changed in PrestaShop 9 product URLs

In PrestaShop 8.x and earlier, the default product route usually looked something like this:

/protocol-gateways/66-mirius.html
/category-name/{id}-{rewrite}.html

The important part is that the product URL included the category (typically the default category of the product). That meant most external links, SEO links, and internal links were of the form:

https://example.com/protocol-gateways/66-mirius.html

In PrestaShop 9, the default route is changed to a category-less pattern:

/66-mirius.html
/{id}-{rewrite}.html

On a fresh PS9 install, clicking a product from a category page will typically land you on a URL like:

https://prestashop901.iccdesigns.dev/66-mirius.html

That is the new, official product URL. The category segment is gone.


The 404 problem: external links that still contain the category

Here is where things get dangerous for early PS9 adopters.

If you upgraded or migrated from a shop where products lived under /category/product URLs, you will have a huge amount of existing links out there:

  • Google’s indexed URLs
  • Backlinks from other sites
  • Saved customer bookmarks
  • Emails, catalogs, PDFs, etc. that use the old /category/product format

Under PS9’s default routing, the “old style” link:

https://prestashop901.iccdesigns.dev/protocol-gateways/66-mirius.html

will simply return a 404. There is no automatic 301 redirect to:

https://prestashop901.iccdesigns.dev/66-mirius.html

No shadow routes, no rewrite rules, nothing. Out of the box, PS9 just doesn’t recognize the extra category segment in front of the product.

For anyone upgrading from 1.6 / 1.7 / 8.x into 9.0.x and accepting the new product route as-is, this means:

  • All old /category/product URLs will 404 until you handle redirects yourself.
  • Google will see a wave of “Not found” responses for URLs it already has indexed.
  • Any external links you don’t control will send users into 404 pages on day one.

The half-finished UX: breadcrumb keeps the category but the URL drops it

There is another oddity that shows this feature is only half done.

On a PS9 category (product list) page, when you click a product:

  • The URL you land on is the new bare product URL, e.g. /66-mirius.html (no category).
  • The breadcrumb still shows the category path, e.g. Home > Protocol Gateways > Mirius.

In other words, PS9 now strips the category from the product URL, but the breadcrumb still pretends that the category is part of the “path” to that product. There is no canonical /category/product URL anymore, it’s just a visual breadcrumb.

That mismatch matters because:

  • From the user’s perspective, the breadcrumb suggests a hierarchical URL structure that no longer exists.
  • If someone copies the breadcrumb idea into documentation or marketing, they’ll often assume a /category/product pattern that PS9 doesn’t support.
  • The new system does not generate any rewrites for those missing category segments—the breadcrumb and the router are simply out of sync.

So at the moment this “simpler URLs” feature feels unfinished: the view layer still thinks in terms of categories, but the HTTP layer has moved on and does not backfill the missing paths.


Options for PS9 adopters: how to avoid the 404 mess

1. Restore a category-aware product route

If your SEO and external link structure already relies on category paths, you can choose to keep them. For example, in SEO & URLs → Routes you can define the product route as:

{category:/}{id}{-:id_product_attribute}-{rewrite}.html

That will give you URLs like:

/protocol-gateways/66-mirius.html

Again, with PS9 this is no longer the default, but you can bring it back. You then need to test:

  • Product links from category pages
  • Canonical tags
  • Sitemap generation
  • Multistore / language variants if you use them

2. Keep the new bare URLs and build redirects

If you like the new shorter URLs, you can stay with them—just don’t leave the old URLs to die.

Typical approaches:

  • Use a redirect / SEO module that can automatically turn /category/product into /product and generate proper 301s.
  • Handle rewrites at the web server level (.htaccess or Nginx config) to strip the first segment when it matches a known category and map the rest to the product.
  • At minimum, map your top traffic products and categories so your most valuable links don’t go to 404.

The key point is: PS9 itself does not create these rewrites. If you stay with the default product route, you must explicitly take ownership of the redirect strategy.


Checklist before upgrading to PS9

  • On a staging copy, confirm which product route you want to use:
    • Category-based (old style)
    • Category-less (new PS9 default)
  • Crawl your existing shop to capture current /category/product URLs.
  • Decide whether you will:
    • Restore a category-aware route, or
    • Keep the new route and build redirects.
  • Implement and test the routing / redirects on staging:
    • Click products from category pages and confirm expected URL.
    • Test old URLs directly in the browser.
    • Verify breadcrumbs vs actual URL structure.
  • After go-live, monitor:
    • 404 logs (server and PrestaShop)
    • Google Search Console “Not found” reports

Final thoughts: PS9 is not “drop-in” safe for URLs

PrestaShop 9’s cleaner product URLs look good in theory, but the implementation stops halfway: the router changes, external links don’t get redirects, and the breadcrumb keeps promising a category path that no longer exists. If you upgrade and accept the defaults, do not assume PS9 will magically handle your legacy URLs.

If you’re already on PS9 or planning a migration and you’re not sure which route makes sense for your catalog and SEO, this is exactly the kind of thing we work on every day at PrestaHeroes: performance, routing, and “oh wow, why are my URLs 404’ing?” clean-up jobs.

TL;DR for other PS9 adopters: if your existing product URLs include the category, PS9 will happily 404 those out of the box unless you restore a category-aware route or build the rewrites yourself. Don’t go live without testing this.