Sådan laver du 301 redirects

Der findes tusindvis af 301 redirect artikler på nettet, men det er de færreste der kommer rundt om ret mange problemstillinger i forhold til redirects.

Det er muligt jeg ikke har været i stand til at finde dem, men den type redirects jeg ofte har brug for, skal jeg som regel lede efter flere forskellige steder på nettet. Derfor dette indlæg.

Nu er jeg på ingen måde ekspert i avancerede redirects, men jeg ved at de er pokkers vigtige, derfor har jeg gennem tiden skulle lave en del redirects på mange TYPO3 løsninger. I Magento har jeg også tit brug for at lave redirects.

Her i indlægget vil jeg vise dig de typer af redirects jeg bruger mest – og tit selv har savnet en samlet liste med eksempler om.

Skal lige starte med at sige at det dog kun er Linux server redirects jeg vil behandle i dette indlæg, så hvis du har en Windows server eller andet, så er der ikke meget hjælp at hente i dette indlæg.

Hvorfor er 301 redirects vigtige?

I kampen for at undgå duplicate content (det samme indhold på flere webadresser), er det vigtigt på ethvert website at opsætte 301 redirects, sådan så de sider søgemaskinerne indexerer på din hjemmeside kun findes på én webadresse (url).

Sådan kommer du i gang med 301 redirects

For at kunne lave 301 redirects, skal du finde en fil på dit webhotel i rodbiblioteket der hedder .htaccess. I denne fil skal du tilføje ekstra linjer for hver redirect du ønsker at lave.

Det vigtigste at fortælle dig er at du skal putte dine linjer efter:

RewriteEngine On
RewriteBase /

### dine redirects herefter ###

Din .htaccess fil kan med stor sandsynlighed se mere avanceret ud, men hvis du er i tvivl, så prøv at putte dine ekstra linjer ind nederst i filen. Hvis det ikke virker, så er der sandsynligvis en fejl i din indtastning af linjerne.

301 redirects fra et domæne til et andet

Dette bør sættes op på samtlige websites. Hvis du kun har 1 domæne, bør du overveje om du vil bruge www.ditdomaene.dk eller bare ditdomaene.dk (uden www). Den du ikke beslutter dig for at bruge skal du 301 redirecte til den du bruger.

Eksempel:

