Skip to content

Alt om WordPress, webutvikling — og mer til

🚀 Slik fjerner du index.php og index.html fra URL: 301-viderekobling til nettstedets rot

🚀 Slik fjerner du index.php og index.html fra URL: 301-viderekobling til nettstedets rot

Du åpner Google Search Console og ser at hjemmesiden er indeksert to ganger: som site.ru/ og som site.ru/index.php. Eller site.ru/index.html. For en søkemotor er dette to forskjellige URL-er med identisk innhold. Resultatet: sidens autoritet splittes mellom duplikatene, rangeringer faller, og crawl-budsjettet sløses bort.

Problemet er like gammelt som nettet. Mekanikken er enkel: som standard returnerer serveren index.html eller index.php når roten forespørres via DirectoryIndex-direktivet, men den blokkerer ikke direkte tilgang til site.ru/index.php. Fra Apaches perspektiv er begge adressene legitime. Men søkemotoren ser to forskjellige sider med identisk innhold og begynner å gjette hvilken den skal rangere.

Nedenfor finner du tre måter å sette opp en 301-viderekobling fra indeksfiler til roten: fra den universelle .htaccess til Cloudflare og Nginx. Pluss en verifiseringsmetode som tar to minutter.

💡 Rask oversikt:

  • Legg til mod_rewrite-regler i .htaccess for å fange opp forespørsler til index.html og index.php
  • For WordPress og CMS, bruk en PHP-viderekobling i inngangsfilen index.php (den overlever oppdateringer av permalenker)
  • Verifiser resultatet via curl -I eller redirectchecker.com (responsen skal være 301 Moved Permanently)
  • Gå gjennom interne lenker på nettstedet og erstatt /index.php med / i menyer, logoer og widgeter

Hvorfor duplikater av indeksfiler skader nettstedet ditt

Når en besøkende skriver site.ru i adressefeltet, bytter Apache stille ut med index.html eller index.php i henhold til DirectoryIndex. Nettleseren viser siden, adressen forblir ren, og brukeren merker ikke byttet.

Men hvis en lenke til den fullstendige banen site.ru/index.php allerede finnes et sted der ute, følger søkeroboten den, ser det samme innholdet som på site.ru/, og registrerer et duplikat. Hvor kommer en slik lenke fra? Det er mange muligheter: et gammelt innlegg på et tredjepartsnettsted, en partner som oppga feil URL, en plugin for sosial deling som genererte en deling med index.php i enden, eller til og med utvikleren som la til href="/index.html" i navigasjonen under layout.

Hva vi får i praksis:

  • Splittet lenkeverdi. Tilbakekoblinger fordeles mellom / og /index.php i stedet for å samles på én enkelt kanonisk side.
  • Sløsing med crawl-budsjett. Roboten bruker tid på å gjennomsøke duplikater i stedet for nyttige deler av nettstedet.
  • Utvannet relevans. Søkemotoren forstår ikke hvilken av de to sidene den skal vise i resultatene og kan veksle mellom dem, statistikk over brukeratferd blir skjev, og rangeringer blir ustabile.

Situasjonen er fullt håndterbar. Den løses ved å sette opp en permanent 301-viderekobling fra index.html og index.php til roten /. La oss utforske de tilgjengelige metodene.

Metode 1: Viderekobling via.htaccess på Apache

Filen .htaccess ligger i nettstedets rot. Hvis den ikke finnes, opprett en tekstfil med et punktum i begynnelsen av navnet; enhver FTP-klient eller filbehandler hos hostingleverandøren kan håndtere dette.

Åpne .htaccess og finn linjen RewriteEngine On. Hvis den ikke er der, legg den til som den aller første linjen etter eventuelle kommentarer. Den aktiverer mod_rewrite-modulen som er ansvarlig for alle viderekoblinger.

Under RewriteEngine On, legg til reglene. Her er et minimalt fungerende sett:

1RewriteEngine On
2
3RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
4RewriteRule ^index\.php$ https://%{HTTP_HOST}/ [R=301,L]
5
6RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
7RewriteRule ^index\.html$ https://%{HTTP_HOST}/ [R=301,L]

Slik fungerer dette linje for linje:

  • RewriteCond %{THE_REQUEST} sjekker den opprinnelige forespørselsstrengen sendt av nettleseren til serveren. Den inneholder eksplisitt /index.php eller /index.html, som er akkurat det vi fanger opp.
  • RewriteRule omdirigerer forespørselen til domenets rot med en 301-kode (permanent viderekobling). Flagget L (last) stopper videre regelbehandling.
  • %{HTTP_HOST} setter automatisk inn nettstedets domene; du trenger ikke skrive det manuelt. Protokollen er eksplisitt angitt som https://.

