Omdirigera med 301 redirect

Denna artikel senast uppdaterad: 25 april 2014

Vad är en 301 redirect och varför ska man göra det?

Google rekommenderar att man gör en så kallad 301 redirect om man omdirigerar en sida.

301 redirect är en omdirigering som sker på servernivå. Siffran 301 är en HTTP-statuskod som betyder flyttad permanent. 302 betyder flyttad temporärt. Det finns verktyg, där du kan se vilken HTTP-statuskod din sida ger.

Vid en 301 redirect förstår Google att sidan har flyttats och rankning och länkkraft överförs (dock aldrig till 100%).

Allt annat skall undvikas (Meta-refresh, javascript, 302 redirect etc) vilket kan ge negativa påföljder i sökmotorer.

Om det inte finns tillgång till varken .htaccess, PHP eller annat serverskript så är det rekommenderade valet att skriva en text för besökare (be dem uppdatera länkar och bokmärken) och en stor länk till vart sidan har flyttats. Ta då bort alla andra länkar på sidan för maximal effekt.

För 301 redirect med Nginx glöm inte att starta om Nginx för att se ändringarna:

service nginx restart

Tips!

Domainstats logga Jim Westergren har utvecklat Domainstats, en grym tjänst inom SEO där du kan se inlänkar med mera.

När man ska använda 301 redirect

Se alltid till att en URL redirectas till sin mest relevanta nya URL.

Erfarenhet som SEO-konsult

Vanligaste misstagen som jag sett genom mina år som SEO-konsult:

  1. 301 redirect implementeras inte alls eller endast på vissa ställen och inte på alla ställen som behövs.
  2. URLer omdirigeras till startsidan istället för relevanta undersidor.
  3. Redirect i flera led istället för rätt URL direkt.
  4. 302 temporär redirect används istället för 301 redirect.

Hur man gör en 301 redirect för en enskild URL

301 redirect med .htaccess (Apache):

Redirect 301 /gammal/gammal.html http://www.ny-url.se/ny.html
301 redirect med .htaccess (Apache), annan lösning vid mer problematiska fall:

RewriteRule ^gammal.html$ http://www.ny-url.se/ny.html? [R=301,L]
301 redirect med Nginx:

location /felaktig-url {
   return 301 http://exempel.se/korrekt-url;
}
301 redirect för en enskild fil med hjälp av PHP:

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.ny-url.se/");
die();
?>
301 redirect med PHP och många filer:

<?php
$url_redirection = array(
'http://www.seo-forum.se/' => '/index.php',
'https://www.seo-guide.se/svenska-seo-foretag' => '/showthread.php?t=4417',
'https://www.seo-guide.se/svenska-seo-foretag' => '/seo-konsulter-seo-foeretag/4417-lista-pa-svenska-seo-foeretag.html',
'http://www.seo-forum.se/member.php?u=384' => '/medlemmar/magnus.html',
'http://www.seo-forum.se/member.php?u=2' => '/medlemmar/marcus-westberg.html',
'http://www.seo-forum.se/member.php?u=5' => '/medlemmar/maccke.html',
'http://www.seo-forum.se/member.php?u=77' => '/medlemmar/urban-g.html',
'http://www.seo-forum.se/forumdisplay.php?f=58' => '/foermedling-av-seo-tjaenster/',
'http://www.seo-forum.se/forumdisplay.php?f=25' => '/nyheter/',
'http://www.seo-forum.se/forumdisplay.php?f=40' => '/allmaen-seo-info/',
'http://www.seo-forum.se/forumdisplay.php?f=26' => '/nyckelordsforskning-keyword-research/',
'http://www.seo-forum.se/forumdisplay.php?f=26' => '/nyckelordsforskning/',
'http://www.seo-forum.se/forumdisplay.php?f=27' => '/relevansoptimering-on-page/',
'http://www.seo-forum.se/forumdisplay.php?f=15' => '/seo-verktyg/',
'http://www.seo-forum.se/forumdisplay.php?f=15' => '/nyckelordsmaetning/',
'http://www.seo-forum.se/forumdisplay.php?f=15' => '/laenkpopularitetsmaetning/',
'http://www.seo-forum.se/showthread.php?t=4281' => '/30455-post1.html'
);

if (in_array($_SERVER['REQUEST_URI'], $url_redirection)) {
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: ".array_search($_SERVER['REQUEST_URI'], $url_redirection));
   die();
}
?>
301 redirect med ASP:

<%@ Language=VBScript %>
<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.ny-url.se/"
%>
301 redirect med ASP.NET:

<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location","http://www.ny-url.se/");
}
</script>
301 redirect med JSP/JAVA:

<%
response.setStatus(301);
response.setHeader( "Location", "http://www.ny-url.se/" );
response.setHeader( "Connection", "close" );
%>
301 redirect med CGI/PERL:

$q = new CGI;
print $q->redirect(" http://www.ny-url.se/ ");
301 redirect med Ruby/Ruby on Rails:

def old_action
headers["Status"] = "301 Moved Permanently"
redirect_to "http://www.ny-url.se/"
end

Omdirigera vid en flytt av domän

Har du flyttat din sajt till en annan domän?

Så här gör du en 301 redirect med hjälp av .htaccess (Apache).

Redirecta allt från gammal domän till startsidan på den nya domänen:

Redirect 301 / http://www.ny-domän.se/
Allt till startsida på ny domän med Nginx:

server {
   server_name   gammal.se www.gammal.se;
   return        301 http://www.ny-domän.se;
}
Redirecta allt från gammal domän till samma URLer på den nya domänen:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.ny-domän.se$1 [R=301,L]
Redirecta allt från gammal domän till samma URLer på den nya domänen med Nginx:

