Utilisation de Awk et Grep pour lister les pages inactives d’un site WordPress

Contenu

Qu’est qu’une page inactive en SEO?

C’est une page de votre site qui est en ligne, visible par le moteur de recherche, mais n’ayant pas généré de visite. Ces pages sont problématiques, car elles doivent générer des visites, au moins une fois par an. Si aucune visite générée, il est urgent de les détecter, les corriger ou de les supprimer, car elles peuvent nuire à votre SEO.

Comment fait-on pour détecter ces pages inactives?

Tout simplement en regardant les urls qui sont présentes dans votre sites et qui ne le sont pas dans les logs de visite depuis un moteur de recherche, en l’occurence Google. Nous allono svoir comment le faire en PHP, on aura besoin de faire un tableau d’urls existantes du site $available_url, et un tableau d’urls qui ont eu au moins une visite sur une période données $hits, 6 mois ou un an, par exemple. On va appliquer la fonction très pratique array_diff en PHP qui va nous retourner un troisième tableau qui contient les urls de pages inactives.

Préparer le terrain en élaguant ce qui est inutile

On doit d’abord avec par exemple Google Analytics exporter les urls ayant reçu une visite, en allant dans Acquisition > Google Search Console > Landing Page, et choisir une période d’un an ou de six mois, et exporter les urls dans un fichier csv.

Ensuite, pour les urls existantes d’un site WordPress, on va taper directement dans la base de données, en requêtant dans la table wp_posts

--cas d'une boutique Woocommerce
SELECT post_name FROM `wp_posts` WHERE post_status = 'publish' and post_type = 'product' 

--cas d'un blog WordPress
SELECT post_name FROM `wp_posts` WHERE post_status = 'publish' and post_type = 'article'

Note :  je n’ai pas pris en compte les pages, ni les catégories, si vous les voulez il suffit d’inclure and ajoutant une nouvelle clause AND.

Ces deux manipulations vont nous retourner des fichiers csv brut, or on ne veut que l’information de l’url il va falloir nettoyer toutes les données parasites qui ne nous intéressent pas.

Comment nettoyer le fichier export de Google Analytics?

Les fichier CSV Google Analytics

//extrait

/blog/?p=425,104 867,7 876,"7,51 %","6,7",1 018,"88,11 %","1,18",0,"0,00 €","0,00 %"
/portant-garage/,11 683,409,"3,50 %","9,3",330,"44,24 %","3,99",0,"0,00 €","0,00 %"
/blog/?p=374,10 195,802,"7,87 %",17,86,"96,51 %","1,03",0,"0,00 €","0,00 %"
/,8 317,799,"9,61 %",31,652,"25,15 %","9,31",0,"0,00 €","0,00 %"
/sac-moto/,6 651,98,"1,47 %",28,103,"59,22 %","2,69",0,"0,00 €","0,00 %"
/boutons-de-col/,6 044,100,"1,65 %",17,195,"1,03 %","2,53",0,"0,00 €","0,00 %"
/blog/?p=153,3 019,177,"5,86 %",16,23,"100,00 %","1,00",0,"0,00 €","0,00 %"
/boite-japonais/,2 707,19,"0,70 %",25,26,"34,62 %","4,58",0,"0,00 €","0,00 %"
/aimant-en-neodyme/,2 589,3,"0,12 %",11,21,"76,19 %","4,29",0,"0,00 €","0,00 %"

 

Comment nettoyer le fichier export de WordPress?

Le fichier CSV de WordPress

//extrait

"disque-de-frein-8-5cm"
"mousqueton-avec-attache-d-a303"
"lot-de-5-amortisseurs"
"boite-japonaise"
"aimant-pour-fermeture"
"portant-garage"
"pression-aimantee-vendu-par-2"
"bouton-de-col"
"bouton-de-tiroir-argent"
"aimant-en-neodyme"

 

Comment nettoyer un fichier csv en vidéo


Après avoir nettoyé les deux fichiers et rendu utilisable, nous allons les injecter dans des tableaux pour les comparer et extraire les urls d’un tableau qui ne sont pas présents dans l’autre afin d’avoir les urls inactives. Les script PHP est simple :

//open hit csv file
$hithandle = fopen('hits3.csv', 'r');
while(!feof($hithandle))
  {
  $hits[] = fgets($hithandle);
  }
fclose($hithandle);


// open available pages csv file
$availablehandle = fopen('available.csv', 'r');
while(!feof($availablehandle))
  {
  $available_url[] = fgets($availablehandle);
  }
fclose($availablehandle);

//make array of urls in $available that is not present in $hits
//Affiche les urls inactives
$poor = array_diff($available_url,$hits);
echo count($poor).'<br>';
echo '<pre>';
print_r($poor);
echo '</pre>';

Rappel des commandes utilisées

awk  -F/ '{print $2}' test.csv
grep -v 'blog' test.csv
awk -F/ '{print $2}' hits.csv > hits2.csv

sed -i 's/\"//g' available.csv  (edit in place)

 

Retour en haut