View Issue Details

IDProjectCategoryView StatusLast Update
0007798OXID eShop (all versions)4.09. SEO, SEO URLpublic2025-06-18 09:57
Reporter[email protected] Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status confirmedResolutionopen 
Product Version6.5.4 
Summary0007798: SEO URL is not deleted when category assignment is removed
DescriptionThe SEO URL of the article with category structure remains after the category assignment is removed.

In addition, the SEO URL, which should no longer exist, remains accessible via the frontend.
Steps To Reproduce1. Create new article in admin
2. Assign a categorie to article
3. Remove categorie assignment
4. Check oxseo table with SEO URLs of article
Additional Information- es -
Even if the assignment of the category to the article is removed again, the SEO entry remains and the article can still be reached via the SEO entry.
TagsSEO
ThemeNot defined
BrowserNot defined
PHP VersionNot defined
Database VersionNot defined

Relationships

related to 0007701 acknowledgedSvenBrunk OXID ERP Interface By assigning a new main-category you get Seo-Entries without expired marking 
related to 0006948 acknowledgedbenjamin.joerger OXID eShop (all versions) SEO Url is not removed when article category changes 

Activities

QA

2025-05-26 09:30

administrator   ~0017961

OXID_Seo.jpg (187,096 bytes)   
OXID_Seo.jpg (187,096 bytes)   

SvenBrunk

2025-05-26 12:08

administrator   ~0017963

Last edited: 2025-05-26 12:10

This is a feature, not a bug. As you can see, the entry is marked as expired, which should make it no longer visible in other pages (e.g. the header of the product detail page as canonical URL). It is still accessible to all those, that have this as a bookmark or come from not yet updated search engines.
Entirely removing the SEO URLs instantly could harm page ranks and customer experience.

Apart from already planned improved SEO URL management and SEO URL cleanup tools, we might think about adding a config option here. It is dangerous though, as unexperienced shop owners might harm themselves easily by activating it.

SvenBrunk

2025-05-26 12:26

administrator   ~0017965

Expected Behavior When URLs Change (e.g. Product Changes Category):
1. A new SEO URL is generated:
When a product needs a new SEO URL due to changes such as a new assigned category, title, or language, this new URL is automatically generated and stored in the oxseo table.

2. Old SEO URL is stored in oxseohistory:
The previous URL is saved in the oxseohistory table as an outdated entry pointing to the same object (e.g. the product's OXID).

3. 301 redirect when old URL is accessed:
If someone accesses the old URL (e.g. via Google or a saved bookmark), the shop logic checks oxseohistory for a newer valid URL for that object.
-> The shop then automatically issues an HTTP 301 redirect to the new URL.

These redirects are permanent (301) and SEO-friendly.

Note: entries in the oxseo table that have oxexpired = 1 can be cleaned up on a regular basis. BUT: This means that the old URLs can be re-used by OXID. Which means that a search engine discovering that the "old" URL in its index is now re-used with new content, could see this as fraud and either remove the page from the index or reduce its page rank drastically. Be careful.

QA

2025-05-26 14:03

administrator   ~0017966

This was declared as a bug in bug entry 0004161 (Dublicate).

Even if the SEO URLs are no longer actively advertised, they should actually no longer be accessible when accessed directly after the category assignment has been removed.
But if it is intentional, a different decision was made in 0004161.

I assigned to categories to article (cat: Accessoires and Für-Ihn)
Even if I remove the "Accessories" category from the article, the SEO entry remains in the oxseo table.
OXID_Seo_1.jpg (115,876 bytes)   
OXID_Seo_1.jpg (115,876 bytes)   

SvenBrunk

2025-06-18 09:56

administrator   ~0017985

I will confirm this instead of the tickets reported earlier as it has a bigger history in the comments now. There seems to be a flaw in how oxseo with oxexpired=1 and oxseohistory are working together.