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. :-)
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.
Hej Anders.
Hastighedsoptimering betyder jo også mere og mere, så tak for tippet. :-)
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
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 :-)
@Oxkjær
Tak for det, så er der også lidt tips til Windows folket :-)
@Per
Mange tak. :-)
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.
@Torben
Tak for tippet. Det får jeg lige rettet til i indlægget.
Hvordan ville det så se ud i et af de nederste eksempler? :-)
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
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. :-)
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
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?
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.
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.
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.
Hej Dan
Hehe. Sjovt, og selv tak :-)
Er glad for du kunne bruge det.
mvh
Henrik
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
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
Tak for det Michael :-)
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:-)
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.
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.
Hej Cenk
Mange tak for roserne. :-)
Jep. Jeg downloader filen, via ftp, og uploader den igen efter end redigering. Det kan blot være i notepad, hvis du ikke har en bedre editor.
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.
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
Hej Anders
Prøv med:
RewriteEngine on
RewriteRule ^(.*)\.asp$ /$1.php [R=301,NC]
Tak for en virkelig udførlig guide – den er meget behjælpelig