server {
   server_name   gammal.se www.gammal.se;
   return        301 http://www.ny-domän.se$request_uri;
}
Redirecta allt från gammal domän till samma URLer på den nya domänen med PHP:

<?php
if ($_SERVER['HTTP_HOST'] != 'www.ny.se') {
   header('HTTP/1.1 301 Moved Permanently');
   header("Location: http://www.ny.se".$_SERVER['REQUEST_URI']);
   die();
}
?>

Omdirigera till med eller utan www

Även om man nu förtiden kan ställa in i Googles verktyg för webbansvariga om man ska visa med eller utan www i ens domännamn rekommenderar jag att man redirectar detta själv på servernivå.

Positiva effekter med en www-redirect:

Se även till att du själv länkar till rätt version både i din sajt, i din sitemap.xml och i din PPC.

Sätt att utföra det:

Utan www till www med .htaccess (Apache):

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www.|$) [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Utan www till www med Nginx:

server {
   server_name   exempel.se;
   return        301 http://www.exempel.se$request_uri;
}
Med www till utan www med .htaccess (Apache):

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST}//s%{HTTPS} ^www.(.*)//((s)on|s.*)$ [NC]
RewriteRule ^ http%3://%1%{REQUEST_URI} [L,R=301]
Med www till utan www med Nginx:

server {
   server_name   www.exempel.se;
   return        301 http://exempel.se$request_uri;
}
Utan www till www med PHP:

<?php
if ($_SERVER["HTTP_HOST"] == "dindomän.se") {
    Header("HTTP/1.1 301 Moved Permanently"); 
    Header("Location: http://www.dindomän.se".$_SERVER['REQUEST_URI']);
    die();
}
?>
Med www till utan www med PHP:

<?php
if ($_SERVER["HTTP_HOST"] == "www.dindomän.se") {
    Header("HTTP/1.1 301 Moved Permanently"); 
    Header("Location: http://dindomän.se".$_SERVER['REQUEST_URI']);
    die();
}
?>
Utan www till www Med ASP:

<%
If InStr(Request.ServerVariables("SERVER_NAME"),"www") = 0 Then
    Response.Status="301 Moved Permanently"
    Response.AddHeader "Location","http://www."
        & Request.ServerVariables("HTTP_HOST")
        & Request.ServerVariables("REQUEST_URI")
    Response.End
End if
%>

Omdirigera /index.php eller /index.html till /

Ingen vits med att ha flera URLer till startsidan och underkataloger.

Med .htaccess (Apache):

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)index.(php|html)$ /$1 [R=301,L]

Omdirigera till nya filnamn

Har du bytat från .html till .php (koden bytar allt, kontrollera att allt funkar igen)

Med .htaccess (Apache):

RedirectMatch 301 (.*).html$ http://www.exampel.se$1.php

Omdirigera en mapp

Redirecta bara själva mappen till en ny mapp:

Redirect 301 /exempelmapp/ http://www.exempel.se/nymapp/
Redirecta allt i mappen exempelmapp till filen /exempel.php

Options +FollowSymlinks
RewriteEngine on
RewriteRule ^exempelmapp(.*)$ /exempel.php [L,R=301]
Redirecta alla filer i mappen gammalmapp till en ny domän

RedirectMatch 301 ^/gammlmapp/(.+)$ http://www.nydomän.se/$1
Redirecta alla filer i mappen gammalmapp till en ny mapp på valfri domän

RedirectMatch 301 ^/gammlmapp/(.+)$ http://www.exempel.se/nymapp/$1

Omdirigera till och från SSL

Från http till https med .htaccess (Apache):

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
Från https till http med .htaccess (Apache):

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI}

Omdirigera allt i domän till subdomän

Med .htaccess (Apache):

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domän.se
RewriteCond %{REQUEST_URI} -d
RewriteRule .* http://sub.domän.se%{REQUEST_URI} [L,R=301]

Omdirigera allt i subdomän till domän

Med .htaccess (Apache):

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST}//s%{HTTPS} ^subdomän.(.*)//((s)on|s.*)$ [NC]
RewriteRule ^ http%3://%1%{REQUEST_URI} [L,R=301]

Redirect på DNS-nivå

Jag känner endast till Glesys som stödjer detta.

Du skapar URL records på en HOST (@ vilket är root, www eller annan subdomän) och när DNS-cachen utgår så har du en 301 redirect på plats.

En mycket stor fördel med detta är att du enkelt kan lägga upp så att extra domäner (felstavningar, olika domändelser osv) 301 redirectas till din huvuddomän utan att behöva peka dessa domäner mot någon server eller webbhotell.

Rekommenderas inte när du vill redirecta till motsvarande URLer på annan domän eftersom du endast kan peka mot 1 URL. Samma sak om du vill redirecta med eller utan www och du redan har URLer från fel version indexerade i Google.

Omdirigera från dynamiska till statiska URLer

Detta görs med mod_rewrite i .htaccess. Se artikeln Guide till URL-manipulering med mod_rewrite

Från /?page=article&id=34 till /artikel34.html

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{QUERY_STRING} ^page=article&id=([0-9]+)
RewriteRule ^(.*)$ http://%{HTTP_HOST}/artikel%1.html? [R=301,L]

Omdirigera från Wordpress.com till egenhostad Wordpress

Alternativ 1: följ dessa officiella stegen från Wordpress.com.

Alternativ 2: läs och följ instruktionerna från detta dokument (via här). Obs: denna metod är från 2008. Meddela gärna om detta fortfarande fungerar.


Mer läsning / källor

Fråga / diskutera på SEO-forum.se

I denna tråden.

25 Apr 2014

Denna artikel är skriven av
Senast redigerad: 22 Dec 2015
Feedback uppskattas.