Changer ses permaliens sans tout exploser

Sujet récurrent depuis la refonte en 2017, la structure des liens des articles (permalien, permalink…) de Nofrag étaient basée sur le magnifique schéma suivant : /YYYY/MM/JJ/<id>

Sauf que ça n’a rien de SEO friendly, en 2020 on attend plutôt le titre de la news que ce schéma qui n’a quasiment aucune valeur informative. En plus, on donne directement une indication de la date de l’article : le lecteur peut estimer qu’une information ancienne n’est plus vraie et qu’elle ne mérite pas d’être lue. Ce n’est pas mon avis hein.

Changer les permaliens c’est simple, mais il faut gérer les liens existants. On parle d’environ 56000 liens vers des news pour le patrimoine de Nofrag. Si on ne prend pas le temps de réfléchir à cette question, on perd gros en référencement : des 404 à tour de bras ça fait mal auprès de Google.

On a installé le plugin Redirection, qui permet de faire…. Des redirections. Pour tester ses redirections avant de les enregistrer sous nginx c’est plutôt pratique.

La première idée a été d’aller pomper sur la base de données les URL existantes de chaque news, de sorte d’avoir un résultat de ce type par news :

"^/2005/04/02/16896/*","https://nofrag.com/preview-de-pariah/"

Et après d’importer ça dans redirection via l’outil d’import.

Ça marchait au début, mais le site a explosé cette nuit juste après avoir fait l’import  : 56000 lignes à faire gérer par le plugin, c’était trop lourd. J’ai ensuite pensé faire faire ce travail par nginx, mais pareil, 56000 rewrite rules, il n’aime pas DU TOUT.

Ce matin, j’ai eu l’idée au réveil d’utiliser les Regex. Couplée à l’utilisation de l’url https://nofrag.com/?p=ID, qui redirige vers la page d’un article à partir uniquement de son ID, c’était tout simple. Encore fallait il connaître l’existence de cette url, merci StackOverFlow.

L’expression régulière suivante nous a permis de récupérer l’identifiant de la news :

^/[0-9]{4}/[0-9]{2}/[0-9]{2}/([0-9]*)

On redirige ensuite vers la page suivante :

https://nofrag.com/?p=$1

L’idée étant qu’on récupère la partie en rouge (grâce à l’utilisation des parenthèses), et qu’on la recolle dans l’url de destination avec la mention $1.

Pour aller plus loin, on va définir une règle toute bête sous nginx sur la conf de notre site :

rewrite ^/[0-9]{4}/[0-9]{2}/[0-9]{2}/([0-9]*) https://nofrag.com/p=$1 permanent;

Ce qui nous permettra de nous débarrasser du plugin WP et gagner un peu de mémoire.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.