Genereer zelf Sitemaps
Heb je eindelijk na dagen, weken, maanden ploeteren een fatsoenlijke website in elkaar geknusteld, vol met de laatste snufjes conform de eisen van de web 2.0 websurfer (jQuery, FLIR image replacement, shadowbox, je eigen videoconverter a la Youtube, uiteraard XHTML correct, meertalige SEO vriendelijke URL’s) dan zou eigenlijk het hele internet alles uit hun handen moeten laten vallen en meteen naar je website moeten komen kijken.
Wat heb je aan een fatsoenlijke website als niemand er komt kijken? Bar weinig en daarom heb je natuurlijk een heleboel handige tools en weetikwat’s om je site te promoten.
Een goed begin is het maken van een degelijke sitemap. Sitemaps ze komen eigenlijk in 2 smaken, een gebruikersvriendelijke variant en een voor de zoekmachines/webcrawlers (zonder opmaak):
- De HTMLvriendelijke; zie je vaak bij uitgebreide websites om bezoekers te helpen wegwijs te worden op de website. Alle beschikbare pagina’s staan er op.
- Een voor Webcrawlers; die de website dan makkelijker kunnen doorlopen en indexeren, met o.a. een prioriteitstag, hoe belangrijk de pagina is. Wanneer de pagina voor het laatst is bijgewerkt
Het maken van een ingebakken Sitemap generator in een website is geen overbodige luxe. En een vaak vergeten functionaliteit. Alle beschikbare pagina’s van een website nalopen kan (afhankelijk van de opbouw van de website) een intensief proces zijn. Gelukkig zijn er ook tools om van buitenaf de website zelf te spideren en een sitemap te maken. Tuurlijk zijn er allerlei ‘handige’ plugins te vinden, maar als het echt wilt hebben zo als jij wilt hebben, dan doe je het zelf. Enter Wget…
Wget is your best friend
Wget is een krachtige unix tool die (ook beschikbaar voor Windows) die via http/ftp allerlei manieren (onderdelen van websites) kan nalopen, downloaden en archiveren. Het kan als spider worden gebruikt of als website mirror dienst, download tool en veel meer. In ons geval gebruiken we Wget om een website na te lopen en dan gevonden interne links ook te volgen. Alle resultaten worden opgeslagen in een log bestand wat we later gaan aanpassen om alle gevonden resultaten uit te filteren. In een console:
wget -m --follow-tags=a --reject=jpg,bmp,png,js,gif,css,flv,pdf,login --no-directories -o spider_results.txt --delete-after -erobots=off http://www.eeble.nl
- -m = mirror de website
- follow-tags = a levert alleen de anchor tags op
- –reject = negeer links met deze woorden in de URL
- –no-directories = geen lokale kopie van directories aanmaken (scheelt weer ruimte)
- –delete-after = verwijder bestanden na downloaden (scheelt weer ruimte)
- -erobots=off = negeer robots.txt
Dit levert een bestand genaamd spider_results.txt waar alle gevonden resultaten in terecht komen. Met een simpel cat opdrachtje wordt de output leesbaar. In een console type:
cat spider_results.txt | grep http://www.eeble.nl | cut -d ' ' -f4 | sort -u
En dat ziet er dan weer zo uit:
http://www.eeble.nl/ http://www.eeble.nl/11/home http://www.eeble.nl/11/tetris.html http://www.eeble.nl/13/research.html http://www.eeble.nl/15/playground.html http://www.eeble.nl/16/technieken.html http://www.eeble.nl/17/links.html http://www.eeble.nl/18/hosting.html http://www.eeble.nl/1/home.html http://www.eeble.nl/4/vacature.html http://www.eeble.nl/6/contact.html http://www.eeble.nl/blog http://www.eeble.nl/blog/2008/08 http://www.eeble.nl/blog/2008/09 ...
Dan is nog een php script om de resultaten weer te geven als XML bestand:
<php?
$logfile = sitemap.txt;
if (is_readable($logfile)) {
if ($links = file($logfile)) {
if (count($links = array_filter(array_map('trim', $links),'strlen'))>0) {
sort($links, SORT_STRING);
$out ="\n
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n
xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n";
foreach($links as $link) {
$num = substr_count($link,'/')-3;
$out .= " \n ".trim(htmlentities($link))."\n";
$out .= sprintf("%F\n \n",(1-$num/10*2));
}
$out .= "</urlset>";
//output maken
header ("content-type: text/xml");
echo $out;
exit(0);
}
}
} else { //404 terug geven
header("HTTP/1.0 404 Not Found");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
exit(0);
}
?>

19 februari 2009 om 13:53
Als je nou
wget -m --follow-tags=a --reject=png,js,gif,css,flv,pdf,login --no-directories --delete-after -erobots=off http://www.eeble.nl -O - grep http | grep -v following | cut -d ‘ ‘ -f3 | sort -u
doet dan kun je je dat intermediaire spider_results.txt-bestand overslaand. stdout FTW!
4 maart 2009 om 15:20
Hallo Wicher,
Dank voor je toevoeging, alleen lijkt dat niet (altijd) te werken. Ik neem aan dat jij het op je eigen bakkie wel hebt getest. Maar op onze servers/bakkies krijgen we een ‘broken pipe’.