LinkCheck : vérificateur de liens

Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en tâche de fond pour avertir le webmestre dès qu’un liens montre des signes de faiblesse.

Fonctionnement

Le plugin LinkCheck parcoure les objets SPIP pour établir la liste des liens qu’ils contiennent. Les liens trouvés sont enregistrés dans une table de la base de données (spip_linkchecks) et sont reliés à l’objet ou aux objets qui le contiennent par le biais de la table spip_linkchecks_liens.

Une fois les liens listés, le plugin les vérifie un par un en interrogeant l’entête HTTP renvoyé par le serveur hébergeant la page.

La vérification répartis les liens en 4 statuts :

  • Les morts mort :-( : La page ou le document n’existe plus, c’est la fameuse erreur 404, le lien est à retirer ou à corriger de toute urgence.
  • Les liens malades : La fonction de vérification n’arrive pas à obtenir les informations permettant de savoir si le lien est valide, le serveur hébergeant la page est saturé. À vérifier manuellement.
  • Les liens déplacés : Ce sont des liens qui mène bien à la page souhaitée mais qui passe par une redirection . On va retrouver dans cette catégorie les URL raccourcis, les liens , Dans certains cas, il est préférable de remplacer ces liens par leur redirection.
  • Les liens valides : c’est ceux qu’on préfère, ils fonctionnent, rien à faire.

Le plugin linkcheck vérifie des liens collectés de deux façon :

  • Vérification automatique en tâche de fond : Après chaque modifications d’un objet, le plugin enregistre les liens présent dans cet objet, ils seront vérifiés par une tâche de fonds. Si un problème est constaté, le plugin informera le webmestre de la présence d’un lien brisé. Il pourra de cette façon le corriger au plus vite.
  • Vérification intégrale : Il est possible à partir de la page principale du plugin de lancer une vérification de tous les liens, Cette opération peut prendre plus ou moins de temps suivant le nombre de liens présents sur votre site.

Mode d’emploi

Une fois le plugin installé, un lien « Vérificateur de liens » est ajouté dans le menu « Maintenance ». En suivant ce lien, vous arrivez sur cette page :

Si c’est votre première utilisation, il sera offert la possibilité de lancer la recherche des liens. Vous n’avez qu’à cliquer sur le bouton « Commencer la recherche »

Une fois la recherche terminé, la page est réactualisée, vous pouvez consulter l’ensemble des liens présents sur votre site. Il ne sont pas encore vérifier.

Vous pouvez laisser les tâches de fonds faire, elles se chargeront de vérifier de l’ensemble des liens au goutte à goutte. Si vous êtes pressés, vous pouvez lancer une vérification complète en cliquant sur le bouton « Commencer la vérification » ou « poursuivre la vérification ». Il ne vous reste plus dans ce cas qu’à contempler de défilement de la barre de progression, elle vous annonce l’état de vos liens.

Paramétrages

Vous pouvez régler à partir de l’écran de configuration du plugin, la façon dont le plugin vous notifie les anomalies.

  • Vous pouvez activer ou désactiver la barre d’alerte.
  • Vous pouvez activer ou désactiver la notification par email

Export vers un tableur

Pour une gestion externe des liens morts ou déplacés, on peut souhaiter exporter les résultats vers un fichier tableur. Pour cela on peut passer par phpmyadmin. À cette fin, un lien situé en bas de la liste permet d’exporter la sélection : tous les liens et leur diagnostic, ou seulement les morts, ou les déplacés, etc.

Le développement de ce plugin a bénéficié du soutien du BRGM, qu’il en soit vivement remercié !

Noms alternatifs possibles :

  • checklinks
  • checklink
  • vérif liens
  • liens vérif

Discussion

39 discussions

  • 3

    Bonjour,
    Merci beaucoup pour ce plugin, mais j’ai des erreurs lorsque j’uploade des images dans les articles depuis que j’ai installé LinckCheck. Apparemment, ça vient bien du plugin (voir la capture d’écran). Je suis sous spip 3.1.
    Vous avez une idée d’où vient le problème ?
    Merci, Joël

    • Bonsoir

      Pouvez vous nous dire quels plugins supplémentaires sont installés ? et quels champs extras sont créés ? c’est étrange qu’il cherche ces champs

    • Rebonjour,
      je pense que le plugin qui pose problème avec LinckCheck est « Titre de logo » : http://plugins.spip.net/titre_logo.html. Les champs titre_logo et descriptif_logo (qui créent l’erreur SQL) lui sont liés, je pense.

    • Je t’ai répondu au dessus dans l’autre thread à ce sujet

    Répondre à ce message

  • 2

    Bonjour,
    J’ai beau désinstaller et réinstaller le plugin (à jour SPIP 3.1.4) j’ai un bug d’affichage (cf doc) :
    La liste des liens ne s’affiche pas.
    Par contre dans le csv j’ai bien la liste des liens morts et déplacés.

    J’ai le cas sur 1 site seulement.
    dd

    Répondre à ce message

  • 1

    Bonjour,

    Bravo pour ce plugin qui marche très bien sur un site très peuplé, et sur lequel nous trouvons ... plus de 123 liens morts ...

    La page linkchecks s’avère très pratique pour faire un premier grand nettoyage mais elle n’est accessible qu’au webmestre, lequel a déjà pas mal de boulot !

    Trêve de plaisanterie, un réglage des autorisations (ou la possibilité de les surcharger) serait un plus non négligeable.

    • Les rédacteurs et administrateurs ont maintenant le droit de voir la page

      Les autorisations sont plus pointues et surchargeables depuis la version 1.4.0 d’aujourd’hui

    Répondre à ce message

  • 1

    Bonjour,

    Je voulais juste signaler qu’en bas de la page du plugin s’affiche : !-linkchecks.csv" href="../spip.php?page=prive/linkcheck.csv">CSV

    Comme s’il manquait quelque part une fermeture de balise.

    Enfin, certains liens sont affichés comme malades (tous ceux de Mediapart par exemple), mais on ne peut pas les déclarer comme valides (ils fonctionnent).

    Sinon, très utile et très fonctionnel.

    Merci,

    Répondre à ce message

  • 8

    Bonjour,

    Est-il possible de ne pas activer les alertes pour les liens déplacés ?

    Merci

    • Je ne comprends pas bien ton problème, pourrais tu être plus précis ?

      Dans la version 1.3.5 (http://zone.spip.org/trac/spip-zone/changeset/99802), j’ai limité l’affichage sur chaque page de l’alerte au fait qu’il y ait au moins un lien mort ou un lien malade.

      Est ce cela à quoi tu faisais allusion ?

    • En ce qui me concerne, les liens déplacés ne posent pas de problèmes pour la navigation. Mais l’affichage dans la partie privée de « Il y a des liens invalides dans le contenu de votre site ! » est assez ennuyant car je veux surtout être alerté pour les liens ’morts’ ou ’malades’.

      Je suis en train de retravailler tous les liens déplacés bien que ce ne soit pas ma priorité.

      Tant que j’y suis, je signale un problème avec les url’s comme celle-ci : « http://www.spfb.brussels »
      Elle apparaissait comme « http://www.spfb.brussel ». Le lien était donc tronqué et mentionné comme ’mort’.

      J’ai modifié
      la ligne 63 dans inc/linkcheck_fcts.php en modifiant
      "('|\"| |\.|\->|\]|,|;|\s)(((((http|https|ftp|ftps)://)?www\.)|((http|https|ftp|ftps)://([".$classe_alpha."\-]*\.)?))([".$classe_alpha."0-9\-\+]*\.)+[a-zA-Z0-9]{2,7}(/[".$classe_alpha."=.?&_\-\+\:\,/%#]*)?)('|\"| |\.|\->|\]|,|;|\s)?",
      en
      "('|\"| |\.|\->|\]|,|;|\s)(((((http|https|ftp|ftps)://)?www\.)|((http|https|ftp|ftps)://([".$classe_alpha."\-]*\.)?))([".$classe_alpha."0-9\-\+]*\.)+[a-zA-Z0-9]{2,8}(/[".$classe_alpha."=.?&_\-\+\:\,/%#]*)?)('|\"| |\.|\->|\]|,|;|\s)?",

      et

      la ligne dans action/linkcheck_parcours.php en modifiant

      '(((https?|ftps?)://)|(((https?|ftps?)://)?[A-Za-z0-9\-]*\.))[A-Za-z0-9\-]+\.[a-zA-Z]{2,4}/?',
      en
      '(((https?|ftps?)://)|(((https?|ftps?)://)?[A-Za-z0-9\-]*\.))[A-Za-z0-9\-]+\.[a-zA-Z]{2,8}/?',

      Je ne sais pas si j’ai bien fait mais ça fonctionne :-/

    • Hop http://zone.spip.org/trac/spip-zone/changeset/99803 pour les .brussels, la version 1.3.5 corrigeait donc ton problème d’affichage d’alerte normalement, dis moi si ce n’est pas le cas

    • Ok, dès que le commit est sur la zone, j’essaierai la maj. Merci pour tout le travail, ce que je me devais aussi de souligner ;-)

    • C’est sur la zone, peut être pas encore en paquet mais disponible via svn normalement

    • Oui, j’ai essayé mais je ne pouvais plus utiliser le plugin. L’appui sur le bouton ’commencer la recherche’ ne fonctionnait plus :-(

    • Ok, tout fonctionne !

    Répondre à ce message

  • 12

    Je viens d’installer le plugin, très utile.

    Quelques remarques d’un utilisateur qui découvre et pistes de développement :

    -  [ ] présence du lien sur toutes les pages : ce message pourrait être plus informatif en précisant le nombre de liens

    -  [ ] bloc des liens trop visible sur les articles (il devrait être dans la marge car il ne s’agit pas d’un contenu éditable)

    -  [ ] ajout d’un lien vers archive.org sur les articles morts

    -  [ ] proposer de cliquer soi-même quand on a vérifié un lien OK, pour qu’il soit validé (au moins XX jours) ; [la doc ci-dessus explique qu’il faut checker manuellement mais ensuite on n’a pas moyen de valider qu’un lien a été contrôlé]

    -  [ ] export CSV (j’ai commité une première version, à finaliser avec generer_url_objet)

    -  [ ] gestion des autoriser() pas très claire (je n’ai pas réussi à ouvrir le plugin aux rédacteurices)

    -  [ ] ajout d’un picto lien mort optionnel dans propre() [+ éventuellement lien sur archive.org le cas échéant]

    -  [ ] vérifier/traiter automagiquement les migrations http⟹https

    -  [ ] améliorer la détection des liens (ex de bugs : "gazogène.com", ou "lacite.website" sont coupés bizarrement, les urls terminant par une virgule sont aussi coupés)

    -  [ ] améliorer la découvrabilité du plugin (j’ai cherché en vain avec le mot “checklinks”)

    Répondre à ce message

  • 1

    Une idée qui m’a été soumise par un utilisateur : pour les liens internes pointant vers un contenu non publié (au sens de l’admin de SPIP, pas au sens des squelettes qui pourrait utiliser {tout}), avoir un statu spécifique : « Non publié » qui permette de retrouver rapidement les contenus internes pointés par d’autres, valide parce qu’existant, mais donnant quand même une 404 côté public.

    D’ailleurs, mais c’est un autre débat, ça pourrait être pas mal que SPIP affiche côté public autre chose qu’une erreur 404 dans ce cas (en travaux ?).

    • un « statut non publié » restreint considérablement la liste des statuts « non publiés » de SPIP.

      Par contre, pour répondre à ta question sur les pages 404 : une page 404 par SPIP étant produite lorsque le squelette article.html (ou mot.html) ne renvoie rien, il te suffit de modifier celui-ci pour que les articles « non encore publiés » soient affichés en tant que tels.

    Répondre à ce message

  • 11

    Bonjour Kent1

    Merci pour toutes ces améliorations.

    J’ai des liens internes qui sont classés en mots alors qu’ils sont parfaitement valables.
    Par exemple : [plans formation->mot208]

    • Sur un site où j’ai installé le plugin, les rédacteurs copient collent les adresses des pages pour faire de liens.

      [blah->http://domaine.tld/url_propre]

      C’est pas bien mais c’est ce qu’ils font.

      Et tous les liens de ce type sont déclarés morts, alors qu’ils répondent bien (status 200).

      Bug ?

    • Par ailleurs, même problème que RealET, un lien [blah->rub266] est déclaré mort aussi.

    • Fausse alerte sur les liens internes en url complètes, il semble que le bug vienne du serveur lui même qui ne résoud pas son propre nom de domaine.

    • Oui c’est ce que je pensais pour le premier problème.

      Pour le second, tu peux tester avec la dernière version, elle utilise objet_test_si_publie() pour vérifier la publication de l’objet.

    • @RealET de même pour toi et les mots, tester avec la dernière version

    • @nicod_ : pour ton problème de rédacteur qui copie-colle les liens internes, tu peux utiliser Correction des liens internes.

    • Bonjour,

      Je rebondis sur ce commentaire.

      Pourquoi est-ce que ce n’est pas bien de copier/coller un lien qui a déjà publié sur le site ? Ça permet pourtant d’éviter des erreurs de frappe. ou de gagner du temps si on a besoin de recopier un passage entier d’un article contenant des liens.

    • Tout simplement parce qu’un lien peut être amené à changer, par exemple de domaine et que [lien->artxx] marchera toujours

    • CQFD.

      Merci pour cette réponse. c’est une bonne pratique que je vais mettre en œuvre.

    • Autre raisons en cas d’export vers d’autres format que le HTML, cela permet de mieux gérer les liens internes. De plus SPIP utilise la forme du lien pour intégrer des classes css spécifiques, qui permet éventuellement d’indiquer visuellement si ce lien est interne ou externe.

    • Merci, ça marche (pour les liens internes).

    Répondre à ce message

  • 2

    Bonjour,

    Testé sur plusieurs sites en 3.1.1 : les adresses de sites qui comportent des - (tirets) sont considérés comme morts (à tort).

    dd

    Répondre à ce message

  • 1

    Bonjour Kent1,

    Une idée d’amélioration : dans le cas des redirections, un bouton pour actualiser automatiquement le contenu là où c’est utilisé pour mettre à jour le lien avec la nouvelle adresse.

    Un piège : un simple rechercher/remplacer pourrait planter dans le cas où le lien existerait dans sa version telle qu’affichée, et qu’il y aurait un autre lien contenant la chaine du premier lien + d’autre caractères autour dans le même article.
    Exemple :

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom