Detta dokument var skrivet 2006-05-04 och senast uppdaterat 2007-11-02 av Mattias Nordin

Att tänka på när man skapar en egendesignad felkodsida på sin webserver.
Lyxen att manipulera statusmeddelande som error 404 gäller bara de få utvalda som har tillgång till en egen webserver. Förändringarna göres alltså på servern och har du inte denna access så är nog resten av sidan ganska ointressant.

Här följer några tips och varningar till hur man editerar de inbyggda statusmeddelande som visas av Internet Information server 6...



Varför existerar dessa felkoder?

Webserven skickar alltid med ett svar i sin HTTP header. I svaret så ingår en status kod. Status 200 betyder att allt är OK. När något felaktigt inträffas så skickas förutom status kod till klienten även ett felmeddelande. Detta felmeddelande går att editera. Det kommer vi till senare. Det finns fem klasser av statuskoder.

Alla statuskoder som börjar på 1xx representerar information.

Alla statuskoder som börjar på 2xx representerar att något gått bra.

Alla statuskoder som börjar på 3xx representerar forwardering eller hänvisning.

Alla statuskoder som börjar på 4xx representerar klient fel

Alla statuskoder som börjar på 5xx representerar server fel.

Den absolut mest kända statuskoden är error 404, som betyder att sidan inte har hittats på angiven address. I och med att statuskoden är så inarbetad som en felkod så kan jag, förvirrande, använda båda begreppen nedan.

Bild på ett vanligt, icke editerat, 404 meddelande:





Var finns mallen för dessa felsidor?

På en defaultinstallerad Internet information server så hittar du felmeddelandesidorna i följande katalog:

C:\WINDOWS\Help\iisHelp\common

Felmeddelandefilerna är skapade i html format och är därmed väldigt lätta att redigera.



Vad betyder dessa felkoder?

Innan man börjar redigera filerna så är det bra att veta i vilka sammanhang som dessa statuskoder returneras till användaren. Här kommer en sammanställning av olika statuskoder som IIS kan returnera:

HTTP relaterade felkoder...

1xx - Informational

2xx - Success

3xx - Redirection

4xx - Client Error

5xx - Server Error

Common HTTP Status Codes and Their Causes

Jag har markerat de statuskoder som är vanligast. Statuskod 200 får du varje gång du besöker en websida om den laddas utan problem. Felkod 404 är du nog van vid, den får man om man skriver en adress som är felaktig.
Anledningen till att jag tar med statuskod 301 är att den är viktig att använda om du vill sökmotoroptimera din website. För att underlätta för google & CO så bör du skapa en sida som returnerar statuskod 301 samt en hänvisning till den nya adressen. Gör man inte det så kommer google att ta bort sida A och sedan indexera om sida B vid tillfälle, förutsatt att det finns en länk till den sidan. Under tiden detta sker så finns risken att man tappar plaseringar i den organiska listan.



Går det att editera alla statussidor?

Nej, det går inte att editera följande statussida: 400, 403.9, 411, 414, 500, 500.11, 500.14, 500.15, 501, 503, and 505.



Skapa en egen 404 sida.

Det går att styra vilken sida som ska visas när ett visst fel inträffar. Detta gör man i Internet Information Services (IIS) manager verktyget (se bild ovan). Endera så editerar du existerande mall filer, och detta är absolut enklast för då fungerar även response.header returen till klienten med automatik (mer om det senare), eller så pekar du ut en egen informationssida på din lokala website. Med denna metod är det mycket enkelt att skapa en egendesignad felkodssida som ger besökaren möjlighet att söka sig vidare på din website trots att ingångssidan inte längre existerar.

Sökväg till egenskap felkodssida.

\errors\404.asp

Om du väljer URL (egen sida) som typ så måste sidan existera på din lokala website. Använd en sökväg relativ till din webroot.

Notera att default så ändrar du om felsidan för hela webservern för ett specifikt felmeddelande. Har du flera websiter på samma server så kan detta bli ett problem. Detta går dock att råda bot på genom att kopiera hela felkodskatalogen (alternativt din enda felkodsfil) och lägga den under respektive webroot. Öppna sedan upp IIS admin interfacet på webservern och mappa om filerna till den nya sökvägen.

  1. Open up MMC.
  2. Choose the web site, where you want to map custom error messages, by clicking on the site within the MMC tree.
  3. Right click and choose Properties from the drop down menu.
  4. From with the properties dialog choose the Custom Error tab.
  5. From the Error messages for HTTP errors list, choose the error you wish to map.
  6. Once the error is chosen, click on Edit Properties button near the bottom of the dialog.
  7. Within the Error mapping Properties dialog change the Message type to URL.
  8. In the URL text box type in the URL of the new custom error.
  9. Click on OK, then OK again to save the changes




Vanliga fel vid egendesignad felkodssida!

Varje gång någon använder en webläsare och försöker hämta en websida så svarar webservern med en status kod innan websidan laddas upp. Denna status kod ligger i något som kallas response header.

Exempel på en HTTP header när du besöker en websida som existerar:

HTTP/1.1 200 OK
Content-Type: text/html
Connection: close

Exempel på en HTTP header när du besöker en websida som inte existerar:

HTTP/1.1 404 Not Found
Content-Type: text/html
Connection: close

