Sommaire : utilisation de la syntaxe regex
Le terme regex est une contraction des mots expressions régulières. Ces suites (ou chaînes) de caractères sont utilisées en SEO et en Data Analytics car elles permettent de rechercher, filtrer, extraire ou remplacer facilement des chaînes de caractères dans un code source ou un texte.
Les applications possibles des regex en SEO
Avant de commencer à vous initier aux regex, il est important que je vous aide à comprendre à quoi elles vous servent concrètement pour analyser et améliorer votre référencement naturel :
- Segmentation des données : les regex permettent d’extraire beaucoup plus facilement des requêtes ciblées dans Google Search Console ou dans un autre outil SEO, vous permettant d’isoler rapidement de nombreuses informations concernant des mots-clés ou des URL.
- Exploitation des logs ou d’un crawl : grâce aux expressions régulières, vous pouvez plus facilement traiter et analyser vos logs ou les données extraites d’un crawl.
- Optimisation des redirections : utilisées dans les fichiers .htaccess, les regex créent des règles avancées pour rediriger facilement des groupes d’anciennes URLs lors des migrations de sites ou de refontes.
- Etc.
Vous l’avez compris : tout référenceur qui se respecte doit déjà avoir entendu parler des expressions régulières !
Les regex, un langage avec sa propre syntaxe
Votre premier contact avec les regex sera certainement un peu difficile, car elles ressemblent de prime abord à un véritable charabia. Mais si vous les abordez comme une langue étrangère, elles vous sembleront immédiatement plus accessibles.
Les caractères spéciaux utilisés dans les expressions régulières
Le premier élément à maîtriser est la syntaxe de votre regex. Voici quelques caractères spéciaux parmi les plus connus et les plus utilisés :
- ? : indique que l’élément précédent est optionnel (il peut apparaître une fois ou pas du tout) ;
- * : rend l’élément précédent facultatif et le répète autant de fois que possible (0, 1 ou plusieurs fois) ;
- + : Oblige l’élément précédent à apparaître au moins une fois et le répète autant de fois que nécessaire (1 ou plusieurs fois) ;
- | : permet de choisir entre plusieurs éléments (A ou B) ;
- ^ : indique le motif devant apparaître au début de la chaîne ;
- $ : indique que le motif doit apparaître à la fin de la chaîne ;
- . : correspond à n’importe quel caractère unique, sauf un retour à la ligne ;
- \ : n’interprète pas un caractère spécial (caractère d’échappement), ou dans certains cas crée un méta-caractère qui présente un sens particulier.
Note : En regex, un motif (pattern) est une suite de caractères et de symboles qui définit un modèle de recherche pour identifier, filtrer ou manipuler du texte.
Cas pratiques : utilisation de la syntaxe regex
- colou?r : correspond à color et colour (avec ou sans le u qui précède le ?) ;
- grao*u : correspond à grau, graou, graoou, graooooou, etc. ;
- a+b : correspond à ab, aab, aaab, etc. ;
- jument|hongre : jument ou hongre ;
- ^salut : correspond à salut la compagnie, salut à tous, etc. ;
- compagnie$ : correspond à salut la compagnie, au revoir la compagnie, etc ;
- c.t : correspond à cat, cot, cut, cgt, etc ;
- mon\.cheval : permet d’obtenir la chaîne mon.cheval, avec un point traité comme un point et pas comme un caractère spécial permettant d’afficher n’importe quel caractère (cf. exemple précédent) ;
Les méta-caractères dans les regex
Je vous disais que le caractère spécial \ en regex est utilisé soit comme caractère d’échappement, soit comme un préfixe d’un méta-caractère. Le méta-caractère se compose donc de l’antislash et d’une lettre qui n’a jamais de signification particulière en regex.
Voici les méta-caractères les plus courants :
- \w : recherche un mot, un chiffre ou_ un type de caractère ;
- \d : recherche un caractère de type chiffre ;
- \s : recherche un caractère d’espacement ;
- \b : indique le début ou la fin d’un mot ;
- \B : recherche une position qui n’est pas en début ou en fin de mot ;
- \W : recherche un caractère qui n’est pas un mot, un chiffre ou _ ;
- \D : recherche un caractère qui n’est pas un chiffre ;
- \S : recherche un caractère qui n’est pas un espace.
Vous avez compris par vous-mêmes que la majuscule permet de rechercher ou d’indiquer l’inverse de la minuscule.
Les structures de base des expressions régulières
Pouvoir rechercher ou filtre un caractère, c’est bien. Mais pouvoir faire de même avec une chaîne de caractères, c’est mieux !
Les regex proposent des options de regroupement pour capturer des chaînes de caractère, chaque option de groupement ayant ses spécificités :
- ( ) : les groupes capturants permettent de regrouper des éléments et de mémoriser la sous-chaîne correspondante, afin de la réutiliser dans un remplacement ou de vérifier qu’elle se répète ailleurs dans l’expression ;
- [ ] : les classes de caractères définissent un ensemble de caractères autorisés à une position donnée dans la chaîne ;
- { } : les quantificateurs indiquent combien de fois l’élément qui les précède doit se répéter, que ce soit de façon exacte, minimale ou dans une plage définie.
Cas pratiques : utilisation des options de regroupement
- (benjamin) : recherche exactement la chaîne benjamin ;
- [aeiou] : correspond à color et colour (avec ou sans le u qui précède le ?) ;
- [aeiou] : permet de détecter si une chaîne contient une voyelle ;
- [0-9] : permet de détecter si une chaîne contient un chiffre ;
- z{4} : permet de rechercher la sous-chaîne zzzz, en répétant la lettre z 4 fois grâce au groupe capturant et au quantificateur {4}.
- (coin){2} : permet de rechercher la sous-chaîne coincoin, en répétant le mot coin 2 fois grâce au groupe capturant et au quantificateur {2}.
- \d{4} : permet de rechercher une sous-chaîne composée exactement de 4 chiffres consécutifs (\d étant un méta-caractère représentant un chiffre).
Construire vos premières regex au service de votre SEO
Nous avons vu ensemble les bases des regex. Il est temps de pratiquer en construisant vos premières regex. Je vous donne trois exemples concrets pour les utiliser dans vos actions SEO quotidiennes. Et je décortique chaque expression régulière pour vous familiariser avec elles.
Filtrer une liste d’URL grâce aux regex
Vous désirez extraire la liste des URL de vos pages produits ou de vos pages catégories ? L’élément différenciateur est parfois évident, mais il peut également être plus subtil. Heureusement, une regex va vous permettre de filtrer rapidement votre export Screaming Frog ou votre rapport performance Google Search Console et d’obtenir en quelques secondes les bonnes informations pour finaliser votre audit SEO !
Utilisez les regex dans Google Search Console
Vous pouvez notamment utiliser les Regex dans le rapport Performances de Google Search Console pour affiner vos filtres (URL ou requêtes).
Cas n°1 : différencier des pages produits e-commerce
Prenez l’exemple d’un site e-commerce dont les URL sont construites sur le schéma suivant :
- Pages catégories : https://monsite.com/mon-nom-de-categorie-id.html
- Pages produits : https://monsite.com/mon-nom-de-produit-pid.html
Ce qui donne :
- Pages catégories : https://monsite.com/cereales-pas-cher-12345.html
- Pages produits : https://monsite.com/cereales-avoine-bibemdum-p12345.html
Mais attention, le nom de la catégorie ou du produit est facultatif, et quand il n’est pas renseigné on a :
- Pages catégories : https://monsite.com/12345.html
- Pages produits : https://monsite.com/p12345.html
Vous ne pouvez pas simplement filtrer sur “-p”, car vous auriez des faux positifs et la page catégorie https://monsite.com/cereales-pas-cher-12345.html remonterai par exemple dans votre filtre. Vous passeriez par ailleurs à côté des URLs qui n’ont pas de nom de produit renseigné.
Vous n’allez pas vous vous amuser non plus à filtrer dix fois pour avoir les dix combinaisons (p0, p1, etc.), cela prend du temps et n’exclut pas quelques erreurs.
Heureusement, la regex p\d{5} fait le job :
- p : recherche exactement la lettre p (minuscule) ;
- \d recherche un chiffre (équivalent à [0-9])
- {5} : exige une sous-chaîne d’exactement 5 \d (soit de 5 chiffres)..
Cas n°2 : filtrer toutes les URL avec un paramètre
Vous souhaitez connaître toutes les URL d’un rapport Google Search Console qui contiennent des paramètres de la forme ?utm_source=google ou ?id=123&ref=abc ? Une regex toute simple peut vous aider : \?.+
Cette regex est enfantine :
- \? : on recherche le caractère ? (on utilise le \ d’échappement car ? est à la base un caractère spécial) ;
- . : on recherche avec le point n’importe quel caractère après le point d’interrogation ;
- + : le plus souligne qu’on peut avoir une chaîne composée d’un ou plusieurs caractères.
Rediriger les URLs dans un fichier .htaccess
. Vous n’allez pas créer une table de redirections URL par URL, mais vous allez probablement passer par le fichier .htaccess pour établir une règle de redirection. Celle-ci va s’appuyer sur les regex !
Cas n°1 : une regex pour rediriger les URL en .htm vers des URL en .html
On vous confie l’accompagnement SEO d’une refonte technique, qui se traduit par un changement d’extension des URL. Elles ne se terminent plus par .htm mais par .html, par contre la structure ne change pas. Les expressions régulières sont alors les meilleures amies des professionnels du référencement ! Nous pouvons utiliser la regex suivante :
RewriteEngine On
RewriteCond %{REQUEST_URI} .htm$
RewriteRule ^(.*).htm$ /$1.html [R=301,L]
L’analyse de cette règle de redirection est facile à comprendre :
RewriteEngine On
: active le moteur de réécriture.RewriteCond %{REQUEST_URI} \.htm$
: ne s’applique que si l’URL demandée se termine par.htm
(rappelez-vous l’antislash d’échappement et le dollar présentés dans les caractères spéciaux) ;rewriteRule ^(.*)\.htm$ /$1.html [R=301,L]
:^(.*)\.htm$
capture tout le chemin avant.htm
,/$1.html
redirige vers la même URL avec.html
à la place ($1
fait référence au contenu capturé par(.*)
)[R=301,L]
précise que c’est une redirection permanente (301), et stoppe les règles suivantes (L
pour Last).
Détaillons encore plus la première partie ^(.*)\.htm$
:
RewriteEngine On
RewriteCond %{REQUEST_URI} .htm$
RewriteRule ^(.*).htm$ /$1.html [R=301,L]
L’analyse de cette règle de redirection est facile à comprendre :
RewriteEngine On
: active le moteur de réécriture.RewriteCond %{REQUEST_URI} \.htm$
: ne s’applique que si l’URL demandée se termine par.htm
(rappelez-vous l’antislash d’échappement et le dollar présentés dans les caractères spéciaux) ;rewriteRule ^(.*)\.htm$ /$1.html [R=301,L]
:^(.*)\.htm$
capture tout le chemin avant.htm
,/$1.html
redirige vers la même URL avec.html
à la place ($1
fait référence au contenu capturé par(.*)
)[R=301,L]
précise que c’est une redirection permanente (301), et stoppe les règles suivantes (L
pour Last).
Détaillons encore plus la première partie ^(.*)\.htm$
:
^
: début de la chaîne ;(.*)
: premier groupe capturé → il capture tout ce qu’il y a avant.htm
(le point correspond à n’importe quel caractère, et l’étoile recherche leur absence ou leur présence en 1 ou X exemplaires).\.htm
: recherche très exactement l’extension (le \ permet de conserver le point).htm
.$
: marque la fin de la chaîne.
Cas n°2 : une regex pour rediriger les URL en HTTP vers des URL en HTTPS
Une simple expression régulière d’une ligne permet de rediriger automatiquement les URL en HTTP vers leur équivalent en HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
Voici l’explication détaillée :
RewriteEngine On
: active le moteur de réécriture.RewriteCond %{HTTPS} off
: cette condition détecte quand la connexion n’est pas en HTTPS.RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
:[R=301,L]
: redirection permanente (301) et arrêt des règles (L
pour “last”).^(.*)$
est la regex qui capture toute l’URL relative.https://%{HTTP_HOST}/$1
: redirige vers la même URL en HTTPS ($1 correspond au groupe capturé par la regex ^(.*)$).
L’IA pour formuler vos regex
Vous n’avez pas besoin de maîtriser toutes les subtilités des regex et d’apprendre par cœur chaque caractère spécial, chaque méta-caractère ou chaque combinaison. Vous pouvez en effet demander à une IA générative de type ChatGPT de vous générer une regex correspondant à votre demande.
Je pense cependant que tout professionnel du SEO devrait maîtriser les bases des regex, ne serait-ce que pour comprendre (dans les grandes lignes) ce que vous fournit votre IA préférée.
Rechercher des mots-clés spécifiques
Les regex peuvent être utilisées sur Google Search Console, par exemple pour filtrer les éléments du rapport Performances ou l’export de vos mots-clés Semrush. Une regex peut vous permettre de retenir uniquement les expressions composées d’un certain nombre de mots : vous filtrez alors uniquement les expressions SEO qui répondent à vos critères de longueur.
Cas n°1 : une regex pour filtrer les expressions de longue traîne de 4 mots et plus
Vous pouvez utiliser la regex ^([^\s]+\s){4,}[^\s]+$
pour filtrer uniquement les expressions qui sont composées de plus de 4 mots, et ainsi vous focaliser sur votre longue traîne.
On décortique ensemble la regex ^([^\s]+\s){4,}[^\s]+$
:
^
: indique le début de la ligne ;- ([^\s]+\s) : recherche un mot suivi d’un espace :
- ( ) : les parenthèses regroupent l’ensemble [^\s]+\s, ce qui nous permet de le réutiliser pour le calcul de la répétition
- [ ] : les crochets définissent un ensemble de caractères (ou classe) ;
- ^ : l’accent circonflexe placé après le crochet d’ouverture signifie une négation de la classe (on recherche l’inverse ce qui suit) ;
- \s : est le méta-caractère pour un espace blanc (espace, tabulation, etc.), donc puisqu’on a un accent circonflexe juste après le crochet, on recherche tous les caractères qui ne sont pas un espace blanc ;
- +\s : signifie qu’on recherche un espace après [^\s], qui désigne un mot (d’un ou plusieurs caractères) ;
- {4,} : le groupe est répété au moins 4 fois (vous pouvez remplacer 4 par le nombre de votre choix) ;
- { } : les accolades ou quantificateurs servent à préciser le nombre de fois ou un élément est recherché ;
- 4, : la virgule après le nombre permet d’ouvrir le nombre de répétitions vers le haut (4 ou plus) ;
- [^\s]+$ : on recherche un ou plusieurs caractères sans espace blanc à la fin de la regex.
Cas n°2 : rechercher des expressions SEO sous forme de questions
Vous voulez vous concentrer sur les intentions de recherche informationnelles, et plus précisément sur les expressions formulées sous forme de question ? Grâce aux expressions régulières, vous pouvez cibler exclusivement les expressions qui commencent par des termes comme quoi, que, qui, où, quand, etc.
La regex ^(quoi|que|comment|qui|où|quand)\b
^
: début de la chaîne (ou de ligne si en mode multiline).(quoi|que|comment|qui|où|quand)
: capture un de ces mots, car le méta-caractère \b indique le début ou la fin d’un mot\b
: évite des mots comme “question” qui commencent par “que”.
Note : vous pouvez ajouter le flag i
pour que la séquence soit insensible à la casse (vous cherchez ainsi également le versions avec majuscules et minuscules). Par exemple : /^(quoi|que|comment|qui|où|quand)\b/i