Introduction
L'indexation rapide des pages web est cruciale pour le SEO. L'API Google Indexing permet de notifier Google de la création ou de la mise à jour des URLs, accélérant ainsi leur indexation sans attendre le passage des robots d'exploration. Ce script automatise ce processus en récupérant les URLs d'un sitemap et en les envoyant à l'API Google Indexing. Merci Patrick pour ce script bien utile.
Vous pouvez trouvez le code fonctionnel et utilisable directement depuis ce Notebook Google Colab
Prérequis
Avant d'exécuter le script, plusieurs étapes sont nécessaires pour configurer l'accès à l'API Google Indexing :
1. Créer un compte de service pour l'API Google Search Console
- Accédez à la console Google Cloud.
- Créez un nouveau projet.
- Dans IAM & Admin > Comptes de service, ajoutez un nouveau compte de service.
- Une fois créé, générez une clé JSON et téléchargez-la.
- Activez l'API Indexing via API & Services > Bibliothèque.
2. Ajouter le compte de service comme propriétaire de Google Search Console
- Ouvrez la Google Search Console.
- Sélectionnez votre propriété.
- Dans Paramètres > Utilisateurs et autorisations, ajoutez l'adresse e-mail du compte de service en tant que propriétaire.
3. Installer les bibliothèques nécessaires
Le script utilise plusieurs bibliothèques Python. Installez-les avec la commande suivante :
pip install requests beautifulsoup4 pandas oauth2client httplib2
Explication du Code
1. Importation des bibliothèques
Le script commence par importer les bibliothèques nécessaires :
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
import json
2. Définition des paramètres
On définit l'URL du sitemap et le fichier JSON contenant la clé d'authentification Google :
sitemap_url = 'https://www.website.tld/sitemap.xml'
JSON_KEY_FILE = "cle-google.json"
3. Récupération des URLs depuis le sitemap
Le script récupère les URLs listées dans le fichier XML du sitemap :
response = requests.get(sitemap_url)
xml_content = response.content
soup = BeautifulSoup(xml_content, "xml")
urls = [loc.text for loc in soup.find_all("loc")]
df_url = pd.DataFrame(urls, columns=["URL"])
4. Authentification à l'API Google Indexing
On configure l'authentification en utilisant le fichier JSON de clé de service :
SCOPES = ["https://www.googleapis.com/auth/indexing"]
credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, scopes=SCOPES)
http = credentials.authorize(httplib2.Http())
5. Fonction d'indexation des URLs
Cette fonction envoie chaque URL à l'API Google Indexing pour la notifier de sa mise à jour :
def indexURL(urls, http):
ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
for u in urls:
content = {}
content['url'] = u.strip()
content['type'] = "URL_UPDATED"
json_ctn = json.dumps(content)
response, content = http.request(ENDPOINT, method="POST", body=json_ctn)
result = json.loads(content.decode())
if("error" in result):
print("Error({} - {}): {}".format(result["error"]["code"], result["error"]["status"], result["error"]["message"]))
else:
print("Success: {}".format(result["urlNotificationMetadata"]["latestUpdate"]["url"]))
6. Application de la fonction sur les URLs du sitemap
Enfin, on applique la fonction d'indexation à chaque URL récupérée :
df_url[["URL"]].apply(lambda x: indexURL(x, http))
Code complet
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
import json
# Paramètres
sitemap_url = 'https://www.website.tld/sitemap.xml'
JSON_KEY_FILE = "cle-google.json"
# Récupérer le liens dans le fichier xml
response = requests.get(sitemap_url)
xml_content = response.content
soup = BeautifulSoup(xml_content, "xml")
urls = [loc.text for loc in soup.find_all("loc")]
df_url = pd.DataFrame(urls, columns=["URL"])
# Connexion à l'api Google
SCOPES = ["https://www.googleapis.com/auth/indexing"]
credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, scopes=SCOPES)
http = credentials.authorize(httplib2.Http())
# Fonction d'indexation des urls
def indexURL(urls, http):
ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
for u in urls:
content = {}
content['url'] = u.strip()
content['type'] = "URL_UPDATED"
json_ctn = json.dumps(content)
response, content = http.request(ENDPOINT, method="POST", body=json_ctn)
result = json.loads(content.decode())
if("error" in result):
print("Error({} - {}): {}".format(result["error"]["code"], result["error"]["status"], result["error"]["message"]))
else:
print("Success: {}".format(result["urlNotificationMetadata"]["latestUpdate"]["url"]))
# Application de la fonction
df_url[["URL"]].apply(lambda x: indexURL(x, http))
Conclusion
Ce script permet d'accélérer l'indexation des pages d'un site en automatisant l'envoi des notifications à Google via son API Indexing. En l'intégrant à un processus automatisé, il garantit une mise à jour rapide des résultats de recherche après chaque modification du site.