Google Sheets IMPORTXML : la magie du web scraping pour le SEO

Jedfolio
Publié le septembre 18, 2025

La majorité des journées d’un consultant SEO est rythmée par la collecte et l’analyse de données pour réaliser différents Audits techniques, analyses de contenus, veilles concurrentielles… ces tâches, bien que cruciales, sont souvent manuelles et chronophages.

Les outils spécialisés sont puissants, mais leur coût n’est pas toujours justifié pour des besoins ciblés ou la création de dashboards personnalisés.

La solution se trouve déjà dans vos favoris : Google Sheets. Loin d’être un simple tableur comme Excel (RIP mon ancien tableur favoris), Google Sheets possède une fonction capable de le transformer en un redoutable outil de web scraping : IMPORTXML. Loin d’être aussi performant que Screaming Frog, vous aurez néanmoins la possibilité sur de petits sites, de scraper de manière gratuite, et directement intégrée à votre environnement de travail, afin d’automatiser la collecte de données depuis n’importe quelle URL.

Ce guide complet est votre passeport (mais le mien aussi, que j’avais dans mes cartons depuis notre cher Matt Cutts pour les anciens) pour maîtriser les bases de « IMPORTXML« . Des fonctions de base pour sécuriser vos formules aux requêtes XPath les plus complexes, en passant par une section de dépannage exhaustive, vous aurez toutes les clés pour automatiser vos audits et analyses SEO dès aujourd’hui.

Consolider les formules Google Sheets pour le scraping SEO

Avant de scraper, il faut sécuriser, c’est la 1ère base nécessaire. Une formule qui retourne des erreurs comme #N/A est le pire ennemi d’un tableau de bord propre et fonctionnel. Déjà à titre personnel car le tableau sera moins lisible, pleins d’erreurs et si vous utilisez d’autres formules dépendantes des valeurs de ces cellules…. Vous allez avoir des erreurs en chaine.
Et si vous partagez le Google Sheets à vos clients/prestataires/collègues, le tableau ne reflètera pas votre expertise et risque même de faire fuir.

Maîtrisez ce trio de fonctions pour construire des formules à toute épreuve.

  • IFERROR : Le filet de sécurité. Cette fonction surveille une autre formule. Si la formule réussit, IFERROR n’intervient pas. Si elle échoue et retourne une erreur, IFERROR la remplace par une valeur de votre choix (une cellule vide "", un « 0 », un message…).
    • Syntaxe : =IFERROR(formule; valeur_si_erreur)
  • IF : La logique. C’est le chef d’orchestre qui exécute une action différente selon le résultat d’un test.
    • Syntaxe : =IF(test_logique; valeur_si_vrai; valeur_si_faux)
  • ISURL : Le test. Cette fonction simple vérifie si le contenu d’une cellule est une URL valide. Elle retourne VRAI ou FAUX et empêche IMPORTXML de se lancer sur du vide.
    • Syntaxe : =ISURL(cellule)

Le combo gagnant : Votre structure de base

En les combinant, on obtient une structure de formule quasi indestructible. Pour une URL en A1 :

=IFERROR(IF(ISURL(A1); [VOTRE_FORMULE_IMPORTXML]; ""); "")

Cette ligne de code signifie : « SI la cellule A1 contient une URL valide, ALORS essaie d’exécuter la formule IMPORTXML. SI l’URL n’est pas valide, ne fais rien. Et si JAMAIS une erreur survient pendant tout ce processus, ne fais rien non plus. »

C’est la base de toutes les formules qui suivront. J’essai toujours (le plus possible du moins) d’avoir ces gardes fous pour éviter de faire travailler mon GGsheets pour rien. Par exemple lors d’une charte de nommage ou la remise à plat d’une arborescence, je peux des fois avoir une url protégée, ou une url qui ne soit pas correcte.

IMPORTXML et XPath : je t’aime moi non plus

IMPORTXML est la fonction qui va chercher l’information. Elle a besoin de deux choses : une destination (l’URL) et une adresse précise sur la page (la requête XPath).
SI vous ne maitrisez pas les XPath, vous allez un peu galérer à partir de maintenant. Note pour vous même, les XPath vont être autant magiques et salvateurs que votre pire cauchemar. Mais c’est la base du scraping pour la majorité des outils ou extensions Chrome/Firefox

Lire  Comment réussir la Pagination SEO pour améliorer la visibilité de vos contenus

Syntaxe : =IMPORTXML(url; requête_xpath)

Le XPath : Le GPS de la donnée que vous souhaitez extraire pour votre SEO

Le XPath est un langage de requête qui permet de naviguer dans la structure d’un document HTML. C’est l’élément le plus important à maîtriser. Voici un tableau détaillé de ses opérateurs et fonctions essentiels :

