En tant qu’hébergeur spécialiste WordPress et webmaster spécialiste WordPress, j’interviens régulièrement sur des sites multilingues avec traduction automatique. Pour cela, j’utilise généralement TranslatePress Developer edition, avec l’API DeepL pour opérer cette traduction. Le problème ? Tout traduire d’un coup n’est pas possible nativement. Alors il a fallu trouver une solution. Découvrez cette solution et gagnez des heures !
Problème : La traduction du site complet en une fois n’est pas possible.
Avec TranslatePress, la traduction du contenu de vos pages et articles et surtout de leurs URLs (disponible uniquement en version payante) n’intervient qu’une fois que quelqu’un a visité la page.
Or on voudrait que toutes les URLs soient à jour, pour éviter qu’elles ne changent pour Google et génèrent des redirections 301, voire pire, des erreurs 404.
Sur les petits sites, on peut visiter chaque page et article dans chaque langue.
Pour un site qui a des centaines de pages et articles, tout visiter à la main prendrait des heures.
Alors comment faire ?
Solution : Visiter tout le sitemap automatiquement !
La solution est la suivante : Créer un script qui visite toutes les pages de votre site, en s’appuyant sur son SiteMap.
Votre site n’a pas de SiteMap ? Cliquez ici pour plus de détails.
Un SiteMap est une page, généralement au format XML, que vous pouvez transmettre aux moteurs de recherche (typiquement la Google Search Console) pour lui faciliter le référencement de toutes les pages de votre site. Cela est plutôt indispensable avec les standards actuels.
Si vous n’avez pas encore de SiteMap, cela peut s’ajouter facilement grâce par exemple au plugin WordPress RankMath SEO.
Ensuite vous devez avoir un terminal supportant BASH. Sous Linux et Mac, c’est natif. Sous Windows, il est possible que le powershell supporte BASH, mais alternativement, je vous conseillerais plutôt d’installer WSL. Si vous avez accès SSH à un serveur Linux, cela fonctionne évidemment parfaitement.
Le script
Pour gagner du temps, je me suis aidé de ChatGPT pour faire le script suivant. Celui-ci va récursivement visiter toutes les URLs de votre sitemap.xml via curl.
Vous pouvez appeler ce script par exemple « sitemap_visitor.sh », le rendre exécutable (chmod +x sitemap_visitor.sh), puis l’exécuter avec votre sitemap.
Les deux arguments à indiquer sont :
- L’URL de votre site
- La durée d’attente entre chaque requête (vous pouvez mettre 0 si vous avez confiance en votre serveur, et en votre consommation d’API de traduction)
Par exemple :
./sitemap_visitor.sh https://wwww.votresite.fr/sitemap_index.xml 1
Le script :
#!/bin/bash
sitemap_url="$1"
delay="$2"
declare -A visited_sitemaps # Declare an associative array to track visited sitemaps
# Function to visit all URLs in a sitemap
visit_sitemap_urls() {
local current_sitemap="$1"
# Check if the sitemap has already been visited
if [[ ${visited_sitemaps["$current_sitemap"]} ]]; then
echo "Skipping already visited sitemap: $current_sitemap"
return
fi
# Mark the current sitemap as visited
visited_sitemaps["$current_sitemap"]=1
# Fetch the sitemap
echo "Fetching sitemap from: $current_sitemap"
sitemap_content=$(curl -s -L "$current_sitemap") # Added -L to follow redirects
if [[ -z "$sitemap_content" ]]; then
echo "Failed to fetch sitemap. Skipping."
return
fi
# Extract URLs from the sitemap using grep and sed
urls=$(echo "$sitemap_content" | grep -oP '(?<=<loc>).*?(?=</loc>)')
if [[ -z "$urls" ]]; then
echo "No URLs found in the sitemap. Skipping."
return
fi
echo "Found $(echo "$urls" | wc -l) URLs in the sitemap."
# Visit each URL
while read -r url; do
echo "Visiting: $url"
response_code=$(curl -o /dev/null -s -w "%{http_code}" -L "$url") # Added -L here too
if [[ "$response_code" == "200" ]]; then
echo "Successfully visited: $url"
else
echo "Failed to visit $url: HTTP $response_code"
fi
# Respectful crawling: wait between requests
sleep "$delay"
# Check if the URL is another sitemap
if [[ "$url" == *.xml ]]; then
echo "Found nested sitemap: $url"
visit_sitemap_urls "$url"
fi
done <<< "$urls"
}
visit_sitemap_urls "$sitemap_url"
Vous avez maintenant traduit votre site WordPress en entier !
J’espère que vous aurez gagné des heures grâce à cette astuce !
Pour un site d’une centaine de pages, et 5 langues additionnelles, cela m’a coûté un peu moins de 20€ d’API DeepL (+4.99€ d’abonnement). Votre expérience peut varier, alors pensez bien à définir des plafonds, que ce soit dans TranslatePress ou DeepL.

PS : Cette solution permet également de mettre en cache l’intégralité de votre site après un vidage de celui-ci. 😜
Déjà client LRob et vous souhaitez traduire votre site ?
Vous cherchez un hébergeur compétent et impliqué dans WordPress ?
Ou un Webmaster ?
Choisissez LRob !
Laisser un commentaire