SEO

Comment utiliser YourText.guru avec R ?


Cet été, j’ai eu l’occasion de tester YourText.guru et Cocon.se, les deux outils sont connus et utiles pour optimiser le référencement naturel de son ou ses sites Web.

Afin de rendre service aux personnes qui font du R et du SEO, j’ai créé un premier package R qui vous permet de manipuler facilement les APIs de ces logiciels.

Je commence par vous présenter YourText.guru et le package R open-source spécialement créé pour l’occasion :

https://github.com/voltek62/writingAssistantR

Si vous préférez le Python, Julien Deneuville propose cette version : https://gitlab.com/databulle/python_ytg

Présentation YourText.guru

YourTextGuru est un service qui crée des guides d’aide à la rédaction, par rapport à une requête saisie, pour vous faire gagner du temps et de renforcer l’aspect qualitatif.

Ces guides sont générés grâce à deux algorithmes :

  • Imitation du traitement fait par un moteur de recherche sur la pertinence des textes
  • Récupération de textes liés au sujet et détermination des expressions clés les plus importantes.

Obtenir son token

Pour utiliser le package R, il faut avoir un accès à l’API soit 100€/mois au moment où j’écris cet article.

Il suffit de vous rendre cette page pour connaitre votre clé d’api : https://yourtext.guru/profil/api

Cette clé devra être copié à la racine de votre projet dans un fichier txt : ytg_configuration.txt

token=VOTRECLEAPI
debug=FALSE

Installer mon package R

Pour utiliser le package R, il faut avoir Rstudio et être formé aux basiques.

Je vous invite à écrire ces lignes dans la console.

library(devtools)
install_github("voltek62/writingAssistantR")

Pour initialiser le package, vous avez juste à utiliser le code suivant, attention la fonction initAPI va aller lire votre token dans votre fichier txt « ytg_configuration.txt »
La fonction getStatus permet simplement de vérifier que la connexion est correcte.

library(RCurl)
library(rjson)
library(XML)

initAPI()
status <- getStatus()

Créer un guide

Pour créer un guide, c’est très simple, vous devez indiquer votre requête, la langue ( ici: fr_fr )  et le mode de guide que vous souhaitez:
– Le Guide Premium est conçu pour fournir une liste de tous les mots essentiels et importants liés à une requête.
– Le Guide Oneshot est conçu pour fournir un modèle pour l’écriture d’un texte d’environ 300 mots.

J’ai mis une boucle qui attend la fin de la création du guide, cela peut prendre quelques minutes.

guide <- createGuide("crossfit","fr_fr","premium")
guide_id <- guide$guide_id

while(getGuide(guide_id)=="error") {
	print("Your guide is currently being created.")
	Sys.sleep(40)
}

print("Your guide is ready")
guide.all <- getGuide(guide_id)

Récupérer les scores sémantiques sur une URL

C’est très simple avec le package en R, vous avez juste à donner votre URL et le numéro du guide précédemment créé.

url <- "http://www.wodnews.com"
scores <- checkGuide(guide_id, url)

Vous allez obtenir deux scores :
– soseo : le score général du texte soumis en terme d’optimisation (100% correspond à un texte optimisé au maximum de la zone de normalité).
– dseo: le score lié au risque SEO. C’est un pourcentage qui peut dans certains cas extrêmes dépasser les 100%.

Astuce de Siou

J’ai testé plusieurs astuces pour récupérer directement le texte principal de la page.
La meilleur méthode identifiée est d’utiliser XPath avec la requête suivante

//text()[not(ancestor::select)][not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)][not(ancestor::form)][string-length(.) > 10]

Si vous souhaitez aller plus loin sur ce sujet, je vous invite à lire : ( Un grand merci à ceux qui me conseillent via Twitter )
https://moz.com/devblog/benchmarking-python-content-extraction-algorithms-dragnet-readability-goose-and-eatiht/
https://boilerpipe-web.appspot.com/

# download html
html <- getURL(url, followlocation = TRUE)
# parse html
doc = htmlParse(html, asText=TRUE)
plain.text <- xpathSApply(doc, "//text()[not(ancestor::select)][not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)][not(ancestor::form)][string-length(.) > 10]", xmlValue)
txt <- paste(plain.text, collapse = " ")

Récupérer les scores sémantiques sur plusieurs URLs

Je vous donne une méthode avec Rvest pour récupérer les 100 premiers résultats sur Google mais il en existe des milliers de méthode.

library(rvest)
library(httr)
library(stringr)
library(dplyr)
query <- URLencode("crossfit france")
page <- paste("https://www.google.fr/search?num=100&espv=2&btnG=Rechercher&q=",query,"&start=0", sep = "")
#On importe la page de requête sur Google
webpage <- read_html(page)
#On extrait les balises A pour chaque résultat google
googleTitle <- html_nodes(webpage, "h3 a")
googleTitleText <- html_text(googleTitle)
#On extrait les liens
hrefgoogleTitleLink <- html_attr(googleTitle, "href")
#On nettoie
googleTitleLink <- str_replace_all(hrefgoogleTitleLink, "/url\\?q=|&sa=(.*)","")

Désormais, ce qui va intéressant c’est de parcourir ce dataset et récupérer les scores pour chacune des URLs.

library(dplyr)
DF <- data.frame(Title=googleTitleText, Link=googleTitleLink, score=0, danger = 0, stringsAsFactors = FALSE) %>%
        filter(grepl("http",Link))

for (i in 1:nrow(DF)) {
  link <- DF[i,]$Link

  scores <- checkGuide(guide_id,link)

  if (scores!="error") {
    DF[i,]$score  <- scores$score
    DF[i,]$danger <- scores$danger
  }

  finally = Sys.sleep(60)
}

Vous allez obtenir un tableau avec un score pour chacune des URLs.

Conclusion

Voilà, j’espère que cela vous sera utile pour analyser votre contenu et celui des concurrents.

Je pense que si vous devez créer du contenu, il est important d’utiliser un outil d’aide à la rédaction comme yourtext.guru car il est conçu pour les besoins des SEOs, des rédacteurs et des webmarketeurs.

Pour le mois d’Août, je prépare l’article suivant : Comment utiliser Cocon.se avec R ?

3 Comments

  • Bonjour Vincent,

    Merci pour ce tuto. Nous utilisons YTG depuis un moment et je me suis donc intéressé à l’utilisation de R pour générer des rapports. L’installation du package R c’est bien passé. Je bloque après la commande install_github(« voltek62/writingAssistantR »). Si j’ai bien compris cette commande a installé writingAssistantR.
    Cependant je ne sais pas où placer mon text ytg_configuration.txt pour qu’il soit pris en compte et de plus lorsque j’exécute la commande initAPI() j’ai une erreur Error in initAPI() : impossible de trouver la fonction « initAPI ».

    Est-ce que vous pourriez m’aider ?

    Merci d’avance

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *