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

  • Bonjour,

    Je rencontre un bug à l’activation. J’ai bien les dépendances en version demandée mais impossible à activer.

    SPIP 3.2.16
    PHP 5.6.40

    Répondre à ce message

  • Hello

    Plugin indispensable pour éviter d’avoir des liens morts dans ses articles.

    Cependant, ce qui serait cool, ce serai d’avoir la possibilité de ne pas prendre en compte

    • les liens entre balises « code »
    • les liens des forums car au bout de quelques années d’existence, le nombre de liens morts dans ces forums gonfle fortement et ils sont plus compliqués à enlever ou corriger (c’est du vécu).

    Répondre à ce message

  • 1

    Bonjour,
    Après une maj en 4.15, j’ai un problème avec le plugin ’linkcheck ’qui m’affiche un message d’erreur dans l’espace privé :

    Erreur SQL 1146
    Table ‹ **_linkchecks › doesn’t exist
    SELECT * FROM spip_linkchecks LIMIT 1
    ****/docs/ecrire/genie/maintenance.php** verifier_crash_tables(){ sql_select(); } 

    C’est plus embétant que cela paraît car je ne peux sauvegarder la base sql (‹ table linkcheck manquante ›) ni utiliser ‹ adminer ›

    J’ai désinstallé proprement le plugin linkcheck et supprimé la table correspondante dans mysql (plusieurs fois) mais le message d’erreur persiste.
    Merci pour votre aide !

    Répondre à ce message

  • 1

    Salut,
    j’ai quelques faux positifs parfois (des liens morts ou malades qui ne le sont pas).
    Est-il possible de demander de ne pas traiter certains liens ?
    Bonne journée !
    Ben

    • Vous pouvez ignorer ma demande, je vois que la question a déjà été posée ;)
      (Comme un imbécile, je n’avais pas regardé...)
      Si je résume :
      Non, il n’y a pas la possibilité ou alors il faudrait la coder s’il y a des motivé-es.

    Répondre à ce message

  • 1

    La version 2.0.3 ne fonctionne pas sous Spip 4.1.
    En effet, la fonction recuperer_entetes() n’est plus supportée, la doc indique qu’elle doit être remplacée par recuperer_entetes_complets().

    Il faut donc actualiser le fichier « inc/linkcheck_fcts.php » en ligne 331, en remplaçant :

    $headers = recuperer_entetes($f, '');

    par

    $headers = recuperer_entetes_complets($f, '');

    Répondre à ce message

  • 4

    Ce plugin fonctionne sur un site SPIP 4 (en changeant la borne) mais avec quelques altérations :
    il n’est plus possible de cliquer sur l’objet qui contient le lien (cf capture).
    Et visuellement (anecdotiquement) les liens de pagination en bas sont en liste : ul.pagination-items > li

    Merci
    dd

    • En complément voici le message d’erreur sur la page

      ecrire/ ?exec=linkchecks&message=check_ok

      1         Filtre lien_objet non défini        ../plugins/auto/linkcheck/v1.5.3/prive/objets/liste/linkcheck_detail.html        _liens        17

      Merci

    • Bonjour,

      En effet, je constate aussi ce comportement.
      Une piste pour le corriger ?

    • La version 2.0.0 du plugin, marqué compatible spip 4.0.0, corrige ce filtre + le souci de pagination.

    • Super, merci.
      Je teste dès que possible

    Répondre à ce message

  • Bonjour, je fais remonter une erreur ici...
    Problème avec le bouton « Tout enlever » sur la gestion des documents dans un objet
    Lorsque j’essaie d’utiliser le bouton « Tout enlever » dans, j’ai un message d’erreur...

    Fatal error : Uncaught Error : Call to undefined function objet_info() in .../plugins/auto/linkcheck/linkcheck_pipelines.php:59 Stack trace : #0.../ecrire/inc/utils.php(199) : linkcheck_post_edition(Array) #1.../tmp/cache/charger_pipelines.php(1433) : minipipe(’linkcheck_post_...’, Array) #2 .../ecrire/inc/utils.php(265) : execute_pipeline_post_edition(Array) #3 .../plugins-dist/medias/action/editer_document.php(263) : pipeline(’post_edition’, Array) #4 .../plugins-dist/medias/action/dissocier_document.php(102) : document_instituer(108959) #5 .../plugins-dist/medias/action/dissocier_document.php(178) : supprimer_lien_document(108959, ’evenement’, 7673, false, false) #6 .../medias/action/dissocier_document.php(65) : dissocier_document(’I/document’, ’evenement’, 7673, false, false) # in .../plugins/auto/linkcheck/linkcheck_pipelines.php on line 59

    Spip 3.2 [24473]

    Répondre à ce message

  • 2
    olivier

    Merci pour ce plugin indispensable.

    -  serait-il possible à l’avenir de mettre un petit bouton à coté d’un « lien déplacé » pour « accepter la redirection » et modifier directement la base spip ?
    -  serait-il possible de mettre un bouton pour « ignorer définitivement » les faux-positifs pour les liens morts ?

    exemples de faux-positifs chez moi : https://borisvs.com ; https://www.sheermedia.co.za/cv ; https://www.xdeep.eu

    • Si tu te sens de coder ça, n’hésite pas !

    • olivier

      je sais programmer des boucles, mais pas ecrire du php ou des instructions sql. Je risque de passer des jours en debug pour des histoires de virgules, ou des exceptions.
      En regardant le code du plugin, il faut rajouter une fonction de recherche/remplacer de texte (url) dans des champs textuels. On connait déjà l’url à trouver et celle à remplacer. (peut-etre des histoires d’url_rewriting à vérifier pour les liens internes ?).
      Pour « ignorer » une url (faux-positifs), créer un nouveau statut « ignorés » et une tache cron associée à fréquence tres petite .
      Ergonomiquement, je rajouterai 2 liens dans la colonne Etat, sous « publier ce lien » : « remplacer ce lien » et « ignorer ».
      Tels quels, les liens ignorés peuvent être retrouvés en réinitialisant,

    Répondre à ce message

  • 9
    AbsurdePhoton

    Bonjour, super plug-in, très pratique. Bravo aux développeurs, je l’utilise depuis plus de deux ans.

    ...mais malheureusement deux bugs gênants :

    * lors de la vérification des liens (avec ?exec=linkchecks), pas mal de blocages : obligé de rafraîchir la page et relancer manuellement. Cette fois-ci, il ne passe même plus un certain palier et reste bloqué indéfiniment
    * des faux-positifs comme en parlent d’autres personnes ci-dessous : des liens indiqués comme morts alors qu’ils ne le sont pas, ce sont les plus gênants

    • W. Piedfort

      bonjour ,
      il marchait bien ce plugin jusqu’à il y a 3 mois env... et sur tous mes sites il voit des morts là où il y en a pas : on clique sur le lien et il s’affiche, pas de 404 : alors je pense que ce plugin a besoin d’un coup de test et de modif ! merci d’avance.

    • Je n’ai personnellement aucun problème. Une hypothèse possible serait une modification de la conf serveur qui empecherait celui-ci de contacter d’autres serveurs. Il faudrait essayer en ajoutant un document distant à un article
      1) document distant sur un autre domaine
      2) document distant sur le même domaine.

      Si cela bloque, c’est que le problème se strouve au niveau du serveur.

    • W. Piedfort

      Bonjour Maieul,
      afin de pouvoir savoir ce qui bloque, si c’était le serveur, quel est le port / protocole qui est employé par ce plugin SVP pour pouvoir dire qu’un lien est cassé ?
      Car perso, avec la technique que je possède, une page répond en 200 (OK) ou 404 (KO) , ou autre ...c’est simple à priori.
      Mon serveur, comme beaucoup ici qui ont le soucis, est capable d’aller lire une page et de capter sa réponse.
      merci .

    • normalement ca fonctionne en http / https sur porte standard (80 / 81).

    • Il n’y a pas de blocage spécifique sur mon serveur. Au vu du nombre de posts ici sur le sujet, j’ai comme un doute sur l’origine de ce blocage...

      100% les liens prétendus morts et affichés répondent parfaitement. N’ayant pas envie d’étaler les liens ici, je ne les mets pas en PJ.

      Disons sur un de mes sites https://www.mondomaine.com, il voit comme liens cassés https://www.mondomaine.com et http://www.mondomaine.com, c’est pour dire l’ampleur.

    • Bah chez moi 0% de liens prétendus morts le sotn effectivement. Donc c’est bien qu’il y a un truc quelque part qui bloque, je ne sais pas où....

      Par ailleurs, l’exemple que tu donne est un parfait exemplede ce qui peut etre problèmatique. J’ai régulièrement des serveurs mal configurés qui ne sont pas capable se se pinguer eux même....

    • Bonsoir,
      mais tu as raison ! un ping depuis une machine externe sur www.mondomaine.com répond bien et pas du tout depuis la console linux de mon propre serveur ! Tu vas sans doute râler, mais sais-tu à priori ce que j’ai mal ou pas fait (j’ai accès à tout sur le vps) ? Bind, Network ? merci d’avance.

    • aucune idée. Le seul cas où j’ai eu cela, les admin m’ont dit

      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)

      mais j’en sais pas plus.

    • Bonjour Maïeul,
      Eh bien c’était une adresse qui s’était glissée dans iptables ... ;et qui causait ce dérangement plus un autre sur les syndications par Rss ! Ton plugin remarche encore mieux qu’avant ! une vraie merveille. Merci bien de ton soutien et des indications sympathiques et patientes.
      William

    Répondre à ce message

  • 3

    Hello !

    Bon ce plugin est franchement génial et accompagne tous mes sites depuis un moment maintenant, merci pour le taff ! :)
    Par contre, il a ponctuellement des remontées en faux-positif malgré plusieurs tests et vérification/correction de ma part des URL (https VS http; avec ou sans www. ; ....)

    2 liens morts au hasard sur un spip 3.2.1 mutualisé, branche stable et à jour :

    • http://www.perdu.com/ : alors que celui là, quand même, il est plutôt du genre immortel ! Vu la config de son serveur sans règles précise de redirection, j’aurais compris un statut « Malade » ou « redirige » mais « mort » ???)
    • https://fontawesome.com/v4.7.0/ : là par contre... serveur OK, toute variante d’url redirige correctement, headers 200 OK ... mais « mort » qd même ... je vois pas ...)

    Une idée ?
    Merci d’avance ;)

    • Ah tiens ? Sur le même site, un nouveau cas à l’instant de faux positif sur un lien interne déclaré « mort », dans un article de documentation rédacteur interne, donc laissé en statut « proposé » et pointant vers https://site.ext/ecrire/?exec=formulaires alors que le plugins est bien installé et actif (et à jour).

      Si ça peut aider je peux sortir des logs ou autre, il faut juste me dire quoi chercher.

      Merci d’avance

      EDIT : après refresh et purge du cache, ce même lien apparaît finalement en « déplacé » mais ne communique aucune url définitive. De mon côté je suis garant du bon formatage du lien et de la bonne réponse du serveur (200).

    • Et aujourd’hui, sur un site, tous les liens pointant vers soundcloud.com/... sont affichés ’morts’, à moins que je ne les mette entre chevrons (oEmbed)

      bizarre... vous avez dit bizarre ?

    • Chez moi aussi ces liens sont toujours en « morts »

      https://café-vie-privée.fr/
      https://filezilla-project.org/

    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