Syntaxe / FonctionDescriptionExemple
Opérateurs de Sélection
/Sélectionne un enfant direct.//head/title (le title qui est enfant de head)
//Sélectionne un élément n’importe où dans le document (descendant).//h2 (tous les h2 de la page)
.Sélectionne le nœud actuel.
*Caractère joker, sélectionne n’importe quel élément.//div[@class='post']/* (tous les enfants du div)
@Sélectionne un attribut.//a/@href (l’attribut href de tous les liens a)
Filtres (Prédicats)
[...]Applique un filtre sur une sélection.//div[@class='price'] (le div avec la classe ‘price’)
[index]Sélectionne un élément spécifique par sa position (commence à 1).(//p)[3] (le troisième paragraphe de la page)
[last()]Sélectionne le dernier élément d’une liste.(//li)[last()] (le dernier li de la liste)
Fonctions Utiles
contains(attribut, 'texte')Vérifie si un attribut contient une chaîne de caractères spécifique (insensible à la casse).//div[contains(@class, 'product')] (le div dont la classe contient ‘product’)
text()Sélectionne le contenu textuel d’un nœud.//a[text()='Contact'] (le lien dont le texte est ‘Contact’)
normalize-space()Supprime les espaces superflus avant et après le texte, et remplace les espaces multiples par un seul.normalize-space((//h1)[1]) (le H1, nettoyé)

Quelques formules prêtes à l’emploi pour un Google Sheet aux petits oignons

Assez de théorie. Passons à la pratique. Voici les formules que j’utilise au quotidien pour mes audits et mes suivis. Prenez-les, adaptez-les, faites-les vôtres.

N’oubliez pas de remplacer A1 par la cellule contenant votre URL. Vous pouvez aussi utiliser mon Google Sheet d’exemples au cas où vous sècheriez sur les formules

Audit SEO On-Page

  • Balise Title : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//head/title"); ""); "")
  • Meta Description : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//meta[@name='description']/@content"); ""); "")
  • Titre H1 (le premier) : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "normalize-space((//h1)[1])"); ""); "")
  • Titre H1 (variante plus complexe pour nettoyer toutes balises HTML dans le titre) : =IFERROR(IF(ISURL(A1); TEXTJOIN( » « ; TRUE; IMPORTXML(A1; « (//h1)[1] »)); «  »); «  »)
  • URL Canonique : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//link[@rel='canonical']/@href"); ""); "")
  • Meta Robots : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//meta[@name='robots']/@content"); ""); "")

Dans ma formule pour la balise Title, je n’utilise pas du tout la formule que l’on trouve partout qui est juste « //title » car on part du postulat qu’il n’y a qu’une seule balise <title></title> dans la page. Hors j’ai déjà eu plusieurs fois sur des sites clients, le cas de figure où une balise <title> était présente dans la page. Donc on a 2 balises <title> mais qu’une seule que l’on souhaite réellement extraire.

Pareil, pour l’extraction du H1, combien de fois on a eu ce chouette site avec plusieurs H1 et soit c’était une erreur/oublie qu’il faut corriger, ou un « t’inquiète frère en HTML5 c’est possible »..

Une mauvaise gestion des canoniques peut anéantir votre SEO. La formule précédente permet une vérification instantanée que je couple aussi avec une colonne supplémentaire où je vérifie si la valeur de la formule est égale à l’url que je check.

Analyse de contenu et de structure

  • Lister tous les titres H2 : =IFERROR(IF(ISURL(A1); TRANSPOSE(IMPORTXML(A1; "//h2")); ""); "") (Astuce : TRANSPOSE affiche les résultats sur une ligne plutôt que sur une colonne).
  • Extraire le contenu d’un div d’article : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "normalize-space((//div[@class='article-content'])[1])"); ""); "") (Pensez à inspecter le code source de votre cible pour trouver la bonne classe : « post-content », « entry-content », etc.)
  • Extraire les éléments d’une liste à puces (ul) : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//ul[@id='features-list']/li"); ""); "") (Ici, on cible une liste spécifique avec l’ID « features-list »).
  • Calculer le nombre de mots d’un article : Cette opération se fait en deux temps :
    1. Dans une cellule (ex: B1), extrayez tout le texte des paragraphes : =IFERROR(IF(ISURL(A1); TEXTJOIN(" "; VRAI; IMPORTXML(A1; "//p")); ""); "")
    2. Dans une autre cellule (ex: C1), comptez les mots : =IF(B1<>""; NBVAL(SPLIT(B1; " ")); 0)

Analyse du Netlinking : maillage interne et liens sortants

  • Lister les paires Hreflang (pour les sites multilingues) :
    • Colonne 1 (Langue) : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//link[@hreflang]/@hreflang"); ""); "")
    • Colonne 2 (URL) : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//link[@hreflang]/@href"); ""); "")
  • Lister tous les liens sortants et leurs ancres :
    • Colonne 1 (URL de destination) : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//a/@href"); ""); "")
    • Colonne 2 (Texte de l’ancre) : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//a"); ""); "")
  • Trouver l’URL d’un lien par son ancre : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//a[contains(text(),'Contactez-nous')]/@href"); ""); "")

Extraction de données E-commerce

  • Extraire une table de données HTML complète : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "//table[1]"); ""); "") (Cette formule importe la première table <table> de la page. Changez l’index [1] pour cibler une autre table).
  • Extraire un prix produit (format Microdata) : =IFERROR(IF(ISURL(A1); IMPORTXML(A1; "(//*[@itemprop='price'])[1]"); ""); "")

