Si vous avez déjà entendu parler du langage R et que vous prenez les SEO qui l’utilisent pour des extraterrestres, vous n’avez pas tout à fait tort.
Initialement destiné aux data scientists et aux statisticiens, le langage R a depuis quelques années atterri chez des publics insoupçonnés, et la raison est simple :
Automatiser des actions, récupérer des données via des API et les agréger, scraper des pages web, croiser plusieurs fichiers (de mots-clés par exemple) ou encore faire du machine learning, du NLP, du text mining et des analyses sémantiques, les possibilités qu’offrent le R et ses nombreux packages pour le SEO sont nombreuses.
Cependant, entendons-nous bien :
R ne vous fera pas devenir premier sur Google !
R n’est pas non plus un secret SEO !
Ce que je sais par contre, après plusieurs mois d’utilisation, c’est que R révolutionne l’approche SEO en apportant de nouvelles idées et méthodes de travail.
Si vous avez déjà rêvé de créer vos propres outils SEO, ou de passer du traditionnel SEO empirique à une approche pilotée par les données, vous êtes en passe de devenir vous aussi un extraterRestre.
Commencer avec R
C’est lorsque je travaillais dans l’entreprise OVH, que j’ai commencé à expérimenter le « Data SEO« . C’est également à ce moment là que j’ai commencé la programmation, via le langage R.
J’ai pour ma part commencé le R à partir de 0, et décidé d’approfondir avec une formation généraliste en ligne sur le célèbre site de formation en ligne Coursera.org, depuis le début d’année 2017.
La formation Data Science de la Johns Hopkins University inclue plusieurs modules et coûte 45€ / mois.
Je vous conseille principalement les cours suivants :
– The Data Scientist’s Toolbox
– R Programming
– Getting and Cleaning Data
Après quelques semaines d’apprentissage à raison d’une heure par jour en moyenne, je suis aujourd’hui capable de gagner un temps considérable dans mes projets SEO en créant mes premiers scripts.
De nombreuses tâches SEO manuelles, répétitives et souvent chronophages, sont progressivement remplacées par des scripts R.
Cette nouvelle façon de faire du SEO vous intéresse ? Vous trouverez ici tout ce dont vous avez besoin pour vous y mettre : des ressources, des lignes de commandes utiles (à utiliser comme un « cheat sheet R »), quelques scripts R que vous pourrez utiliser pour vos projets et des tutos R pour le SEO.
Si vous souhaitez accélérer votre apprentissage des data sciences pour vos projets SEO, je vous invite à vous inscrire à la prochaine formation Data Science SEO. Notez qu’aucune connaissance technique n’est nécessaire pour participer à la formation.
Où écrire le R ?
Commencez par :
- Télécharger R
- Installer le logiciel open source et gratuit R Studio pour vos traitements.
Une fois R Studio installé, vous pourrez tester directement les scripts R suivants dans la console (partie inférieure gauche) ou les copier-coller dans un nouveau script : File > New File > R Script
Fonctions de base
sessionInfo() #Afficher les infos sur l'environnement ??read #Afficher l'aide getwd() #Connaitre le répertoire de travail setwd("/Users/remi/dossier/") #Spécifier un répertoire de travail list.files() #Voir le contenu du répertoire dir.create("nomdudossier") #Créer un dossier dans le répertoire
Les packages R
R dispose de plein de packages (des « fonctionnalités » en plus à télécharger), dont vous trouverez la liste sur le site cran-r.
install.packages("nomdupackage") #Installer un package install.packages(c("packageA", "packageB", "packageC"))#Installer plusieurs packages en une seule fois #Installer une liste de package seulement si ils ne sont pas déjà installés list.of.packages <- c("dplyr", "ggplot2","tidyverse", "tidytext", "wordcloud", "wordcloud2", "gridExtra", "grid") new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])] if(length(new.packages)) install.packages(new.packages) library("nomdupackage") #Appeler un package installé ?nomdupackage #Afficher la documentation du package packageVersion("nomdupackage") #Connaitre la version d'un package detach("package:dplyr", unload=TRUE)#Forcer la fermeture d'un package sans fermer R Studio
Voici quelques-uns des packages R que vous utiliserez le plus pour le SEO :
- dplyr : Manipuler les données d’un dataframe (filtrer, trier, sélectionner, résumer, etc)
- SEMrushR : Utiliser l’API de SEMrush
- majesticR : Utiliser l’API de Majestic
- kwClustersR : Clusteriser une liste de mots-clés
- duplicateContentR : Calculer un score de similarité entre 2 pages pour détecter le duplicate content
- text2vec : Extraire les n grams
- eVenn : Créer des diagrammes de Venn (utile pour faire des audits sémantiques)
- tm : Traiter les accents et les mots-creux
- ggplot : Faire des graphes
- shiny : Créer une application à partir de vos scripts
- searchConsoleR : Utiliser l’API de Google Search Console
- httr : Faire des requêtes GET, POST, PUT, DELETE
- Rcurl : Également pour faire des requêtes, plus complet que httr
- XML : Pour parser les pages web
- jsonlite : Récupérer du json
- googleAuthR : Pour gérer l’authentification aux APIs de Google
- googleAnalyticsR : Travailler avec l’API de Google Analytics
- searchConsoleR : Télécharger des données Search Console dans R
- urltools : Effectuer des traitements dans les URLs
Traiter des gros volumes de données
L’utilisation de données est systématique dans tout projet SEO : qu’il soit question de données issues de Screaming Frog, SEMrush, Search Console, de votre outil de Web Analyse ou autre. Elles peuvent provenir des API directement, ou d’exports réalisés à la main.
Vous trouverez dans les parties suivantes des astuces pour traiter ces datasets (traduction littérale de « jeux de données »).
Ouvrir et enregistrer un dataset
mondataframe <- data.frame() #Créer un dataframe (permet de mixer des données numériques et des données texte) merge <- data.frame(df1, df2) #Mixer 2 dataframes #Ouvrir un TXT Fichier_txt <- read.table("nomdufichier.txt",header=FALSE, col.names = c("nomcolonne1", "nomcolonne2", "nomcolonne3")) #Ouvrir un XLS library(readxl) Fichier_xls <- read_excel("cohorte.xls", sheet = 1, col_names = FALSE, col_types = NULL, skip = 1) #Ouvrir un CSV Fichier_csv <- read.csv2("df.csv", header = TRUE, sep=";", stringsAsFactors = FALSE) #Sauvegarder votre dataset write.csv() #créer un csv write.table() #créer un txt #Changer les intitulés des colonnes cnames <- c("keywords", "searchvolume", "competition", "CPC") #on défini des noms pour les 4 colonnes du dataframe > colnames(mydataset) <- cnames #on attribue les noms des colonnes au dataframe
Mieux connaitre son dataset
object.size(dataset) #Combien d'espace occupe l'objet en bytes head(dataset) #Voir les premières lignes tail(dataset) #Voir les dernières lignes colnames(dataset) #Connaitre le nom des colonnes apply(dataset, 2, function(x) length(unique(x))) #Savoir combien il y a de valeurs différentes dans chaque colonne du dataset summary(dataset) #Avoir un résumé de chaque colonne du dataset (valeur minimum, médiane, moyenne, maximum, etc) summary(dataset$colonne) #Même chose pour une colonne en particulier dim(dataset) #Dimensions du dataset (nombre de colonnes et de lignes) str(dataset) #Plus complet que dim() : Dimensions du dataset + Type de données dans chaque colonne which(dataset$Colonne == "seo") #Chercher les lignes de la colonne "Colonne" qui contiennent la valeur "seo"
Zoom sur le package DPLYR
DPLYR est LE package qu’il faut impérativement connaitre. Grâce à lui vous allez pouvoir effectuer de nombreux traitements dans vos fichiers : sélection, filtre, tri, classement, etc.
library("dplyr") #Sélectionner des colonnes et des lignes select(df,colA,colB) #Sélectionner colA et colB dans le dataset df select(df, colA:colG) #Sélectionner de colA à colG select(df, -colD) #Supprimer la colonne colD select(df, -(colC:colH)) #Supprimer une suite de colonnes slice(df, 18:23) #Sélectionner des lignes 18 à 23 #Créer un filtre filter(df, country=="FR" & page=="home") #Filtrer les lignes qui contiennent FR (colonne country) et home (colonne page) filter(df, country=="US" | country=="IN") #filtrer de ligne dont le pays est US ou IN filter(df, size>100500, r_os=="linux-gnu") filter(cran, !is.na(r_version)) #filtrer les lignes de la colonne r_version qui ne sont pas vides #Classer et trier arrange(keywordDF, volume) #classer le dataset en fonction des valeurs de la colonne volume (classement ascendant) arrange(keywordDF, desc(volume)) #classer le dataset dans l'ordre descendant arrange(keywordDF, concurrece, volume) #trier les données selon plusieurs variables (plusieurs colonnes) arrange(keywordDF, concurrece, desc(volumes), prixAdwords)
D’autres traitements à connaitre
Les lignes suivantes sont des commandes que j’utilise très souvent pour faire des opérations dans des datasets volumineux de mots-clés, notamment issues de SEMrush, Ranxplorer ou encore des exports Screaming Frog.
Ces opérations me permettent d’accélérer mes recherches d’opportunités SEO. Il s’agit par exemple de classer les mots-clés en thématiques, dé-dupliquer les mots-clés après avoir fait un merge de plusieurs listes, supprimer les cellules vides et diviser mon datasets en plusieurs petit datasets correspondant chacun à une sous-thématique à exploiter.
Concernant les export Screaming Frog, vous trouverez ici des commandes pour y compter des éléments comme le nombre d’URL crawlées, le nombre de cellules vides dans une colonne et le nombre d’URL pour chaque status code.
#Convertir une colonne au format numérique keywords$Volume <- as.numeric(as.character(keywords$Volume)) #Ajouter une nouvelle colonne keywordDF$nouvellecolonne <- 1
#Ajouter une colonne dont la valeur est basée sur une opération mutate(keywordDF, TraficEstime = keywordDF$CTRranking * keywordDF$volume) #Ici on calcul le traffic estimé en se basant sur les colonnes CTRranking et volume mutate(keywordDF, volumereel = volume / 2) #Diviser un datasets en plusieurs sous-datasets split(keywords, keywords$Thematique)
Scraper et Extraction de contenu
La création d’un crawler est très utile pour récupérer rapidement des éléments précis d’une page. Cela vous servira par exemple à suivre les évolutions d’un site concurrent : sa stratégie de prix, ses mises à jour de contenus, etc.
Scraper du XML
Avec le script suivant, vous pourrez télécharger un fichier XML, le parser et récupérer certaines variables qui vous intéressent. Vous verrez aussi comment le convertir en un dataframe.
#1. Charger les packages library(RCurl) library(XML) #2. Récupérer le code source url <- "https://www.w3schools.com/xml/simple.xml" xml <- getURL(url,followlocation = TRUE, ssl.verifypeer = FALSE) #3. Mettre en forme le code et récupérer le noeud XML racine doc <- xmlParse(xml) rootNode <- xmlRoot(doc) #3.1 Enregistrer le code source dans un fichier html afin de le voir en entier capture.output(doc, file="file.html") #4. Récupérer des éléments de la page xmlName(rootNode) #Le nom du XML (1er nœud) rootNode[[1]] #Tout le contenu du premier nœud rootNode[[2]][[1]] #Le 1er élément du 1er nœud xmlSApply(rootNode, xmlValue) #Enlever les balises xpathSApply(rootNode,"//name",xmlValue) #Certains nœud avec xPath xpathSApply(rootNode,"/breakfast_menu//food[calories=900]",xmlValue) #Filter des nœuds XML par valeur (ici les recettes avec 900 calories) #5. Créer un data frame ou une liste menusample <- xmlToDataFrame(doc) menusample <- xmlToList(doc)
Scraper du HTML
Récupérer des liens dans une page, récupérer une liste d’articles, voilà quelques exemples de ce vous pourrez faire avec le script suivant.
#1. Charger les packages library(httr) library(XML) #2. Récupérer le code source url <- "https://remibacha.com" request <- GET(url) doc <- htmlParse(request, asText = TRUE) #3. Récupérer le title et compter le nombre de caractères PageTitle <- xpathSApply(doc, "//title", xmlValue) nchar(PageTitle) #4. Récupérer les noms des articles PostTitles <- data.frame(xpathSApply(doc, "//h2[@class='entry-title h1']", xmlValue)) PostTitles <- data.frame(xpathSApply(doc, "//h2", xmlValue)) #5. Récupérer tous les liens de la page et en faire une liste hrefs <- xpathSApply(doc, "//div/a", xmlGetAttr, 'href') hrefs <- data.frame(matrix(unlist(hrefs), byrow=T)) #6. Récupérer les liens du menu liensmenu <- xpathSApply(doc, "//ul[@id='menu-menu']//a", xmlGetAttr, 'href') liensmenu <- data.frame(matrix(unlist(liensmenu), byrow=T)) #7. Récupérer le status code et le header status_code(request) header <- headers(request) header <- data.frame(matrix(unlist(header), byrow=T))
Scraper du JSON
#1. Charger le package library(jsonlite) #2. Récupérer le JSON jsonData <- fromJSON("https://api.github.com/users/jtleek/repos") #3. Récupérer les noms de tous les nœuds names(jsonData) #4. Récupérer les noms de tous les nœuds dans le nœud "owner" names(jsonData$owner) #5. Récupérer les valeurs dans le nœud login jsonData$owner$login
Télécharger un fichier sur le web
#1. Définir le répertoire de travail setwd("~/Documents/R") #2. Spécifier l'URL fileURL<- "https://url_du_fichier_a_telecharger" #3. Télécharger le fichier (curl permet de télécharger un fichier en https) download.file(fileURL, destfile = "~/Documents/R/nom_du_fichier.csv", method = "curl") #4. Vérifier que le fichier a bien été téléchargé list.files() #5. Garder une trace de la date du téléchargement dateDownloaded <- date()
J’espère que ces quelques exemples d’utilisation de R pour vos traitements de fichiers SEO vous auront donné envie d’aller plus loin !
N’hésitez pas à garder cet article dans vos favoris et à le partager sur vos réseaux sociaux pour l’avoir sous le coude quand vous aurez besoin d’anti-sèches pour créer vos scripts.
Comment R change mon quotidien de #SEO? Un virage « data » expliqué dans ce guide de survie : https://t.co/l01seUDg8l (tutos, bouts de code..)
— Rémi Bacha (@Remibacha) 8 juin 2017
Comme sur Skyrock à la fin du freestyle, je voudrais maintenant lâcher quelques plates dédicaces aux aficionados de data qui m’ont appris R ou donné envie de m’y mettre grâce à leurs idées.
Les meilleurs tuto SEO avec R
Vous trouverez ci-dessous des tutos très complets que je vous invite à tester :
Google Analytics R Tutorial par Ryan Praski. Voir l’article
R Heatmap Tutorial for Google Analytics par Ryan Praski. Voir l’article
Conversion Attribution: a Markov model (using Google Analytics and the R ChannelAttribution package) par Jules Stuifbergen. Voir l’article
SEO keyword research using searchConsoleR and googleAnalyticsR par Mark Edmondson. Voir l’article
Identifier les mots clés à optimiser avec R par Grégory Florin. Voir l’article
Text mining et nuage de mots avec le logiciel R : 5 étapes simples à savoir par STHDA. Voir l’article
Très sympa ton article.
Et complétement d’accord avec toi, le fait d’utiliser R change la vie car ça permet d’aller plus vite et plus loin…
Merci Greg 🙂
Merci pour l’article et les astuces Remi 😉
Pour les install perso, je profite d’ajouter un
dependencies = TRUE
, qui permet d’installer le package et les packages liés.Exemple pour « dplyr » :
install.packages("dplyr", dependencies = TRUE)
Sinon pour vérifier que les packages sont à jour, au début j’utilisais
update.packages()
, mais ça devient long parfois, donc maintenant j’ai un fichier par typo de package (exemple SEO) et je relance la listes avecinstall.packages("{nom du package}", dependencies = TRUE)
Autre package que je recommande :
stringi
(dispo sur CRAN ou https://github.com/Rexamine/stringi) qui permet de récupérer des données et de les extraires dans une chaîne de caractères :stri_sub("abcde",1,3)
[1] "abc"
stri_sub("abcde",1,1)
[1] "a"
stri_sub("abcde",-3,-1)
[1] "cde"
Top tes sources et tuto, merci 🙂
Hello Arthur,
merci pour ton retour et ces supers astuces (je ne connaissais pas dependencies = TRUE ;-)) !
Tu utilises aussi R dans tes projets SEO ?
Je l’ai découvert en faisant quelques recherches pour aller « plus vite » dans les mises à jour.
Sur certains projets SEO oui et Analytics pour agréger des données « de manière automatique »
Très bon article complet sur la langage R et l’utilité pour le SEO. Je bookmarke, merci 🙂
Merci pour ton retour ! Je vais faire évoluer l’article au fur et à mesure.
Hello Rémi,
pour le scrap html, il est aussi possible de passer Rvest, qui est plus simple et plus facile à traiter si l’on souhaite extraire qu’un morceau du code (via attribut CSS, Xpath ou Nthchild.
En tout cas, super base pour commencer R
Hello Antoine, merci !
Yes, Rvest est effectivement une autre possibilité qui fonctionne aussi très bien mais je trouve le combo httr / XML plus complet (notamment la possibilité de modifier le user agent) !
Xpath est un indispensable pour le scrap, je l’avais d’ailleurs utilisé dans ce tuto https://remibacha.com/eminem-text-mining-r/
Bonjour Rémi
Merci pour ce tuto. ON avait échangé rapidement au SEO Camp sur Paris. Une petite question de newb, j’utilise datastudio pour agréger différentes sources issues de base de données (log, semrush etc) mais ca rame terriblement. Est-ce que R est beaucoup plus rapide pour la visualisation de grande quantité de données ?
merci
David
« Bel Article d’apprentissage! Aymeric Inpong »