Sitemap.xml ?
Un sitemap.xml est un fichier qui liste toutes les URLs importantes de votre site web. Il permet de guider Google et les autres moteurs de recherche à indexer votre site. Mettre en place un sitemap.xml fait partie des bonnes pratiques (actuelles).
Le fait qu'il s'agisse d'un fichier XML montre que cette pratique date un peu, aujourd'hui on ferait plutôt un fichier JSON, surtout au vu des données contenues qui ne mérite pas un format de fichier complexe. Mais, bon, c'est la norme... Alors on va faire du XML.
Un script bash pour générer votre sitemap.xml
Pour faciliter la création et la mise à jour de votre sitemap.xml, j'ai développé un petit script bash qui automatise ce processus. Voici ses principales caractéristiques :
- Génération automatique : Le script parcourt votre site et crée le sitemap.xml sans intervention manuelle.
- Mise à jour facile : Vous pouvez exécuter le script régulièrement pour maintenir votre sitemap à jour.
- Simplicité d'utilisation : Il suffit de fournir l'URL de votre site pour générer le sitemap.
#!/bin/sh
if [ $# -ge 1 ]; then
echo "Génère le sitemap.xml de $1"
else
echo
echo "Usage: make-sitemap.sh https://mon-site-web.com";
echo
exit;
fi
echo '<?xml version="1.0" encoding="UTF-8"?>' > sitemap.xml
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' >> sitemap.xml
# on récupère toutes les URL du site avec HTML (ou /)
wget --spider --no-check-certificate --force-html -r -l 0 \
-R "*.jpg" -R "*.png" -R "*.jpeg" -R "*.css" -R "*.js" -R "*.svg" -R "*.pdf" \
$1 2>&1 | grep '^--' | awk '{ print $3 }' | grep '\(html\|/\)$' | sort | uniq >urls.txt
while read url; do
# on récupère uniquement le header --spider --server-response
# on récupère le champ LastModified qui est à au format "%a, %d %b %Y %H:%M:%S GMT"
LAST=`wget --spider --server-response $1 2>&1 | grep Last-Modified | sed 's/.*ed: //'`
# on doit forcer la langue en anglais, car HTTP renvoie la date en anglais...
# on convertit le format pour être compatible avec sitemap.xml +"%Y-%m-%dT%H:%M:%S%:z"
DATE=''
# MacOX
if test `uname` = 'Darwin'; then
DATE=`LANG=en_US.UTF-8 date -j -f "%a, %d %b %Y %H:%M:%S GMT" "$LAST" +"%Y-%m-%dT%H:%M:%S%:z"`
fi
# Linux
if test `uname` = 'Linux'; then
DATE=`LANG=en_US.UTF-8 date --date "$LAST" +"%Y-%m-%dT%H:%M:%S%:z"`
fi
(
echo " <url>"
echo " <loc>$url</loc>"
echo " <lastmod>$DATE</lastmod>"
echo " </url>"
) >> sitemap.xml
done < urls.txt
rm urls.txt
echo '</urlset>' >> sitemap.xml
Comment ça marche ?
- Le script utilise wget pour récupérer le contenu de votre site.
- Un petit peu de grep, awk, sort, uniq, pour générer un fichier urls.txt avec toutes les URL des pages web.
- On génère ensuite le sitemap avec de simples echo.
- On re-utilise wget pour chaque URL afin de récupérer la date de dernière modification de la page.
Une remarque pour le format de la date... HTTP renvoie une date dans le format ISO 8601, il faut donc le lire en définissant le format -f "%a, %d %b %Y %H:%M:%S GMT", mais en plus, la date est en anglais (et mon terminal est en français), d'où le LANG=en_US.UTF-8 qui précède la commande. La date dans le fichier sitemap.xml est au format W3C Datetime soit de l'ISO 8601.
Sur le site web
Il vous reste à mettre le fichier sitemap.xml à la racine de votre site web, puis à ajouter une ligne dans votre fichier Robots.txt : Sitemap: https://votre-site-web/sitemap.xml
Evidemment, il faut refaire le sitemap.xml à chaque modification du site, ce que vous pouvez faire en crontab facilement.
Commentaires