 
			     - Tech, OC'ing, SEO and more
- Просмотров: 11399
Using .htaccess to improve SEO.
In my previous article where I showed how to SEO optimize a Joomla instalment, link here: SEO for Joomla. The article became quite large and I could not dive deeper into the SEO aspect for .htaccess therefor I will dive deeper into .htaccess. When it comes to web hosting or any kind of website .htaccess will be very important in terms of security what also ties into a higher SEO score. The .htaccess file has been around since the dawn of time when it comes to HTTP/WWW protocols any can change the behaviour of your site. While configuring an Apache server through the http.conf itself it is rarely you will have access to that file on shared hosting solutions. But do not worry the .htaccess file is almost as powerful at the http.conf file but it can be tricky to work with. However in the long run understanding, this file will make your life much easier, and your website much better in the long run. For Joomla users I have a pre-made .htaccess file you can download, the website you current viewing is configured with the same file. --> Joomla .htaccess File <-- Remember to rename to .htaccess by removing the .txt extension when placing this in your ROOT.
  
A guide to the .htaccess file below with some pointers and configurations that might work for you, be sure to make a backup of your original file! While working on my SEO score I found numerous articles that cover the subject however with my previous article more information is needed. Before we start to ensure that if you make an edit to check with your hosts help files there are small variations per host this can lead to errors. I've added some snippets you will find handy to use, make sure to configure them according to your taste and test results.
Google PageSpeed Module.
The Google PageSpeed Module is a server-side open-source module that is used by most 3rd part hosting service like GoDaddy. And is enabled through your .htaccess file and improves the performance of JavaScript, HTML, CSS, and, JPG/PNG images. mod_PageSpeed as it is also known works on Pache and Nginx servers. For 3rd party, hosting check the provider hosting FAQ. For those who manage their web servers, Google offers a wide range of install packages.
Debian & Ubuntu.
sudo dpkg -i mod-pagespeed-*.deb sudo apt-get -f install
CentOS & Fedora.
sudo yum install at # if you do not already have 'at' installed sudo rpm -U mod-pagespeed-*.rpm
Packages.
Visit the following page: Google PageSpeed Module Packages.
Adding Google PageSpeed Module functionality to the .htaccess file.
Below are a copy and paste of the PageSpeed modules for this website. This main purpose here is to clean HTML and CSS as well as moving the CSS to the header for optimized loading. Important to note here that some hosting services you will need to add PageSpeed functions per line in your .htaccess file or they will not work properly.
## Google Page Speed##
<IfModule pagespeed_module>
ModPagespeed on
ModPagespeedEnableFilters extend_cache
ModPagespeedEnableFilters move_css_to_head
ModPagespeedEnableFilters combine_css
ModPagespeedEnableFilters collapse_whitespace
ModPagespeedEnableFilters elide_attributes
ModPagespeedEnableFilters remove_comments
</IfModule>
Snippets for.htaccess.
Below is a selection of code snippets you can use in your .htaccess file. Snippets include security mods, redirects, and, rewrites.
Redirect Everyone Except IP address to an alternate page.
ErrorDocument 403 http://www.yourdomain.com/Order deny,allowDeny from allAllow from 208.113.134.190
#301 Redirects for .htaccess
#Redirect a single page:Redirect 301 /pagename.php http://www.domain.com/pagename.html
#Redirect an entire site:Redirect 301 / http://www.domain.com/
#Redirect an entire site to a sub folderRedirect 301 / http://www.domain.com/subfolder/
#Redirect a sub folder to another siteRedirect 301 /subfolder http://www.domain.com/
#This will redirect any file with the .html extension to use the same filename but use the .php extension instead.RedirectMatch 301 (.*)\.html$ http://www.domain.com$1.php
#You can also perform 301 redirects using rewriting via .htaccess.
#Redirect from old domain to new domainRewriteEngine onRewriteBase /RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
#Redirect to www locationRewriteEngine onRewriteBase /rewritecond %{http_host} ^domain.com [nc]rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]
#Redirect to www location with subdirectoryRewriteEngine onRewriteBase /RewriteCond %{HTTP_HOST} domain.com [NC]RewriteRule ^(.*)$ http://www.domain.com/directory/index.html [R=301,NC]
#Redirect from old domain to new domain with full path and query string:Options +FollowSymLinksRewriteEngine OnRewriteRule ^(.*) http://www.newdomain.com%{REQUEST_URI} [R=302,NC]
#Redirect from old domain with subdirectory to new domain w/o subdirectory including full path and query string:Options +FollowSymLinksRewriteEngine OnRewriteCond %{REQUEST_URI} ^/subdirname/(.*)$RewriteRule ^(.*) http://www.katcode.com/%1 [R=302,NC]
#Rewrite and redirect URLs with query parameters (files placed in the root directory)
Original URL:
http://www.example.com/index.php?id=1Desired destination URL:
http://www.example.com/path-to-new-location/.htaccess syntax:
RewriteEngine onRewriteCond %{QUERY_STRING} id=1RewriteRule ^index\.php$ /path-to-new-location/? [L,R=301]Redirect URLs with query parameters (files placed in subdirectory)
Original URL:
http://www.example.com/sub-dir/index.php?id=1Desired destination URL:
http://www.example.com/path-to-new-location/.htaccess syntax:
RewriteEngine onRewriteCond %{QUERY_STRING} id=1RewriteRule ^sub-dir/index\.php$ /path-to-new-location/? [L,R=301]Redirect one clean URL to a new clean URL
Original URL:
http://www.example.com/old-page/Desired destination URL:http://www.example.com/new-page/.htaccess syntax:
RewriteEngine OnRewriteRule ^old-page/?$ $1/new-page$2 [R=301,L]Rewrite and redirect URLs with query parameter to directory based structure, retaining query string in URL root level
Original URL:
http://www.example.com/index.php?id=100Desired destination URL:
http://www.example.com/100/.htaccess syntax:
RewriteEngine OnRewriteRule ^([^/d]+)/?$ index.php?id=$1 [QSA]Rewrite URLs with query parameter to directory based structure, retaining query string parameter in URL subdirectory
Original URL:http://www.example.com/index.php?category=fishDesired destination URL:http://www.example.com/category/fish/.htaccess syntax:
RewriteEngine OnRewriteRule ^/?category/([^/d]+)/?$ index.php?category=$1 [L,QSA]Domain change – redirect all incoming request from old to new domain (retain path)
RewriteEngine onRewriteCond %{HTTP_HOST} ^example-old\.com$ [NC]RewriteRule ^(.*)$ http://www.example-new.com/$1 [R=301,L]If you do not want to pass the path in the request to the new domain, change the last row to:
RewriteRule ^(.*)$ http://www.example-new.com/ [R=301,L]
#From blog.oldsite.com -> www.somewhere.com/blog/retains path and query, and eliminates xtra blog path if domain is blog.oldsite.com/blog/Options +FollowSymLinksRewriteEngine OnRewriteCond %{REQUEST_URI}/ blogRewriteRule ^(.*) http://www.somewhere.com/%{REQUEST_URI} [R=302,NC]RewriteRule ^(.*) http://www.somewhere.com/blog/%{REQUEST_URI} [R=302,NC]
Serve all .pdf files on your site using .htaccess and mod_rewrite with the PHP script.
RewriteCond %{REQUEST_FILENAME} -fRewriteRule ^(.+)\.pdf$ /cgi-bin/pdf.php?file=$1 [L,NC,QSA]Rewrite to wwwRewriteCond %{REQUEST_URI} !^/(robots\.txt|favicon\.ico|sitemap\.xml)$RewriteCond %{HTTP_HOST} !^www\.yourdomain\.com$ [NC]RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L]
Rewrite to www dynamically.
RewriteCond %{REQUEST_URI} !^/robots\.txt$ [NC]RewriteCond %{HTTP_HOST} !^www\.[a-z-]+\.[a-z]{2,6} [NC]RewriteCond %{HTTP_HOST} ([a-z-]+\.[a-z]{2,6})$ [NC]RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
Implementing a Caching Scheme with .htaccess
# year<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4)$">Header set Cache-Control "public"Header set Expires "Thu, 20 Apr 2010 20:00:00 GMT"Header unset Last-Modified</FilesMatch>#2 hours<FilesMatch "\.(html|htm|xml|txt|xsl)$">Header set Cache-Control "max-age=7200, must-revalidate"</FilesMatch><FilesMatch "\.(js|css)$">SetOutputFilter DEFLATEHeader set Expires "Thu, 20 Apr 2010 20:00:00 GMT"</FilesMatch>
Password Protect a single file.
<Files login.php>AuthName "Prompt"AuthType BasicAuthUserFile /web/askapache.com/.htpasswdRequire valid-user</Files>
Password Protect multiple files.
<FilesMatch "^(private|phpinfo).*$"> AuthName "Development" AuthUserFile /.htpasswd AuthType basic Require valid-user </FilesMatch>Prevent hotlinking.RewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain\.com/.*$ [NC]RewriteRule \.(gif|jpg|swf|flv|png)$ http://www.yourdomain.com/feed.
Partial Source Code for 301 rewrites: https://gist.github.com/ScottPhillips/1721489