Rappel important pour préciser :

IMPORTXML ne peut pas lire les données structurées en JSON-LD, uniquement les formats intégrés au HTML comme les Microdata. Donc si votre site ou le site concurrent utilise seulement le JSON, vous serez limité avec Google Sheets.

Comprendre les erreurs IMPORTXML

Même avec la structure IFERROR, on peut avoir par moment des erreurs. Les différentes formules restent des exemples génériques qui peuvent être bloquées facilement pour plusieurs raisons, il est utile de comprendre pourquoi une formule échoue.

  • Erreur : #N/A (avec le message « Imported content is empty »)
    • Cause : L’URL est accessible et la formule est correcte, mais votre requête XPath n’a trouvé aucun élément correspondant sur la page.
    • Solution : Vérifiez votre XPath. Inspectez le code source de la page cible (clic droit > « Inspecter » ou « Afficher le code source ») pour vous assurer que les balises, classes ou ID que vous visez existent bien.
  • Erreur : #N/A (avec le message « Could not fetch URL »)
    • Cause : Google n’a pas pu accéder à l’URL. Cela peut être dû à une URL incorrecte, une page qui n’existe plus (404), ou, le plus souvent, un blocage du site web qui refuse les requêtes automatiques.
    • Solution : Vérifiez l’URL dans votre navigateur. Si elle fonctionne, le site bloque probablement le scraping. IMPORTXML ne fonctionnera pas sur ce site.
  • Erreur : « Le contenu importé est trop volumineux. »
    • Cause : La donnée que vous essayez d’importer dépasse la taille maximale autorisée par Google Sheets.
    • Solution : Essayez d’être plus spécifique dans votre requête XPath pour ne cibler qu’une partie plus petite de la page.
Lire  Si le SEO était comme un jeu World of Warcraft

Pro tips : Techniques Avancées

  • Combiner les résultats : Utilisez TEXTJOIN pour assembler les résultats d’une liste en une seule cellule. Par exemple, pour lister tous les tags d’un article, séparés par une virgule : =TEXTJOIN(", "; VRAI; IMPORTXML(A1; "//a[@rel='tag']"))
  • Forcer la mise à jour : Les résultats sont mis en cache. Pour forcer une nouvelle récupération, vous pouvez soit modifier l’URL (en ajoutant un paramètre factice comme ?cache=1), soit cocher/décocher une case dans une autre cellule et l’intégrer à votre formule URL pour la forcer à se recalculer.

Les limites qui vont vous bloquer, le 3e va vous surprendre

  1. Pas de JavaScript : IMPORTXML ne voit que le HTML initial. Tout contenu chargé dynamiquement via JavaScript lui est invisible. C’est sa plus grande faiblesse face aux sites modernes.
  2. Pas de JSON-LD : Il ne peut pas lire les données structurées dans les balises <script>, méthode pourtant la plus courante aujourd’hui.
  3. Quotas : Vous êtes limité à environ 50 fonctions IMPORTXML actives par feuille. Pour des audits massifs, divisez votre travail en plusieurs feuilles. Ou alors commencer à prévoir la mise en place de scripts AppScripts.

L’outil du pauvre, mais l’outil SEO incontournable

Ce n’est pas seulement une question de gain de temps. C’est une question de reprendre le contrôle, de créer des analyses qui ont du sens pour vous et vos clients. C’est l’essence même de notre métier d’artisan du web : utiliser les bons outils, avec intelligence et créativité. Vous avez désormais une compréhension approfondie et pratique de la fonction IMPORTXML. Loin d’être un simple gadget, c’est un véritable couteau suisse pour le SEO qui privilégie l’agilité et la personnalisation.

En intégrant ces formules dans vos processus, vous pouvez créer des tableaux de bord de suivi on-page, réaliser des pré-audits en quelques minutes, analyser la structure de contenu de vos concurrents ou encore extraire des listes de produits.

Bien sûr, IMPORTXML ne remplacera jamais la puissance d’un crawler dédié pour un audit technique exhaustif. Mais pour 90% des tâches d’extraction de données quotidiennes, il représente une solution gratuite, rapide et incroyablement efficace. Alors, ouvrez une feuille de calcul, et commencez à construire les outils qui vous feront gagner un temps précieux.

Aller plus loin avec l'IA

Explorez ce sujet avec les assistants IA les plus avancés


Partager cet article :

Laisser un commentaire

Votre adresse email ne sera pas publiée.