HTTP-Status-Code 301 und cflocation: Ein Ärgernis

Mischa Sameli, Geschäftsführer & Leiter Entwicklung

Ein ganz haariges Phänomen ist mir im Zusammenhang mit einer Suchmaschinenoptimierung untergekommen. Und zwar hat die Suchmaschinenoptimier-Firma gewünscht, dass wir einen speziellen HTTP-Statuscode allen Seiten mitliefern. Und das wie ich meine ganz zurecht. Nur war das cms zu Beginn widerspenstig…

Wir kennen Links im Stile von www.backslash.ch/default.cfm?treeID=12&domainID=1&language=de. Der Browser ruft also die Seite default.cfm auf. Hier wird ermittelt, auf welche Seite weitergeleitet werden soll: http://www.backslash.ch/xml_1/internet/de/application/d12.cfm. So, der Browser ruft also default.cfm auf und wird weitergeleitet. Dies geschicht bei unserer Programmiersprache ColdFusion mit dem dem Tag "cflocation":

1<cflocation url="/xml_1/internet/de/application/d12.cfm"> </cflocation>
Wenn man jetzt zur Kenntniss nimmt, dass Suchmaschinen Weiterleitungen zwar tolerieren aber nicht gerade lieben, gibt man ihnen einen Hinweis auf die Weiterleitung. Dafür haben wir eben die erwähnten HTTP-Statuscodes zur Verfügung. Der bekanntestes Statuscode ist wohl der "404" – Seite oder Dokument nicht gefunden. 200 steht zum Beispiel für OK – weitere Erklärungen zu Statuscodes findet man übrigens auch beim cms3-Linkchecker. Nun aber wieder zurück zum eigentlichen Thema. Die einfachste Methode, einen Statuscode mitzugeben, ist bei ColdFusion so:
1<cfheader statuscode="301" statustext="Moved Permanently"> </cfheader>
Korrekterweise würde das im cms3 auf der Seite default.cfm dann so aussehen:
1<cfheader statuscode="301" statustext="Moved Permanently"> <cflocation url="/xml_1/internet/de/application/d12.cfm"> </cflocation>
Wenn man nun die zurückgelieferten Header-Daten anschaut (im Firefox mit der Extension LiveHTTPHeaders, zum Download unten noch ein Tool für den IE), wird man leider feststellen, dass das Resultat nicht ganz den Erwartungen entspricht: 302 – Moved Permanently. Naja 302 ist eben nicht exakt 301. Aber weshalb wird aus 301 auf einmal 302? Is it a feature or is it a bug? Nun, die Weiterleitung mit cflocation generiert automatisch den Statuscode 302, da kann man manuell eingreifen wie blöd. Daran lässt sich nichts ändern. Erst in der aktuellen ColdFusion-Version 8 hat der der CF-Tag das Attribut Statuscode erhalten. Rettung naht also. In der Zwischenzeit muss man sich eines anderen Tricks behelfen. Und zwar mit einer anderen Art der Weiterleitung:
1<cfheader statuscode="301" statustext="Moved Permanently"> <cfheader name="Location" value="/xml_1/internet/de/application/d12.cfm"> <cfabort> </cfabort>
Manchmal bereiten schon die kleinen Geschichten grosses Kopfzerbrechen…