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

  • Très bon plugin, très pratique.
    Merci aux développeurs :)

    Répondre à ce message

  • Bonjour,

    Tout d’abord un grand merci pour ce plugin génial et indispensable !

    Sur un SPIP 3.2.0 avec LinkCheck en 1.4.11, nous rencontrons quelques petits problèmes : dans la liste des liens morts, on se retrouve avec des liens tronqués, notamment des liens vers commons.wikipedia.org, dès lors, a priori, qu’il y a une parenthèse dans l’URL.

    Ainsi, « https://commons.wikimedia.org/wiki/File:Maison_pench%C3%A9e_(Limoges).JPG » est repéré comme mort et apparaît dans la liste comme « https://commons.wikimedia.org/wiki/File:Maison_pench%C3 %A9e_ » et est indiqué comme redirigé « https://commons.wikimedia.org/wiki/File:Maison_pench%C3 %A9e ».
    Idem avec https://commons.wikimedia.org/wiki/File:Uzerche_by_Gustave_Le_Gray_(2).jpg ou https://commons.wikimedia.org/wiki/File:Gargouille_(5).jpg qui se retrouve lié https://commons.wikimedia.org/wiki/File:Gargouille_(1).jpg et à https://commons.wikimedia.org/wiki/File:Gargouille_(4).jpg (dans ces trois derniers cas, LinkCheck n’identifie qu’une URL).

    Un problème également avec un lien mort détecté vers l’URL https://www.youtube.com/channel/UCbDwfR3_zczAT8wi5WEOPiw alors que celle-ci fonctionne parfaitement.

    Autre lien problématique : http://www.gutenberg.org/ebooks/17589 qui reste mort malgré les vérifications manuelles forcées.

    Merci encore et par avance :-)

    Répondre à ce message

  • 8

    Sur un site SPIP
    http://www.planete-sciences.org/astro/
    un lien qui pointe vers un sous fichier du même domaine (mais qui n’est pas SPIP)
    http://www.planete-sciences.org/astro/couleursdetoiles/

    est marqué comme erronée, alors que cela marche parfaitement.

    Si en plus je teste cela sur mon localhost > pas de souci.

    • Salut,

      je me permet de relancer, si vous avez une piste. Sinon il faudra que je trouve du tps pour débuguer cela.

    • Peut être comme @nicod ici, un problème de serveur qui a du mal à se résoudre seul ?

      Chez moi ton lien marche bien

    • A oui c’est très probable. Il y a une manip facile pour vérifier cela ?

    • Tu as accès à une ligne de commande ? sinon je ne sais pas, demande à nicod ;)

    • Malheureusement pas. Merci en tous cas, je vais lui envoyer un mail.

    • Auto syndique toi ?

    • Bon idée. Testée et confirmé que c’est cela le problème. Bon il ne reste plus qu’à demander aux responsables techniques de résoudre ce problème.

    • Le responsable du serveur a changé les réglages. Voilà la cause du problème :

      Il y avait une différence entre l’ip de Listen de apache et la loopback du fichier /etc/hosts. (un reste de la dernière migration je pense)

    Répondre à ce message

  • 2

    Pour info j’ai changé la borne de paquet.xml :
    compatibilite=« [3.0.5 ;3.2.*] »

    et le plugin fonctionne bien en 3.2

    Répondre à ce message

  • 4

    Bonjour,

    Merci pour les dernières mises à jour de ce plugin tout simplement indispensable !
    Nous l’utilisons au BRGM depuis plusieurs années et nous en sommes toujours aussi satisfaits.

    Après l’avoir déployé sur de nouveaux sites dernièrement (au total, une quinzaine de sites BRGM l’utilisent !), je me permets de vous faire quelques retours, qui pourraient éventuellement faire l’objet d’améliorations :

    • Les liens avec un point-virgule sont tronqués.
    • L’affichage des documents « internet », pointant vers une URL externe (ex : une vidéo Youtube), propose 2 fois l’URL vers le document, dans les colonnes « utilisé dans » et « URL ». Il serait pratique que le lien de la colonne « utilisé dans » renvoie vers le formulaire d’édition du document. Cela permettrait de pouvoir aller corriger le lien facilement, sans avoir à rechercher le document en question dans la médiathèque.
    • Les documents internes non publiés, qu’ils soient utilisés dans un article « en cours de rédaction » via une balise , ou uniquement utilisés comme lien , apparaissent comme malades. Le statut « Malade » ne me semble pas vraiment adapté dans ces 2 cas, car les liens publics vers ces documents sont pourtant bien valides. S’il n’est pas possible de les identifier comme liens valides, un statut « Non publié » pourrait être plus approprié.
    • Même s’il y a de moins en moins de faux-positifs, cela pourrait être intéressant de pouvoir modifier manuellement l’état d’un lien afin de rendre valide un lien considéré comme mort (ou malade) par LinkCheck.

    Répondre à ce message

  • 8

    Bonjour, j’ai installé le plugin, mais j’ai toujours « Aucun lien n’a encore été recensé ». J’ai appuyé plusieurs fois sur « Commencer la recherche », sans effet sur la page exec=linkchecks ni sur le fichier CSV, désespérément vide.

    Spip 3.0.26
    Linkcheck 1.4.6
    PHP 5.4.45

    • Après plusieurs jours, je recharge la page et un seul lien (valide) a été trouvé. Il y a clairement un problème, non ?

    • Si le site est chez Free (comme le suggère ton adresse mail), alors c’est normal : l’hébergement gratuit Free empêche les connexions sortantes, donc Linkcheck ne peut rien vérifier d’externe.

      Si ton site n’est pas chez Free, je ne sais pas.

    • Ben non, le site n’est pas chez Free mais chez Phpnet. Je vais l’installer sur un autre site du même serveur pour voir.

    • Bon… mon premier site en est à 14 liens trouvés. Ça fait pas lourd, en une semaine :-)
      Le second n’affiche toujours rien après plusieurs hures et des rechargements de page.

    • Peux tu mettre à jour en 1.4.7, réinitialiser la table avec le bouton adéquat et relancer la recherche de liens ?

    • Peux tu mettre à jour en 1.4.7

      Avec joie , mais où trouver cette version 1.4.7 ? La dernière révision 105398 dit : « Incrément de version : 1.4.6 »…

      PS pour info sur mon site 1, linkcheck en est désormais à 67 liens trouvés (mais ça me paraît très peu) et sur le site 2, toujours aucun lien trouvé après plusieurs jours.

    • Elle devrait être dispo sous peu, le temps de mise à jour des dépots. J’ai l’impression que ton pb est que la recherche de liens à l’installation n’a pas bien fonctionné.

      Avec la version que tu as actuellement, tu devrais déjà réinitialiser la table, relancer la recherche de liens et voir si ce n’était pas juste cela le pb.

    • Avec la nouvelle version, Linkcheck trouve 3245 liens en une vingtaine de secondes, ce qui me paraît cohérent. Merci beaucoup !

    Répondre à ce message

  • 3

    Salut,

    sur un SPIP 3.2 svn, Linkchek n’agit pas du tout, et dans le log mysql je vois plein d’erreurs identiques sur les différentes tables :

    2017-09-08 16:41:26 127.0.0.1 (pid 76968) :Pri:ERREUR: {{Erreur 1139 de mysql: Got error 'unmatched parentheses at offset 66' from regexp}}
    in /Users/nico/Sites/dev12/www/plugins/auto/linkcheck/v1.4.6/action/linkcheck_parcours.php L100 [sql_allfetsel(),action_linkcheck_parcours_dist(),traiter_appels_actions()]

    J’ai testé les requêtes à la mano, ça vient visiblement de celle là :

    REGEXP('(((http|https|ftp|ftps)://)?www\.)|((http|https|ftp|ftps)://(.*\.)?))(.*\.)+[a-zA-Z0-9]{2,9}(/.*)?)(\'|"| |\.|\->|\]|,|;|\s)/?')

    Répondre à ce message

  • 2

    Il doit y avoir un bug dans le forum car mes réponses n’apparaissent pas sous mon post ?
    Je refais la discussion ici. Mon post d’origine :

    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

    La réponse de kent1 (qui n’apparait pas dans le forum mais que j’ai reçue par mail ??)

    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

    Ma réponse (qui n’apparait pas non plus) :

    Bonjour,

    Le plugin qui pose problème est sans doute « Titre de logo » : http://plugins.spip.net/titre_logo.html. Celui-ci ajoute en effet un titre et un descriptif aux logos, et c’est ce qui semble poser problème dans les erreurs des captures d’écran.

    • Du coup j’ai installé le plugin titre de logos

      Je l’ai profondément modifié car il utilisait mal la déclaration d’objet (il déclarait les champs en question pour tout objet).

      Bref.

      J’en ai profité pour corriger un bug dans linkchecks aussi.

      Je te propose de tester les deux dernières versions du plugin et de nous dire si c’est ok

    • Bonjour,
      désolé pour ma réponse tardive : ça semble désormais fonctionner sans problème !
      Merci !

    Répondre à ce message

  • 2

    Bon... je l’ai déjà dis, je le répète : ce plugin est absoluement GE-NIAL ! Encore bravo et merci !

    A l’utilisation en revanche, m’est venue une idée que je ne saurais pas intégrer moi même mais que je soumets ici au cas où :

    peut-on envisager qu’à l’installation du plugin :

    • celui-ci attribue automatiquement à chaque lien qu’il repère un id_alpha_numerique
    • déployés sur toutes les balises <a> qu’il va tester en tant qu’id css

    ce qui permettrait de faire des raccourcis plus efficaces dans ce tableau, directement vers les liens grâce aux ancres ? (cf capture jointe)

    (la méthode est juste celle qui m’a paru la plus logique sur le moment, il y a surement plus rapide/moins lourd pour arriver au même objectif mais je suis resté une burne en peu cheu peu ... :-X )

    A+

    • C’est loin d’être aussi facile malheureusement, je n’ai pas trouvé de pipeline pour m’insérer proprement pour faire cela malheureusement

    • je n’ai pas trouvé de pipeline

      Ça doit être de là que vient l’expression « en France on a pas de pétrole mais on a des idées »... :-p

    Répondre à ce message

  • 15

    Bonjour,

    Ce plugin rend bien service, il est globalement bien fait MAIS, j’ai un petit problème de faux positifs : il détecte bien trop de liens morts qui ne le sont pas.

    J’ai un peu cherché et j’ai trouvé le bug : l’expression régulière utilisée n’est pas complète pour détecter une URI.
    c’est ligne 56 à 64 : https://zone.spip.org/trac/spip-zone/browser/_plugins_/linkcheck/trunk/action/linkcheck_parcours.php2
    En gros, il suffit d’une apostrophe, ou d’un autre caractère un peu spécial pour que le parser arrête de lire l’uri, et teste un lien incomplet, du coup.

    Il me semble que la RFC qui définit le format des URI est bien plus permissive que la regexp utilisée ici. ( https://tools.ietf.org/html/rfc3986 )

    Au choix vous pouvez :
    -  utiliser une bibliothèque qui le fait tout seul
    -  utiliser une regexp qui marche bien, et comme je suis quand même intéressé par la résolution rapide de ce bug, voici une proposition (python, désolé) : https://docs.djangoproject.com/fr/1.11/_modules/django/core/validators/#URLValidator

    à bientôt,
    Lazouz

    • Bonjour, peux tu fournir des liens d’exemple stp ?

      merci

    • Jaseur Boréal

      Bonjour,

      Exemple de liens classés morts qui n’en sont pas :

      Ils concernent ici un flux radio accessible dans le cadre en bas de cette page :
      https://www.lettonie-francija.fr/2017-Riga-chanter-Olympiade-Europe-1140

      Cette adresse réelle de flux radio s’ouvre avec vlc :

      http://lr3mp0.latvijasradio.lv:8004/listen.pls

      L’adresse exacte est en fait tronquée par LinkCheck qui de ce fait la considère comme un lien mort. Dans la liste des liens morts, c’est l’adresse incomplète qui s’affiche :

      http://lr3mp0.latvijasradio.lv/

      Cordialement

    • Bonjour, la version 1.4.5 devrait régler ce problème d’url avec port stipulé dans le lien : https://zone.spip.org/trac/spip-zone/changeset/105248

      Merci de faire un retour si c’est ok

    • Pour moi il y a un problème plus profond dans la détection des uri : il faut respecter la RFC (https://tools.ietf.org/html/rfc3986) et pour le moment ça n’est pas du tout le cas. A titre d’exemple rapide, détecter « www. » n’est pas dans la RFC et surcharge la regexp.

      Ajouter des cas à chaque signalement sera pénible pour vous, rend le plugin inutilisable pour la plupart des utilisateurs qui ne sauront pas remonter le bug ou qui abandonneront le plugin parce que peu efficace.

      Je veux bien aider mais n’ai aucune idée du fonctionnement du développement des plugins spip.

    • Jaseur Boréal

      Paldies - Merci Quentin,

      En remerciement pour la réactivité, quelques sonorités culturelles futures à écouter bientôt : lettonie-francija.fr Juillet 2017 Riga Olympiade Chorales Européennes
      Je fait mon nettoyage de pages, de liens et LinkCheck est très utile !
      Les événements culturels vont se multiplier en Lettonie avec un point culminant dans un an pour le centenaire de l’indépendance des pays baltes. Entre la Lorraine, Metz et Latvija, toute une histoire de culture, de photographies exposées en Vallée des Anges, et autres musiciens saxophonistes franco-lettons, en passant par le football Club de Metz ...

      Musicalement,
      Le Chti qui Jase

    • Juste que je souhaite tester avant de modifier cette regexp et nous n’avons pas trouvé de librairie correcte. Qui plus est nous devons gérer également les liens spip.

      donc avant de toucher je veux tester et si possible avec de vrais urls existantes.

      les 2 modifs faites ce week end l’ont été en regardant la rfc pour traiter des cas larges.

      mais comme tu ne souhaites apparemment pas donner de faux positifs de test, ce sera quand on tombera dessus

    • Jaseur Boréal

      Bonjour,

      Exemples de liens considérés morts et qui ne le sont pas !

      Ces liens sont considérés morts par je ne sais quelle coup de vent dans les nuages ?

      etc ......

      Cordialement

    • Pour le premier lien c’est que le serveur en face est mal configuré coté https (https://www.ssllabs.com/ssltest/analyze.html?d=www.aslimnica.lv) donc les serveurs ne lui font pas confiance contrairement aux navigateurs.

      wget https://www.aslimnica.lv/sites/default/files/editor/lic_pd.pdf
      --2017-07-19 19:23:41--  https://www.aslimnica.lv/sites/default/files/editor/lic_pd.pdf
      Resolving www.aslimnica.lv (www.aslimnica.lv)... 80.232.215.133
      Connecting to www.aslimnica.lv (www.aslimnica.lv)|80.232.215.133|:443... connected.
      ERROR: The certificate of <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+d3d3LmFzbGltbmljYS5sdicgaXMgbm90IHRydXN0ZWQuCkVSUk9SOiBUaGUgY2VydGlmaWNhdGUgb2Y8L2NvZGU+"></span>www.aslimnica.lv' hasn't got a known issuer.

      Devrait mieux fonctionner avec : https://zone.spip.org/trac/spip-zone/changeset/105393

      Pour info, il ne sert à rien de mettre du gras, ni d’être ironiques, la preuve ici c’est le serveur en face qui est pourri...

      Je rappelle pour les râleurs, que participer au développement est simple, il suffit de se sortir ...

    • Pour les deux autres liens, j’ai valide pour l’un et déplacé pour l’autre

      Il se peut que lorsque tu les as testé, leur serveur soit en surcharge par exemple...

    • Jaseur Boréal

      Merci,

      Il est vrai que pour des pages spip « https » correctes, les éléments externes proposés au téléchargement ou chargés avec la page doivent être correctement https.

      Un mètre à la fois on avance...

    • Il n’y a pas trop de rapport. Quand il y a communication vers un serveur, il y a vérification du certificat que ce soit en php ou via la ligne de commande. Si le serveur est mal configuré, ça plante, ce qui est somme toute logique non ?

      Du coup là on ajoute une exception pour cela ce qui dans le meilleur des mode ne devrait pas exister.

    • Donc il est important de donner les faux positifs pour que l’on puisse les tester, et trouver des solutions.

    • Jaseur Boréal

      Bonsoir,
      Pour le premier lien, je me suis demandé si le volume de « plan d’accès.pdf » était source de lien mort (31 Mo). Ce lien est incorporé dans une page pour téléchargement si les visiteurs veulent consulter le plan d’accès.
      Si la routine de vérification charge l’image.pdf, cela peut prendre quelques temps qui dépasserait alors un tempo préréglé.
      Une hypothèse ?
      @+

    • Depuis la version 1.4.6 les caractères unicodes sont pris correctement en compte normalement

      Il y a également d’autres améliorations

    • Pour ton plan d’accès c’était le problème de certificat.

    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