Skip to content

Allt om WordPress, webbutveckling — och mer därtill

🚀 Hur man tar bort index.php och index.html från URL: 301-omdirigering till webbplatsroten

🚀 Hur man tar bort index.php och index.html från URL: 301-omdirigering till webbplatsroten

Du öppnar Google Search Console och ser startsidan indexerad två gånger: som site.ru/ och som site.ru/index.php. Eller site.ru/index.html. För en sökmotor är detta två olika webbadresser med identiskt innehåll. Resultatet: sidans auktoritet delas på mitten mellan dubbletterna, rankningen sjunker och crawl-budgeten slösas bort.

Problemet är lika gammalt som webben. Mekaniken är enkel: som standard returnerar servern index.html eller index.php vid anrop av roten via DirectoryIndex-direktivet, men den blockerar inte direkt åtkomst till site.ru/index.php. Från Apaches perspektiv är båda adresserna legitima. Men sökmotorn ser två olika sidor med identiskt innehåll och börjar gissa vilken den ska ranka.

Här är tre sätt att sätta upp en 301 redirect från indexfiler till roten: från den universella .htaccess till Cloudflare och Nginx. Plus en verifieringsmetod som tar två minuter.

💡 Snabb översikt:

  • Lägg till mod_rewrite-regler i .htaccess för att fånga upp anrop till index.html och index.php
  • För WordPress och CMS, använd en PHP-redirect i ingångsfilen index.php (den överlever permalänksuppdateringar)
  • Verifiera resultatet via curl -I eller redirectchecker.com (svaret ska vara 301 Moved Permanently)
  • Gå igenom interna länkar på sajten och ersätt /index.php med / i menyer, logotyper och widgets

Varför indexfilsdubbletter skadar din sajt

När en besökare skriver site.ru i adressfältet byter Apache tyst ut det mot index.html eller index.php enligt DirectoryIndex. Webbläsaren visar sidan, adressen förblir ren och användaren märker inte bytet.

Men om en länk till den fullständiga sökvägen site.ru/index.php redan finns någonstans där ute, följer sökroboten den, ser samma innehåll som på site.ru/ och registrerar en dubblett. Var kommer en sådan länk ifrån? Det finns gott om alternativ: ett gammalt inlägg på en tredjepartssajt, en partner som angav fel webbadress, ett plugin för social delning som genererade en delning med index.php i slutet, eller till och med utvecklaren som lade till href="/index.html" i navigeringen under layoutarbetet.

Vad vi får i praktiken:

  • Delad länkkraft. Backlinks fördelas mellan / och /index.php istället för att ackumuleras på en enda kanonisk sida.
  • Slösad crawl-budget. Roboten lägger tid på att crawla dubbletter istället för användbara delar av sajten.
  • Utspädd relevans. Sökmotorn förstår inte vilken av de två sidorna den ska visa i resultaten och kan växla mellan dem, statistik över användarbeteende blir skev och rankningen blir instabil.

Situationen är fullt hanterbar. Den löses genom att sätta upp en permanent 301 redirect från index.html och index.php till roten /. Låt oss utforska de tillgängliga metoderna.

Metod 1: Redirect via.htaccess på Apache

Filen .htaccess finns i sajtens rot. Om den inte finns, skapa en textfil med en punkt i början av namnet; vilken FTP-klient eller filhanterare hos webbhotellet som helst klarar detta.

Öppna .htaccess och hitta raden RewriteEngine On. Om den inte finns där, lägg till den som allra första rad efter eventuella kommentarer. Den aktiverar modulen mod_rewrite som ansvarar för alla redirects.

Nedanför RewriteEngine On, lägg till reglerna. Här är en minimal uppsättning som fungerar:

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]

Så här fungerar det rad för rad:

  • RewriteCond %{THE_REQUEST} kontrollerar den ursprungliga anropssträngen som webbläsaren skickade till servern. Den innehåller uttryckligen /index.php eller /index.html, vilket är precis det vi fångar upp.
  • RewriteRule omdirigerar anropet till domänroten med en 301-kod (permanent redirect). Flaggan L (last) stoppar vidare regelbearbetning.
  • %{HTTP_HOST} ersätts automatiskt med sajtens domän; du behöver inte skriva den manuellt. Protokollet anges uttryckligen som https://.