Kritisk merknad: ikke bruk den forenklede konstruksjonen Redirect 301 /index.php /. Direktivet Redirect fra mod_alias går i løkke på indeksfiler. Etter viderekobling til /, bytter Apache igjen inn index.php via DirectoryIndex, regelen utløses på nytt, og nettleseren kaster en feil om uendelig løkke. Kombinasjonen RewriteCond + RewriteRule via mod_rewrite analyserer spesifikt den opprinnelige forespørselen (%{THE_REQUEST}), ikke den som er omskrevet av interne regler, så ingen løkke oppstår.

Endringer i .htaccess trer i kraft umiddelbart; Apache leser filen på nytt ved hver forespørsel, og ingen omstart av serveren er nødvendig.

Metode 2: PHP-viderekobling for WordPress og CMS

På nettsteder som kjører WordPress, Joomla, Drupal og andre CMS-plattformer er det risikabelt å redigere .htaccess: CMS-et skriver den om når permalenker oppdateres, URL-struktur endres eller SEO-plugins aktiveres. Reglene dine kan forsvinne ved neste lagring av innstillinger.

For WordPress finnes det en mer robust tilnærming: en viderekobling direkte i inngangsfilen index.php. Den ligger i CMS-installasjonens rot og kjøres ved hver forespørsel, før kjernen lastes.

Åpne WordPress sin index.php og legg til helt i begynnelsen, rett etter den innledende <?php-taggen:

1<?php
2// 301 redirect from index.php to root
3if ($_SERVER['REQUEST_URI'] === '/index.php') {
4 header('Location: /', true, 301);
5 exit();
6}
7
8// Standard WordPress code follows
9define('WP_USE_THEMES', true);
10// ...

For nettsteder på ren PHP uten CMS er logikken den samme: plasser koden i inngangsfilen index.php i den offentlige mappens rot. Hvis nettstedet ditt bruker begge indeksfilene (index.php og index.html), legg til en lignende sjekk for index.html i begynnelsen av det samme skriptet.

Hvorfor denne metoden er mer pålitelig enn å redigere .htaccess for CMS:

  • Koden ligger inne i en PHP-fil som CMS-et ikke rører når permalenkeinnstillinger oppdateres.
  • Sjekken $_SERVER['REQUEST_URI'] fanger spesifikt opp den forespurte URL-en, ikke den som er omskrevet av WordPress sine interne regler.
  • exit() garanterer at kjøringen stopper; ikke en eneste linje utover den vil kjøre.

På prosjekter med høy trafikk er PHP-viderekoblingen litt raskere enn .htaccess-varianten: mod_rewrite slipper å spinne opp for å analysere regulære uttrykk, noe som sparer millisekunder på hver forespørsel.

Metode 3: Cloudflare, Nginx og andre servere

Cloudflare. Hvis nettstedet ditt kjører gjennom Cloudflare, kan du sette opp viderekoblingen på CDN-nivå uten å røre serverfiler i det hele tatt. Gå til Rules → Redirect Rules og opprett en regel:

  • Felt: URI Path
  • Operator: equals
  • Verdi: /index.php
  • Viderekoblings-URL: https://yourdomain.com/
  • Statuskode: 301

Legg til en lignende regel for /index.html. Fordelen: viderekoblingen utløses på Cloudflares edge-servere, og forespørselen når aldri din hosting. Ulempen: domenet må være delegert til Cloudflare NS.

Nginx. Nettsteder på Nginx bruker ikke .htaccess. Regler legges til i serverens konfigurasjonsfil, vanligvis /etc/nginx/sites-available/yourdomain:

1location = /index.php {
2 return 301 https://yourdomain.com/;
3}
4
5location = /index.html {
6 return 301 https://yourdomain.com/;
7}

Etter redigering, sjekk syntaksen med nginx -t og bruk endringene: systemctl reload nginx.

LiteSpeed / OpenLiteSpeed. Serveren støtter .htaccess med de samme mod_rewrite-reglene som Apache; metode 1 fungerer uten endringer. I tillegg kan du bruke den innebygde viderekoblingsmekanismen i LiteSpeed WebAdmin-panelet.

IIS (Windows Server). For nettsteder på IIS konfigureres viderekoblingen via URL Rewrite-modulen i web.config:

1<rule name="Redirect index.php to root" stopProcessing="true">
2 <match url="^index\.php$" />
3 <action type="Redirect" url="/" redirectType="Permanent" />
4</rule>

Legg til en lignende regel for index.html.

Hvordan verifisere at viderekoblingen fungerer

Den mest pålitelige metoden er kommandolinjen. Kjør:

1curl -I https://yourdomain.com/index.php

Den første linjen i responsen skal være HTTP/1.1 301 Moved Permanently, og Location-headeren skal vise nettstedets rot. Gjenta for index.html. Hjemmesiden på roten / skal svare med kode 200.

Alternative verifiseringsverktøy:

  • Redirect Checker (redirectchecker.com) viser hele viderekoblingskjeden med responskoder, praktisk for rask diagnostikk uten terminal.
  • Google Search Console → URL Inspection (inspeksjons- og testverktøyet): viser hvordan Googlebot ser siden etter viderekoblingen og om den er tilgjengelig for indeksering.

