Loss of positions after updating an online shop is directly linked to errors in technical SEO. The search engine cannot match the old and new state of the site and lowers page authority. This article covers 8 reasons for dropping out of the index on the Joomla+VirtueMart stack and what to do to prevent it
Main reasons for technical SEO errors on the Joomla+VirtueMart stack
The Joomla+VirtueMart stack tends towards duplicates. One product can be accessible via different URLs. After migration the number of duplicates grows.
Google's system permanently re-evaluates everything crawlers have collected, including checking whether an old page and a new one are actually identical. Without a 301 redirect or if the canonical is inaccurate, it is not possible to match URLs.
Compared to other CMS platforms, Joomla+VirtueMart gives control over URLs in terms of forming the site structure the way you want it. But after each update you need to verify that the URL structure has not changed. More on when to stay on Joomla and VirtueMart and when to move, in the article detailed comparison of Joomla+VirtueMart with alternatives.
VirtueMart generates the /component/virtuemart/ prefix if products are not linked to a VirtueMart Default Layout menu item. Canonical bugs in template overrides appear when the template changes. Hreflang between language versions is better written by hand since it is not guaranteed to work out of the box.
8 reasons for position loss, overview table
Most of these reasons are not obvious.
| Reason | Why it breaks | How to avoid it |
|---|---|---|
| #1 Loss of the 301 redirect map | Old URLs return 404 or a mass redirect to the homepage (soft 404) | Create a table of old URL to new URL. Mass redirect to the homepage is not allowed |
| #2 VirtueMart canonical conflict | The template adds a canonical on top of the VirtueMart canonical | Check views/productdetails/view.html.php after every template change |
| #3 Hreflang break | Alternate links between language versions are lost | Check canonical plus alternate in head or sitemap after migration |
| #4 Duplicates via Routing and trailing slash | URL with and without a trailing slash. These are two different URLs | Enable Strict Routing in the System SEF plugin (Joomla 5.2 and newer) |
| #5 robots.txt without adjustments | robots.txt blocks indexation |
Check robots.txt via GSC or curl |
| #6 Schema.org Product disappears after migration | Structured markup in template files is not transferred | Check Rich Results Test after deploying a new template |
| #7 404 in VirtueMart with tree-based URLs | A deleted product returns 200 plus category content instead of 404 | Set up 410 Gone (for Apache servers: Redirect 410 /old-page) for deleted product pages |
| #8 sitemap.xml contains duplicates | Even paid components do not work correctly with VirtueMart especially with a tree-based URL structure | Generate sitemap using a CLI command via the hosting terminal |
Reason #1 No 301 redirect map
Without a 301 redirect map, migration should not be started. How to create the map:
1. Scan the site using Screaming Frog or sitemap.xml.
2. Create a table from old URL to new URL.
3. Directives in .htaccess or in the SEF extension.
4. Test URLs.
All pages with traffic must have a single redirect to the corresponding new URL.
sh404SEF, which was previously widely used for SEF URLs and redirects in Joomla, is no longer supported on modern versions. An option is switching to 4SEF plus 4SEO.
Detailed step-by-step instructions on the SEO migration checklist in the article detailed SEO migration checklist for Joomla.
Reason #2 VirtueMart canonical conflict
VirtueMart 4 automatically generates a canonical for products that belong to multiple categories. This is the correct approach, but when a template or plugin has its own canonical logic, a conflict arises, especially with third-party plugins.
The place to check: the file views/productdetails/view.html.php. There should be a block that clears the standard Joomla canonical before adding the VirtueMart canonical. If this block is missing or commented out, there may be problems.
Reason #3 Hreflang
Tags in <head> on every page or links in sitemap.xml. Neither method is perfect. Changing the multilingual plugin or rebuilding the sitemap can break alternate links between language versions.
Correct structure. Each language version contains a canonical plus links to all alternative language versions.
Reason #4 Duplicates via Routing and trailing slash
Joomla 5.2 and newer has a Strict Routing feature in the System SEF system plugin. With the Enforce a Suffix by Redirect option enabled, the system merges duplicate URLs and issues a 301 to the canonical version. But if this option is disabled, URLs with and without a trailing slash, URLs with index.php and without, URLs via /component/virtuemart/ and via a direct alias all exist simultaneously in the index.
It is especially important to check if before migration Joomla was generating URLs without a slash and after migration with a slash.
Modernization of the online store on Joomla & VirtueMart. We will check canonical and trailing slash in your configuration.
Reasons #5 and #6: quality loss
Reason #5: robots.txt is not configured correctly
The site is already on hosting but with a robots.txt that contains a Disallow: / directive blocking indexation for protection during development on a local server.
How to check: immediately after deployment run curl -s https://yourdomain.ua/robots.txt and check GSC Coverage on the Excluded tab. If a large number of URLs appear with status Blocked by robots.txt, the cause is definitely in robots.txt.
Reason #6: Schema.org Product or FAQPage has disappeared
Structured markup in VirtueMart is located in template files. When the template changes, the markup is not transferred. A technical SEO audit is required.
After migration, the minimum required markup is: Product plus Offer (price, currency, availability).
Reasons #7 and #8
Reason #7: 404 in VirtueMart with tree-based URLs
With the Use full category tree for product links option enabled, the product URL follows the pattern: site_name/category_name/product_page. In this case, if a product is deleted, the product page URL does not return a 404 error. VirtueMart redirects to the parent category with HTTP 200.
A random string in the product slug with a tree-based URL produces the same 200 plus category content.
If tree-based URLs are needed, set up 410 Gone for deleted SKUs via .htaccess.
Reason #8: sitemap.xml contains many duplicates
On Joomla+VirtueMart it is difficult to generate a sitemap.xml where VirtueMart product pages are correctly represented (especially with a tree-based shop structure).
Related to reason #7. The real product category plus ten extra URLs with the same content as the category.
The correct approach. Custom sitemap generation via a CLI script adapted to VirtueMart logic. Required filter: check HTTP 200 OK and the number of pages in sitemap.xml.
Book a consultation. We will review the state of sitemap and canonical in your shop.
Checks before putting the site on
Checks are performed before putting the site on hosting.
- 301 redirect map. Scan using Screaming Frog or XML sitemap of the old site, table of old URL to new URL. Mass redirect to the homepage is not allowed.
- VirtueMart canonical. Check
views/productdetails/view.html.phpfor canonical from plugins or the template. - Hreflang UA and RU. Check canonical plus alternate on language versions. Method (head or sitemap), if you choose both they must fully match each other.
- Strict Routing and trailing slash. Enable System SEF (Joomla 5.2 and newer), check URLs with and without a slash via curl.
- robots.txt. First check immediately after deployment.
curl -s https://yourdomain.ua/robots.txt. IfDisallow: /is present, the site is closed to indexation. - Schema.org. Rich Results Test on three product pages after a template change. Check Product, Offer, FAQPage.
- 404 VirtueMart. Set up the Redirect 410 /old-page directive or the [G] flag for Apache servers. Test:
curl -Iagainst the URL of a deleted product page. - sitemap.xml. Generate sitemap.xml manually or via cron using a CLI command, required filter is HTTP 200 OK and the number of URLs found.
Detailed step-by-step instructions with command and script examples in the article detailed SEO migration checklist for Joomla.
Frequently asked questions
Can you update Joomla 3 to Joomla 5 without losing SEF URLs
There is no direct path from Joomla 3 to Joomla 5. Only this route: from 3.x through 3.10.x and 4.4.x to 5.x. Article, category and menu item aliases are transferred with the content. For URLs where the structure has changed (for example, an article moved to a different category or the alias was edited), a 301 redirect is needed in `.htaccess` or via Joomla Redirect Manager.
How to check that VirtueMart does not return a 200 status for deleted product pages?
In the VirtueMart admin, delete the product. Run the command curl -I https://yourdomain.ua/category/test-product-1234. If the response is 200 and not 404, that is a problem.
Why do VirtueMart categories get indexed poorly after an update?
Most often this is an accumulation of non-existent URLs. URLs of deleted or non-existent products return the category page. Googlebot records them as pages with duplicates. Google does not understand which URL is canonical for the category and lowers authority for all variants.
What sitemap approach do you recommend for Joomla+VirtueMart?
Generation via a CLI script: the only working option I know of today. Standard sitemap plugins do not understand the specifics of VirtueMart.
How to submit a Change of Address in GSC when changing domains?
After setting up 301 redirects, verify via curl that they work, then in GSC add the new domain and launch Change of Address. Change of Address without server-side 301s has no effect.
Is the VirtueMart canonical preserved when the template changes?
It depends on whether there is an override in `views/productdetails/view.html.php`. VirtueMart 4 automatically forms a canonical for products in multiple categories. But if the new template or a third-party plugin has different canonical logic, duplicate tags will appear.
sh404SEF or 4SEF?
sh404SEF is no longer supported. The switch: 4SEF plus 4SEO. Install 4SEF before updating the core. Order of steps: audit current URLs and sh404SEF redirect rules, install 4SEF, transfer rules, update Joomla.