Kritisk notering: använd inte den förenklade konstruktionen Redirect 301 /index.php /. Direktivet Redirect från mod_alias loopar på indexfiler. Efter omdirigering till / byter Apache återigen ut mot index.php via DirectoryIndex, regeln triggas igen och webbläsaren kastar ett fel om oändlig loop. Kombinationen RewriteCond + RewriteRule via mod_rewrite analyserar specifikt det ursprungliga anropet (%{THE_REQUEST}), inte det som skrivits om av interna regler, så ingen loop uppstår.

Ändringar i .htaccess träder i kraft omedelbart; Apache läser om filen vid varje anrop och ingen omstart av servern krävs.

Metod 2: PHP-redirect för WordPress och CMS

På sajter som kör WordPress, Joomla, Drupal och andra CMS-plattformar är det riskabelt att redigera .htaccess: CMS:et skriver om den vid uppdatering av permalänkar, ändring av webbadress-struktur eller aktivering av SEO-plugins. Dina regler kan försvinna vid nästa inställningssparande.

För WordPress finns en mer motståndskraftig approach: en redirect direkt i ingångsfilen index.php. Den finns i CMS-installationens rot och körs vid varje anrop, innan kärnan laddas.

Öppna WordPress index.php och lägg till allra först, direkt efter den inledande <?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// ...

För sajter på ren PHP utan CMS är logiken densamma: placera koden i ingångsfilen index.php i den publika katalogens rot. Om din sajt använder båda indexfilerna (index.php och index.html), lägg till en liknande kontroll för index.html i början av samma skript.

Varför denna metod är mer tillförlitlig än att redigera .htaccess för CMS:

  • Koden lever inuti en PHP-fil som CMS:et inte rör vid uppdatering av permalänksinställningar.
  • Kontrollen av $_SERVER['REQUEST_URI'] fångar specifikt den efterfrågade webbadressen, inte den som skrivits om av WordPress interna regler.
  • exit() garanterar att körningen stoppas; inte en enda rad bortom den kommer att köras.

På projekt med hög trafik är PHP-redirecten något snabbare än .htaccess-varianten: mod_rewrite snurrar inte igång för att tolka reguljära uttryck, vilket sparar millisekunder per anrop.

Metod 3: Cloudflare, Nginx och andra servrar

Cloudflare. Om din sajt går via Cloudflare kan du sätta upp redirecten på CDN-nivå utan att röra serverfiler alls. Gå till Rules → Redirect Rules och skapa en regel:

  • Fält: URI Path
  • Operator: equals
  • Värde: /index.php
  • Redirect URL: https://yourdomain.com/
  • Statuskod: 301

Lägg till en liknande regel för /index.html. Fördelen: redirecten sker på Cloudflares edge-servrar och anropet når aldrig ens ditt webbhotell. Nackdelen: domänen måste vara delegerad till Cloudflare NS.

Nginx. Sajter på Nginx använder inte .htaccess. Regler läggs till i serverns konfigurationsfil, vanligtvis /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}

Efter redigering, kontrollera syntaxen med nginx -t och tillämpa ändringarna: systemctl reload nginx.

LiteSpeed / OpenLiteSpeed. Servern stöder .htaccess med samma mod_rewrite-regler som Apache; metod 1 fungerar utan ändringar. Dessutom kan du använda den inbyggda redirect-mekanismen i LiteSpeed WebAdmin-panelen.

IIS (Windows Server). För sajter på IIS konfigureras redirecten 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>

Lägg till en liknande regel för index.html.

Hur du verifierar att redirecten fungerar

Den mest tillförlitliga metoden är kommandoraden. Kör:

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

Första raden i svaret ska vara HTTP/1.1 301 Moved Permanently, och Location-headern ska visa sajtens rot. Upprepa för index.html. Startsidan på roten / ska svara med koden 200.

Alternativa verifieringsverktyg:

  • Redirect Checker (redirectchecker.com) visar hela redirect-kedjan med svarskoder, praktiskt för snabb diagnostik utan terminal.
  • Google Search Console → URL Inspection (inspektions- och testverktyget): visar hur Googlebot ser sidan efter redirecten och om den är tillgänglig för indexering.

