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;