Etter at du har satt opp viderekoblingen, er det kritisk å sjekke nettstedets interne lenker. Sørg for at menyer, logoen (som vanligvis lenker til hjemmesiden), brødsmulestier og blokker med relaterte innlegg peker til /, ikke /index.php. En enkelt ødelagt intern lenke kan gjenskape duplikatet du nettopp fjernet. Gjør et søk i kildekoden på tvers av nettstedet: åpne en hvilken som helst side, trykk Ctrl+U, og søk etter href="/index.php" eller href="/index.html". Erstatt hver forekomst med href="/".

Video: en kort forklaring av 301-viderekoblinger fra Google

En fire minutters video fra Google Search Central, essensiell visning hvis du setter opp viderekoblinger for første gang. John Mueller forklarer hvordan søkemotoren behandler permanente viderekoblinger og om det er en grense for antallet:

⁉️🤔 Ofte stilte spørsmål

Hva skjer hvis jeg ikke setter opp en viderekobling fra index.php i det hele tatt?

Søkemotoren vil velge en kanonisk versjon på egen hånd, men ikke nødvendigvis den du ønsker. En del av lenkeverdien vil gå til duplikatet, og begge URL-ene kan veksle i søkeresultatene. Det er ingen direkte trussel om straff, men rangeringene vil være lavere enn de kunne vært med en ren struktur. John Mueller fra Google har gjentatte ganger understreket at kanonisering via rel="canonical" er et hint til søkemotoren, ikke et direktiv. Google kan ignorere den kanoniske og velge en annen side hvis den anser den som mer relevant. En 301-viderekobling er et direktiv: den garanterer vektoverføring og ekskluderer duplikatet fra indeksen.

Kan jeg bruke Redirect 301 /index.php / i stedet for mod_rewrite?

Teknisk sett ja, men for indeksfiler er dette farlig. Etter viderekobling til /, bytter Apache igjen inn index.php via DirectoryIndex, Redirect-regelen utløses på nytt, noe som resulterer i en uendelig løkke, og nettleseren kutter den av med en ERR_TOO_MANY_REDIRECTS-feil. RewriteCond med %{THE_REQUEST}-sjekken har ikke dette problemet: den analyserer den opprinnelige forespørselen fra nettleseren, ikke den som er omskrevet av serverens interne regler.

Må jeg sette opp en viderekobling hvis nettstedet bare fungerer over HTTPS?

Ja. HTTPS og indeksduplikater er to uavhengige problemer. Selv med en HTTP→HTTPS-viderekobling satt opp og korrekt rel="canonical", vil en direkte forespørsel til https://site.ru/index.php returnere en 200-kode uten viderekobling. Reglene fra metode 1 dekker begge protokoller: RewriteRule spesifiserer eksplisitt https:// i mål-URL-en.

Hvordan verifiserer jeg at viderekoblingen ikke har ødelagt nettstedet?

Tre sjekkpunkter: 1) hjemmesiden åpnes på roten / uten viderekoblinger (curl -I skal returnere 200); 2) URL-er med index.php og index.html returnerer 301 og leder til /; 3) WordPress-admin (/wp-admin/) fungerer uten løkker. Det siste punktet er kritisk: en dårlig skrevet regel i .htaccess kan fange opp forespørsler til index.php inne i admin og ødelegge innloggingen. Konstruksjonen fra metode 1 er trygg: den sjekker for et eksakt URI-treff og rører ikke /wp-admin/index.php.

Hva med andre indeksfiler som index.aspx eller index.py?

Mekanikken er den samme: kopier RewriteCond + RewriteRule-blokken, bytt ut filendelsen, og legg den til i .htaccess. For ikke-standard filendelser, sørg for at filen fysisk eksisterer i roten og er oppført i DirectoryIndex; ellers vil ikke serveren kunne servere den som en indeksfil uansett, og ingen viderekobling vil være nødvendig.

Håndtering av duplikater av indeksfiler: endelig sjekkliste

Å sette opp en 301-viderekobling fra index.html og index.php til roten er en oppgave av typen «fem minutters arbeid, årevis med beskyttelse». Regelen ligger i .htaccess eller index.php transparent og krever ikke vedlikehold når du endrer design eller flytter til en annen hosting.

Trinn å ta etter at endringene er gjort:

  • Verifiser viderekoblingen via curl -I eller redirectchecker.com; responsen skal være 301.
  • Sørg for at hjemmesiden åpnes på roten med en 200-kode.
  • Søk etter href="/index.php" og href="/index.html" i sidens kildekode; erstatt hver forekomst med href="/".
  • I Google Search Console, kjør en inspeksjon av hjemmesiden; roboten skal se en 200 og den kanoniske URL-en uten /index.php.

Etter dette vil duplikater gradvis forsvinne fra «Coverage»-rapporten i Search Console, og tilbakekoblingsverdien vil konsentreres på én enkelt kanonisk side. Resultatet er ikke øyeblikkelig (søkemotoren trenger tid til å gjennomsøke på nytt), men det er uunngåelig.