ursus contionabundo: Sitemap

Beitrag lesen

Verwendest Du ein CMS oder ähnliches? Dann ist der eigentlich beste Weg ist das Erzeugen der Sitemap aus den Daten selbst.

Eien weitere Alternative:

Ich erzeuge direkt auf dem Server (in einer ssh-Sitzung) mit den wunderbaren Tools wget, sed, sort und grep eine sitemap.txt. Das Skript funktioniert auch als Kindprozess in PHP. Allerdings sollte man dann - bei großen Webseiten und/oder einer waittime zwischen Abrufen einem trickreich dafür sorgen, dass entweder die Verbindung zum Client (Browser) nicht abbricht oder der Prozess im Hintergrund gestartet wird.

Pass aber auf: Wenn mod_evasive benutzt wird sollte entweder waitTime auf einen niedrigen ganzzahligen (Sekunden-)Wert != 0 gesetzt werden (z.B. 1) oder eben dieses mod_evasive sollte aus seiner Konfiguration wissen, dass für die eigenen also (127.0.0.1, IP($host)) Ausnahmen gelten (Mir ist es im ersten Anlauf gelungen, mich selbst eine Weile auszusperren).

In der Zeile mit den vielen "grep -v" entferne ich Funde, die ich nicht in der sitemap.txt haben will. Da habe ich leider noch etwas im Programmblock stehen, was eigentlich in dessen Settingsblock stehen soll.

#!/bin/bash ## Settings: export LANG="de_DE.utf8"; host="www.example.com"; protokoll="https"; sitmapFile="/var/www/${host}/sitemap.txt"; waitTime=0; ## Run! oldPwd=$(pwd); tmpFile=$(mktemp); tmpDir=$(mktemp -d); cd ${tmpDir}; wget -w ${waitTime} -mr ${protokoll}://${host} 2>&1 | grep -P "^--\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d-- " | sed "s/^.* //" | grep -v "C=S" | grep -v "C=M" | grep -v "C=N" | grep -v "download=1"| grep -v "opensearch.xml" > ${tmpFile} cd ${oldPwd}; tmpFileSorted=$(tempfile); sort -u < ${tmpFile} >> ${tmpFileSorted}; cat < ${tmpFileSorted} > ${sitmapFile}; #clear: rm -rf ${tmpDir} 2> /dev/null; rm -f /tmp/sitemap.* 2> /dev/null; rm ${tmpFile} 2> /dev/null; rm ${tmpFileSorted} 2> /dev/null;