RewriteCond %{HTTP_HOST} ^ditdomaene\.dk [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

Har du købt en flere domæner der minder om hinanden, så skal du redirecte dem alle til et “hoveddomæne”. Det gælder i hvert fald hvis det er samme indhold der vises på de forskellige domæner.

Eksempel:

RewriteCond %{HTTP_HOST} ^ditdomaene\.dk [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^ditdomaene\.com [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.ditdomaene\.com [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^ditdomaene\.eu [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.ditdomaene\.eu [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

Har du også købt domæner som indeholder special tegn, så vil det ikke virke hvis du sætter f.eks. æ, ø eller å ind i din .htaccess fil. Det du skal gøre hvis du vil redirecte et domæne med special tegn er først og fremmest at finde domænets “punycode”.  Det kan du f.eks. gøre med dette værktøj: https://www.punycoder.com.

Nu vil jeg vise et eksempel hvor ditdomæne.dk bliver redirectet til www.ditdomaene.dk. Først skal jeg lige finde domænets punycode. Jeg taster ditdomæne.dk ind i tekstfeltet på konverteringsværktøjet herover og finder ud af at punycoden er: xn--ditdomne-o0a.dk

Eksempel:

RewriteCond %{HTTP_HOST} ^xn--ditdomne-o0a\.dk [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

RewriteCond %{HTTP_HOST} ^www\.xn--ditdomne-o0a\.dk [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/$1 [L,R=301]

301 redirects af statiske url’s

Hvis du har skiftet CMS eller webshop system, så vil du også have brug for at lave redirects på samtlige indexerede sider i søgemaskinerne på dit website, hvis dine url’er har ændret sig.

En side der før hed www.ditdomæne.dk/kontakt/medarbejdere.html hedder nu måske bare www.ditdomæne.dk/medarbejdere.html. Denne side skal redirectes til den nye adresse, for at søgemaskinerne kan få rettet deres index og du ikke mister linkværdi til denne side.

Denne procedure bør gentages for samtlige sider søgemaskinerne har indexeret på dit website.

Eksempel:

redirect 301 /kontakt/medarbejdere.html http://www.ditdomæne.dk/medarbejdere.html

Første del af linjen fortæller at det er en 301 redirect. Anden del af linjen viser hvilken “gammel” url der skal redirectes og sidste del hvad der skal redirectes til.

301 redirects med dynamiske url’s

Du kan i mange tilfælde også have brug for at redirecte “dynamiske” url’s. Hvis dine sider f.eks. tidligere er blevet indexeret med index.php?ID=17, index.php?ID=222, index.php?ID=632 osv, og efterfølgende er dit site blevet lavet om til at kunne håndtere pæne url’er, så skal du lave dine redirects på en lidt anden måde.

Eksempel:

RewriteCond %{HTTP_HOST} ^www\.ditdomaene\.dk
RewriteCond %{QUERY_STRING} ^ID=17$ [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/kontakt.html? [R=301,L]

RewriteCond %{QUERY_STRING} ^ID=222$ [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/medarbejdere.html? [R=301,L]

RewriteCond %{QUERY_STRING} ^ID=632$ [NC]
RewriteRule ^(.*)$ http://www.ditdomaene.dk/produkter.html? [R=301,L]

301 redirect alle url’er med .asp til ny forside

RewriteRule (.*)\.asp http://www.ditdomæne.dk/? [L,R=301]

Håber du kunne bruge det til noget. Skriv gerne hvis der er noget der mangler eller der har sneget sig fejl ind i mine eksempler. :-)

26 replies
  1. Anders Christensen
    Anders Christensen siger:

    Og som en sidebemærkning kan man putte det hele ind i konfigurationsfilen for den virtuelle host i apache konfigurationen. Så hvis man har et hårdt belastet site og derfor har valgt at slå .htaccess fra for at spare cpukræfter på det, vil det fungere alligevel og belaste serveren mindre end et htaccess tjek for hver forespørsel på serveren.

    Svar
  2. Oxkjær
    Oxkjær siger:

    Interessant artikel – hvis man altså er til Linux :o)
    Nu er jeg til Windåser, og der plejer jeg at lave en fil med nedenstående indhold som jeg så includer på mine sider:

    strCorrectDomain = “www.domain.dk”
    strDomain = request.ServerVariables(“HTTP_HOST”)
    if strDomain strCorrectDomain then
    strSide = Request.ServerVariables(“SCRIPT_NAME”)
    strFlyt = strCorrectDomain & strSide
    strFlyt = lcase(strFlyt)
    strFlyt = replace(strFlyt, “default.asp”, “”)
    Response.Status=”301 Permanently Moved”
    Response.AddHeader “Location”, “http://”& strFlyt
    response.end
    end if

    Svar
  3. Per H. Jørgensen
    Per H. Jørgensen siger:

    God beskrivelse! 301 har tidligere givet mig grå hår på hovedet (mange år før de burde dukke op), så jeg ved der er et behov for en grundig og forståelig vejledning :-)

    Svar
  4. Torben Lundsgaard
    Torben Lundsgaard siger:

    Husk at følgende metacharacters altid skal escapes med \
    . [] () ^ $ \ * + ? {} |

    Forkert: RewriteCond %{HTTP_HOST} ^ditdomaene.dk [NC]
    Korrekt: RewriteCond %{HTTP_HOST} ^ditdomaene\.dk [NC]

    Det betyder ikke noget i dine eksempler men det er en dårlig vane som kan være meget uheldig i andre regular expressions.

    Svar
  5. Rasmus
    Rasmus siger:

    Hej Henrik

    Tak for en god og informativ artikel. Jeg kan godt se, at den ikke er af nyeste dato, men jeg prøver alligevel at stille et enkelt spørgsmål: Når jeg har valgt “Foretrukkent Domæne” i Googles Webmasterværktøjer, er det så alligevel nødvendigt at bruge en 301 redirect?

    Venligst
    Rasmus

    Svar
  6. Henrik Andersen
    Henrik Andersen siger:

    Hej Rasmus

    Mange tak for din kommentar.

    Det er et godt spørgsmål, som jeg ikke er 100% sikker på jeg kender svaret på. Men en ting er helt sikkert. Gør du begge dele er du 100% sikker på at du har gjort det rigtigt. :-)

    Svar
  7. Rasmus
    Rasmus siger:

    Hej Henrik

    Det har du selvfølgelig ret i.

    Jeg spørger fordi det hos one.com – hvor jeg har domæne – er ret besværligt at indsætte den 301. Men jeg må vel bide i det sure, tekniske æble…

    Under alle omstændigheder tak for svaret. :-)

    Rasmus

    Svar
  8. Thomas
    Thomas siger:

    Hvordan laver man en 301 i magento, når linket ser sådan ud:

    exp.dk/ølbo-åhave 301 til exp.dk/ny-ølbo-åhave

    Har du et tip til det? URL omskrivning i admin virker ikke, og htaccess virker heller ikke? hvordan klare jeg den?

    Svar
  9. Henrik Andersen
    Henrik Andersen siger:

    Hej Thomas

    Prøv med følgende i htaccess:

    redirect 301 /xn--lbo-have-d0a9p [HTTP]exp.dk/xn--ny-lbo-have-38a6v

    Erstat [HTTP] med http://

    Men du bør undgå specialtegn (som æ, ø og å) i url’er, så jeg ville lave destinationsurl’en om til noget der ikke indeholder specialtegn.

    Svar
  10. Mette
    Mette siger:

    Jeg døjer i øjeblikket med at lave korrekte 301 redirects. Jeg har benyttet mig af din guide, men jeg får ikke det rigtige http header svar.

    Hvis jeg tester på et link uden www, så får jeg godt nok returneret 301 redirect. Hvis jeg tester på samme link med www, får jeg 404 not found.

    Svar
  11. Henrik Andersen
    Henrik Andersen siger:

    Hej Mette

    Jeg har lige fjernet dit eksempel, da jeg ikke er interesseret i at have links til “døde” sider på bloggen.

    Der kan være mange årsager til dit problem. Du må gerne sende din htaccess fil til mig på mail, så vil jeg gerne se om jeg kan give dig et hurtigt svar.

    Svar
  12. Dan Hansen
    Dan Hansen siger:

    Hej Henrik,

    Tak gamle roomie – så fik jeg styr på min 301 redirect.
    Selvom jeg havde bedt min webhotel udbyder om hjælp, så kunne de ikke give mig den rigtige :D
    Faktisk gav de mig den med ronæsbro.dk i stedet for – og ikke punycode! :(

    Med din hjælp og så lige:
    >Options +FollowSymlinks
    >RewriteEngine on
    … tilføjet i starten af .htaccess filen, så virkede det :D

    Tak for hjælpen (Og så søgte jeg bare på nettet efter 301 redirect og faldt tilfældigt over din side :D

    Hilsen Dan

    Svar
  13. Michael
    Michael siger:

    Super artikel med god forklaring, jeg har i flere år instrueret andre og kunder i vigtigheden af 301, og hvordan.

    Næste gang får de et link hertil – og så kan jeg “skøjte” videre til noget andet ;-)

    Takker

    Svar
  14. Xander
    Xander siger:

    Hej Henrik. Jeg er ved at få styr på det med 301, men nu er mit spørgsmål følgende. Hvis du forstiller dig at vores inerpages er delt op i 3 afsnits, Head, body og footer. Flere steder bruger samme design ( med tekstindhold ) men ændre kun teksten i vores header. Vil det på nogen måde påvirke os mht DC. Hvis ja, er der en kode man kan smide i, så google ikke læser body og footer, men kun header.

    Tak:-)

    Svar
  15. Henrik Andersen
    Henrik Andersen siger:

    Hej Xander
    Har for meget af den samme tekst på alle sider, vil sandsynligheden for DC jo naturligt være større. Så det kan bestemt helt generelt betale sig at tænke i at minimere tekster der er ens på alle sider. Eller endnu bedre: Gøre dem unikke på hver side.

    Et alternativ, som har brugt et par steder er at “wrappe” den tekst google ikke skal læse ind i googleoff / googleon tags.

    Svar
  16. Cenk Cavdar
    Cenk Cavdar siger:

    Hejsa,

    Utrolig god guide til at optimere hjemmesiden tak for det.

    Jeg har bare et par spørgsmål :

    når du roder i .htaccess file hvordan gør du det ? Downloader du filen først også editer med teksteditor og laver redirect ne på alle poster og uploader den bare med ændringerne ?????
    Jeg vil blive glad for et svar :)

    På forhånd tak for en god forklaring.

    Svar
  17. Thomas Rode
    Thomas Rode siger:

    Fedt indlæg! Har hjulpet mig meget. Sad med knap 2.000 redirects jeg skulle ha’ lavet, og nice bare at loade det op i .htaccess.

    Svar
  18. Anders Voss
    Anders Voss siger:

    Hej Henrik

    Tak for en god guide.
    Jeg står i den situation at jeg har skiftet min side fra .asp til .php
    Alle filerne hedder det samme, bare .php til sidst.

    Skal jeg lave en redirect for hver side eller er der et smart stykke kode jeg kan sætte ind?

    PFT

    Svar

Skriv en kommentar

Want to join the discussion?
Feel free to contribute!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *