Indexation des URLs via l'API Google Indexing

Apprenez à utiliser l'API Google Indexing avec Python pour accélérer l'indexation de vos pages web dans les résultats de recherche.

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

  1. Accédez à la console Google Cloud.
  2. Créez un nouveau projet.
  3. Dans IAM & Admin > Comptes de service, ajoutez un nouveau compte de service.
  4. Une fois créé, générez une clé JSON et téléchargez-la.
  5. Activez l'API Indexing via API & Services > Bibliothèque.

2. Ajouter le compte de service comme propriétaire de Google Search Console

  1. Ouvrez la Google Search Console.
  2. Sélectionnez votre propriété.
  3. 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.