Ett problem som uppstår om man ersätter den inbyggda felkodsidan i IIS är att man glömmer bort att felkodsidan måste returnera status koden som motsvarar det felmeddelande man ersatt. Till exempel, har du ersatt felkodsidan 404 med din egna www.minSajt.se/error404.htm så måste även denna returnera HTTP header 404 (sidan hittas ej). I och med att webservern är tillsagd att forwardera besökaren till www.minSajt.se/error404.htm och den sidan faktiskt existerar så kommer HTTP header 200 (sidan funnen) returnerars. Detta innebär att sidor som har indexerats av en sökmotor tenderar till att bli felaktiga och risken att ni glider ner i den organiska listan är stor.



Hur styr jag vilken response kod som ska visas?

I de flesta fall så räcker det med att lägga till en vbscript (ASP) kod överst på sidan.

Exempel på en korrekt 404:

<%@ Language=VBScript %>
<% Response.Status = "404 Not Found" %>

Exempel på hur man returnerar 401 (tillträde förbjudet) för en specifik dator.

<%
ip = request.ServerVariables("REMOTE_ADDR")
if ip <> "194.248.333.500" then
response.Status="401 Unauthorized"
response.Write(response.Status)
response.End
end if
%>

Exempel på 301 (permanent flyttad sida).

Om du har en populär websida med en hög page rank och en bra placering på Googles organiska lista, då är det av intresse att denna page rank följer med om du flyttar din websida, eller byter namn på filen.
Detta går att göra genom att använda HTTP response 301 som betyder "sidan är permanent flyttad".

Om google hittar en sådan sida så ska google ändra i sitt register, ta bort den gamla sidan men behålla alla indexerade keywords, page rank osv, och flytta dessa till den nya sidan.

<%@ Language=VBScript %>
<%
' Permanent redirection
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.somacon.com/"
Response.End
%>

Gul markering visar var du skriver addressen till den nya sidan.



Hur ser jag vilken HTTP header kod som returneras?

Rex Swain har skapat ett online verktyg som hittas här.

Är den för teknisk för din smak så kan du ladda hem en plugin till Firefox som heter Live HTTP headers

När Live HTTP headers är installerad så gör du så här:
1) Surfa till din website.
2) Skriv in en felaktig länk. Till exempel: http://mattiasNordin.Net/felaktigAddress.asp
Du kommer då till en egenskapad felsida
3) Högerklicka på sidan, välj sedan "Visa sidinfo".
4) Välj tab "Headers".
5) Se nedre delen, response headers.

Exempel på en felaktig 404 sida:

Notera att sidan returnerar kod "200 OK" trots att det är en "404" sida.





Dynamisk felkodssida (ASP)

Nedan ser ni en bild på min egen server response sida. Den spar alla besökstillfällen i en databas. På så sätt bra koll på vilka sidor som användarna tror sig ska finnas på min website. Det märks även när jag har skapat sidor som innehåller en felaktig länk till en bild och liknande. Ett bra sätt att se fel och trafikmönster. Du märker här om tex googles spindel varje dag försöker besöka en sida som du raderat för ett år sedan. Om detta inträffar då vet du att du inte returnerar status 404 på ett korrekt sätt. Jag har själv lärt mig den hårda vägen ;)

Det finns en hel del att tänka på när man gör sina customiserade 404 sidor. Jesper Tverskov har skrivit "User friendly 404 error messages reconsidered". Läs den!

Sidan ovan är en hemmabyggd ASP sida som ersätter en del av serverns standardfelkodssidor. En förutsättning var att det gick att plocka fram felkoden dynamiskt. Och det går...

Med ASP går det att hämta både serverns response kod etc... Här kommer ett exempel:

<%@ Language=VBScript %>
'===== VISA ERROR INFORMATIONEN =====
varErrorUserCameFrom = Request.Servervariables("HTTP_REFERER")
varErrorUserIp = Request.Servervariables("REMOTE_ADDR")
varErrorString = Request.ServerVariables("QUERY_STRING")
If (Len(varErrorString) > 4) Then
varErrorCode = left(varErrorString,3)
varErrorUserSearchedFor = Right(varErrorString,Len(varErrorString)-4)
End If

'SPARA TILLFÄLLET DÅ ICKEEXISTERANDE SIDA ACCESSADES...
sql = "INSERT INTO T_error_log "
sql = sql & "(error_code, error_date, server_url, by_ip, http_referer) "
sql = sql & "Values('" &varErrorCode &"',"
sql = sql & "#" &now() &"#,"
sql = sql & "'" &varErrorUserSearchedFor &"',"
sql = sql & "'" &varErrorUserIp &"',"
sql = sql & "'" &varErrorUserCameFrom &"')"
'response.write("INSERT: " &sql)
connect.execute(sql)
%>




Citat från Google

" Remove an outdated link
Google updates its entire index automatically on a regular basis. When we crawl the web, we find new pages, discard dead links, and update links automatically. Links that are outdated now will most likely "fade out" of our index during our next crawl.

Note: If you believe your request is urgent and cannot wait until the next time Google crawls your site, use our automatic URL removal system. We'll accept your removal request only if the page returns a true 404 error via the http headers. Please ensure that you return a true 404 error even if you choose to display a more user-friendly body of the HTML page for your visitors. It won't help to return a page that says "File Not Found" if the http headers still return a status code of 200, or normal. "








Källor: Microsoft Article ID : 318380, IT-guru Mattias Nordin.