FREE THOUGHT · FREE SOFTWARE · FREE WORLD

Home » Htaccess » Rewrite underscores to hyphens for SEO URL

Rewrite underscores to hyphens for SEO URL

Rewrite underscores to hyphens for SEO URL Replace underscores in URLs with hyphens using Apache .htaccess.

Rewrite underscores to hyphens for SEO URL

February 22nd, 2007

This Apache .htaccess code 301 redirects requests for URLs with underscores (_) to the URL with hyphens.

SEO benefits of using hyphens/dashes over underscores

According to Matt Cutts the choice is clearly to use dashes or hyphens instead of underscores.

So instead of article_this_is_awesome_page.html you want article-this-is-awesome-page.html.

I often get asked whether I'd recommend dashes or underscores for words in urls. For urls in Google, I would recommend using dashes.


Example Usage

When http://d.com/the_top_apache_htaccess_article.html is requested by a browser or search engine, a Search-Engine Friendly 301 Redirect is sent telling the client that the correct location for the resource is at http://d.com/the-top-apache-htaccess-article.html

The Apache .htaccess underscore to hyphen conversion code

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
 
RewriteRule !\.(html|php)$ - [S=6]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5-$6-$7 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5-$6 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4-$5 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_([^_]*)_(.*)$ $1-$2-$3-$4 [E=underscores:Yes]
RewriteRule ^([^_]*)_([^_]*)_(.*)$ $1-$2-$3 [E=underscores:Yes]
RewriteRule ^([^_]*)_(.*)$ $1-$2 [E=underscores:Yes]
 
RewriteCond %{ENV:underscores} ^Yes$
RewriteRule (.*) http://www.askapache.com/$1 [R=301,L]

Further Reading

  1. The Worlds Greatest Apache .htaccess Guide
  2. Article in htaccessElite forum:Rewrite urls separated by _ underscores to - dashes

http://www.askapache.com/htaccess/rewrite-underscores-to-hyphens-for-seo-url.html#comments

Reader Comments

  1. saurabh ~November 10, 2011 @ 4:40 am
    How i redirect url to error page when we find & or = in url Please give me the solution
  2. Andriy ~November 16, 2009 @ 10:46 am
    And what's your suggestion if the URL can include up to 16 underscores that should be rewritten to hyphens?
  3. Chris Phoenix ~June 10, 2009 @ 4:18 pm
    The article's example code has S=5 option (skip next five rules) followed by six underscore-elimination rules.
  4. Jake ~October 8, 2008 @ 5:23 pm
    how can you use this rewrite but exclude directories
  5. stefan ~October 7, 2008 @ 8:20 pm
    Hello i just wondering if there is anyway to rewrite underscores to slashes. Thanks in advance, sorry for my bad english.
  6. lucas ~July 23, 2008 @ 2:12 am
    it would be better to have html and php extensions skipped using a condition yet still allow querystrings. but more importantly to use one rule to replace underscores and loop it with the N flag instead of trying to anticipate how many there'll be. this version addresses those issues and trims consecutive underscores to a single hyphen. Options +FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !\.(html|php)($|\?) [NC] RewriteRule ^([^_]*)_+(.*)$ $1-$2 [E=underscores:Yes,N] RewriteCond %{ENV:underscores} ^Yes$ RewriteRule (.*) http://%{HTTP_HOST}/$1 [R=301,L]
  7. mark ~July 15, 2008 @ 3:21 am
    Haven't be able to get this to work, and I've tried all of the variations in the two further reading links. I have the file extensions removed on the old site and on the new, so all I really need to do is rewrite the underscores to dashes. Love to know where I'm going wrong but not being a tech, I don't really know where toe start. PS At the moment I'm testing on a local wamp setup before I go messing around with a live environment.
  8. Faruk ~April 23, 2008 @ 8:33 pm
    Hello can anyone tell me how can i edit a htaccess multicommand file?i m currently using user friendly code and i added codes for broken links and code for fclearing query_strings but at the and it did not work: RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /friendly_url.php ErrorDocument 400 http://www.sicaktakip/error_404.html ErrorDocument 401 http://www.sicaktakip/error_404.html ErrorDocument 403 http://www.sicaktakip/error_404.html ErrorDocument 404 http://www.sicaktakip/error_404.html ErrorDocument 500/http://www.sicaktakip/index.php RewriteCond %{QUERY_STRING} ^source= RewriteRule (.*) /$1? [R=301,L] Anyone any idea for that?
  9. Joe ~February 13, 2008 @ 5:02 pm
    Hi - Great resource. At the risk of sounding ignorant, could you please tell me where abouts (i.e. in which directory/folder/subdirectory I would place this code to ensure the rewrite to dashes works? Thanks

Add Comment!

Leave a Reply

Your email address will not be published.


Google +

It's very simple - you read the protocol and write the code. -Bill Joy

Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 3.0 License, just credit with a link.
This site is not supported or endorsed by The Apache Software Foundation (ASF). All software and documentation produced by The ASF is licensed. "Apache" is a trademark of The ASF. NCSA HTTPd.
UNIX ® is a registered Trademark of The Open Group. POSIX ® is a registered Trademark of The IEEE.

Site Map | Contact Webmaster | Glossary | License and Disclaimer | Terms of Service |

↑ TOPMain