I see that if the name of a product is changed in my Magento V 1.9.2.2 shop, links from google are giving 404's for the url's with the old name instead of redirecting to the new page and getting a 301.
I know I can manually add the redirect in the URL Rewrite
Maintenance section and that does work but I'm wondering if that is how Magento works or if I am missing something? If it is how it works, it seems a big oversight on Magento's part.
Is there a known fix for this or maybe some setting I have to change? Or do I need to enter such changes in manually each time?
For create new URL Rewrite magento have Catalog URL Rewrites indexing. So when you did Catalog URL Rewrites indexing then all the URL generate properly. Have you try to indexing? Also check its on ready state or not.
I have a Joomla 3.3.6 (edited: 3.5.) site organized in only 3 levels:
Four big categories (i, ii, iii, iiii)
Each one divided in some intermediate categories (A, B, C, ...)
And finally articles
Two languages (en, pt)
The URL after setting Search Engine Friendly URLs, Use URL rewriting, Adds Suffix to URL and multilanguage support, should be in the form:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
But as many others that have Joomla installed and ask for a solution since Joomla-Baby-Version, I got:
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
where 666 is a number from hell indicating for no purpose a category ID
Now browsing for an answer, I found this answer:
Edit “components/com_content/router.php“
(You’ll probably have to re-do this step every time you update Joomla.)
Replace the lines 38 and 290 with:
$advanced = $params->get('sef_advanced_link', 1);
and Replace line 426 with
->where($db->quoteName(‘alias’) . ‘ = ‘ . $db->quote($segment));
Well, first of all, line 426 is already like that in the original. Second, this does not do the trick. It do works with:
http://www.example.com/en/bigcatiii/intercatA/articlex.html
But it breaks wit a 404 error if you browse to:
http://www.example.com/en/bigcatiii/intercatA.html
Also, I noticed that the ID numbers are different. While the whole URL is
http://www.example.com/en/bigcatiii/666-intercatA/articlex.html
The same category description page is
http://www.example.com/en/bigcatiii/333-intercatA.html
There is also another solution that sound better, but also do not work, based on .htaccess
RewriteEngine on
RewriteBase /
RewriteRule (\d+)-([^/]*) $2 [R=301,L]
The URLs appear ok, but the pages are not found. It would be so much better if we can provide a solution using .htaccess instead of changing Joomla core.
Still, changing the Joomla core would just fine, if this other googled suggestion was valid.
Copy “components/com_content/router.php” to “/templates/your-template/html”
Meaning that once you moved router.php to your "local", you wouldn't need to redo all the stuff after an upgrade. (Unless, of course, router.php is updated, in case you would better mirror it again.)
Thanks for your time to solve this puzzle!
References
1- Change/ Remove Article ID in URL?
2- Removing the Article ID number
3- How to remove article id in url?
4- Remove article id from url for joomla 3.0
5- Enabling SEF
6- Remove article id from joomla 3 URL
7- Remove article id from joomla 3 URL
8- .htaccess redirect rule
9- Test .htaccess
Edited (2016/May/02): NEW Bounty for Joomla last version 3.5
I've just newly installed a joomla 3.5 and the old method works for me. Since something has been modified in the router file, you have to repeat the procedure after a joomla upgrade.
The lines are now 34 and 295 in ./components/com_content/router.php.
Again change the 0 into 1 so that it becomes:
$advanced = $params->get('sef_advanced_link', 1);
My URL is e.g. http://joomla.lan/en/category-en-gb/article-en-gb
works fine with Search Engine Friendly URLs on.
With Adds Suffix to URL switched to Yes an .html is appended to the URL.
Use URL Rewriting and Unicode Aliases work optionally. When using URL rewrite engine on IIS7 or Apache, you have to rename htaccess.txt into .htaccess and webconfig.txt into webconfig. Note that some hosters have a restrictive server configuration. If you get a 500 internal server error, you might need to edit .htaccess and comment out the lines Options +FollowSymlinks and/or Options -Indexes and/or RewriteBase / by adding a preceding #. The latter is already deactivated in Joomla 3.5. A RewriteBase setting is useful when Joomla is installed in a subfolder, not the web root.
On other servers set Use URL Rewriting to No.
I can't reproduce your problem, everything is working correct with those two code edits. Please try it out again and if you can't resolve, post the exact behavior (urls, errors aso.)
If you can not get it fixed, you might have to reinstall the sources.
After looking into it, I found some useful pieces of information. DISCLAIMER I don't use Joomla and haven't tried this on a working installation, these are only results of some searching & reading source code. Anyway, here's what I found.
From what I have gathererd, it seems that changing
$advanced = $params->get('sef_advanced_link', 0);
to
$advanced = $params->get('sef_advanced_link', 1);
should be enough. Be careful though, with this option, probably both URL (with and without IDs) will be available which isn't good for SEO. Problem is with the 404, but that seems like a problem with the Joomla routing system. You could compensate the 404s with menu links which are only configured but never used (see below).
Some origins of your problem:
For example, in their routing, they use the menu to find the category ID (Line ~385 // We get the category id from the menu item and search from there)
For each URL segment (separated by the /), they first search category aliases, so be sure to check your aliases. If they cannot find the alias in the categories, they rely on the ID in the URL for their search query (Line ~425 ->where($db->quoteName('catid') . ' = ' . (int) $vars['catid']))
When a categoryID or articleID is attached to a menu, they remove the category ID $query['catid'] because they know they have a unique global alias (Line ~69)
Therefore, one solution is to do the following:
You could try and create a menu item for each category and each article. Even if the menu is not displayed anywhere and only configured in the administration interface, it will create global unique routing aliases for categories and articles which will let Joomla find the right article/category. From what I understand, when a category or article has a menu item, then only the title aliases are used. But since they don't have any, they use the combination of id + slug to locate the resource.
Since a lot of people are complaining about this, it should be fixed in Joomla 3.5
References & Discussions:
A blog giving some solutions and explanations about this issue: http://developernote.com/2012/05/how-to-remove-id-from-url-in-joomla-2-5/
A joomla forum thread discussing your problem and it's solutions: http://forum.joomla.org/viewtopic.php?f=712&t=826165&start=30
Maybe some plugin solves this issue: http://extensions.joomla.org/extensions/site-management/sef
To finish on a bright note, it seems that the developers are aware of the limitations ;)
Joomla 3.7(?) to 3.10.5 Legacy router issue fix
Here is the solution that worked for me, on Joomla 3.10.5, but it might be the same from 3.7 up (If not fixed in 4.0).
Legacy router - path: #www/components/com_content/helpers/legacyrouter.php
Hacking the legacy router, and deactivate appending the category id to the segments array by commenting out line 199 in the legacy router and replacing it like this:
//if (!$advanced && count($array))
if (false)
Tried these solutions
Defaulting $advanced to 1 and more, and other solutions here and in this link: https://vincentping.com/en/remove-category-article-id-from-url-in-joomla-3.html did not work for me:
And more: The site article urls only needed the category id to be removed, not the article id, as removing both causes a 404
Hoping this helps someone not have to spend the large amount of time I have trying .htaccess routing, other solutions and plugins before resorting to this hack.
You can see the result here: https://new.ac-news.org (under construction)
Another easy solution is to create a menu item as category blog and use the alias as your category.
It won't delete the URL in your website but you can still send the XML site map to your search engine without those categories URL with Id's
I'm using Joomla 2.5 with K2,
In category/item URL there is always static time-stamp "2012-12-25-22-22-08" like:
/site/2012-12-25-22-22-08/test-item
I tried some solutions like make sure there is no menu have that time-stamp as external URL, and categories/items also don't have it on aliases..
Any idea how to remove it from URL?
Thanks in advance..
Please check if you have any menu items with type: System Links -> External Url.
Sometimes alias is being added from these items (try to switch it to something else and the alias will be appeared).
If not please check all your menu items and k2 categories alias to find the item that is adding this value.
Τhere is also good to follow these steps:
Clear your joomla cache
Clear your browser cache
Clear sessions mysql table (via phpmyadmin)
Check if your .htaccess is being altered
Good Luck!
I have the community-feedback mod installed in Magento and I've had lots of issues with it. I am now fixing the bugs in it myself as the developer been of no help. One of the issues I am having is that when I add or change any product, the url rewrites for posts/tags from the extension are erased. I end up having to clear the table and then manually reindexing the cart.
I would like to know which function is responsible during product additions/changes for clearing/deleting url rewrites.
I tried several mod_rewrite but I asking your help, because this is a complicated matter.
Wordpress has its own permalink structure that uses mod rewrite to make the url’s search engine friendly.
I have 2 plugins.
1. Turns a page into a subdirectory. So domain.com/page/ turns into page.domain.com
2. The second one is a forum that creates pages such as /?mingleforumaction=viewforum&f=2.0 and ?mingleforumaction=viewtopic&t=23.0
How can I turn the current
http://page.domain.com/?mingleforumaction=viewtopic&t=23.0
to
http://page.domain.com/title-of-the-forum-topic/
Why not to ask plugin author? Are you sure your plugins will handle such structure? If yes, then why there is no mod_rewrite rules shipped with them?
You can't do it based solely on the topic title, those aren't unique. You could, however, do
http://page.domain.com/23.0/title-of-the-forum-topic/
where 23.0 is obviously the value that t would be set to in the query string.
Edit
RewriteEngine on
RewriteRule ^/topic/([0-9\.]+)/ /?mingleforumaction=viewtopic&t=$1
openid does not let me login from home because of a different IP, but I am the same person as the topic starter:
#spartan018
How can that be done?
#FractalizeR
The developer http://cartpauj.com/projects/mingle-forum-plugin/ used an older forum plugin and does not have the knowledge (or perhaps time to learn) to rewrite the plugin for it to have mode_rewrite rules shipped with in of have the plugin work with the permalink structure of wordpress. So I was hoping to help him, but got stuck myself because normal .htaccess mod_rewrite do not seem to work and it is based on an already existing wordpress mod_rewrite. That is why I asked for help :)