Efter att du satt upp redirecten är det kritiskt att kontrollera din sajts interna länkar. Se till att menyer, logotypen (som vanligtvis länkar till startsidan), brödsmulor och block med relaterade inlägg pekar på /, inte /index.php. En enda trasig intern länk kan återskapa dubbletten du just tog bort. Gör en källkodssökning över sajten: öppna valfri sida, tryck Ctrl+U och sök efter href="/index.php" eller href="/index.html". Ersätt varje förekomst med href="/".

Video: en kort förklaring av 301 redirects från Google

En fyra minuter lång video från Google Search Central, obligatorisk att se om du sätter upp redirects för första gången. John Mueller förklarar hur sökmotorn hanterar permanenta redirects och om det finns en gräns för antalet:

⁉️🤔 Vanliga frågor

Vad händer om jag inte sätter upp en redirect från index.php alls?

Sökmotorn kommer att välja en kanonisk version på egen hand, men inte nödvändigtvis den du behöver. En del av länkkraften går till dubbletten och båda webbadresserna kan alternera i sökresultaten. Det finns inget direkt hot om bestraffning, men rankningen blir lägre än den kunde vara med en ren struktur. John Mueller från Google har upprepade gånger betonat att kanonisering via rel="canonical" är en hint till sökmotorn, inte ett direktiv. Google kan ignorera den kanoniska och välja en annan sida om den anser den vara mer relevant. En 301 redirect är ett direktiv: den garanterar viktöverföring och exkluderar dubbletten från indexet.

Kan jag använda Redirect 301 /index.php / istället för mod_rewrite?

Tekniskt sett ja, men för indexfiler är detta farligt. Efter omdirigering till / byter Apache återigen ut mot index.php via DirectoryIndex, Redirect-regeln triggas igen, vilket resulterar i en oändlig loop och webbläsaren bryter den med felet ERR_TOO_MANY_REDIRECTS. RewriteCond med kontrollen %{THE_REQUEST} har inte detta problem: den analyserar det ursprungliga anropet från webbläsaren, inte det som skrivits om av serverns interna regler.

Behöver jag sätta upp en redirect om sajten bara fungerar över HTTPS?

Ja. HTTPS och indexdubbletter är två oberoende frågor. Även med en HTTP→HTTPS-redirect uppsatt och korrekt rel="canonical" kommer ett direkt anrop till https://site.ru/index.php att returnera en 200-kod utan redirect. Reglerna från metod 1 täcker båda protokollen: RewriteRule anger uttryckligen https:// i mål-webbadressen.

Hur verifierar jag att redirecten inte har förstört sajten?

Tre kontrollpunkter: 1) startsidan öppnas på roten / utan redirects (curl -I ska returnera 200); 2) webbadresser med index.php och index.html returnerar 301 och leder till /; 3) WordPress admin (/wp-admin/) fungerar utan loopar. Den sista punkten är kritisk: en dåligt skriven regel i .htaccess kan fånga upp anrop till index.php inuti admin och förstöra inloggningen. Konstruktionen från metod 1 är säker: den kontrollerar exakt URI-matchning och rör inte /wp-admin/index.php.

Vad sägs om andra indexfiler som index.aspx eller index.py?

Mekaniken är densamma: kopiera RewriteCond + RewriteRule-blocket, ersätt filändelsen och lägg till det i .htaccess. För icke-standardiserade filändelser, se till att filen fysiskt finns i roten och är listad i DirectoryIndex; annars kan servern ändå inte servera den som en indexfil och ingen redirect kommer att behövas.

Hantera indexfilsdubbletter: slutlig checklista

Att sätta upp en 301 redirect från index.html och index.php till roten är en uppgift av typen "fem minuters arbete, år av skydd". Regeln lever i .htaccess eller index.php transparent och kräver inget underhåll när du byter design eller flyttar till ett annat webbhotell.

Steg att ta efter att ändringarna gjorts:

  • Verifiera redirecten via curl -I eller redirectchecker.com; svaret ska vara 301.
  • Se till att startsidan öppnas på roten med en 200-kod.
  • Sök efter href="/index.php" och href="/index.html" i sidans källkod; ersätt varje förekomst med href="/".
  • I Google Search Console, kör en inspektion av startsidan; roboten ska se en 200 och den kanoniska webbadressen utan /index.php.

Efter detta kommer dubbletter gradvis att försvinna från rapporten "Täckning" i Search Console och backlink-kraften kommer att koncentreras på en enda kanonisk sida. Resultatet är inte omedelbart (sökmotorn behöver tid för att crawla om), men det är oundvikligt.