Collez un README ou un brouillon de documentation pour voir le plan des titres et les remarques : sauts de niveau, ancres répétées, blocs de code non fermés, liens vides ou sans définition et espaces en fin de ligne. Le Markdown est lu comme du texte, jamais rendu, et aucun lien n’est ouvert.
Fonctionne localement dans votre navigateurLe contrôle lit comme du texte le Markdown que vous collez et répond avec trois éléments : le plan des titres, les compteurs de titres, de liens et de blocs de code, puis les remarques structurelles qu’il peut prouver à partir du source. Il ne rend jamais le document, ne le téléverse pas et n’ouvre aucun lien : un brouillon qui n’est pas encore à partager se vérifie donc sur place.
Tout s’exécute dans la page. Dans une session mesurée, les seules requêtes sorties du navigateur étaient celles de l’analyse d’audience du site : le brouillon, les liens et le plan sont restés dans l’onglet, ce qui explique aussi que le contrôle continue de fonctionner sans connexion.
Les liens en ligne sont comptés avec un titre facultatif, comme dans [texte](https://example.com "titre"), et avec un niveau de parenthèses dans la destination, ce dont les URL à la Wikipédia ont besoin. Les liens de référence comptent lorsque le document définit le libellé quelque part : la forme complète [texte][ref], la forme repliée [texte][] et la forme abrégée [ref] se résolvent contre une ligne telle que [ref]: https://example.com, avec ou sans titre. Les liens automatiques — <https://example.com> et <mailto:docs@example.com> — comptent également.
Trois éléments qui ressemblent à des liens sont volontairement écartés : les images écrites , la syntaxe de lien dans le code en ligne comme `[texte](url)`, et les balises HTML telles que <a href="https://example.com">, qui sont du balisage et non un lien automatique. Un lien de référence sans définition est signalé au lieu d’être compté.
Les deux styles de titre sont reconnus : ATX (de # à ######, avec jusqu’à trois espaces d’indentation et un éventuel rappel de #) et setext (une ligne de paragraphe soulignée par ==== pour le niveau un ou ---- pour le niveau deux). Les ancres sont générées comme le font les générateurs de site statique — minuscules, ponctuation retirée, espaces changés en tirets — si bien que « Install now! » et « Install now? » se rejoignent sur #install-now, et le second est signalé comme ancre répétée.
Un bloc ouvert par ``` ou ~~~ cache son contenu à toutes les autres règles, et se ferme par une ligne finale au moins aussi longue que celle d’ouverture ; un bloc non fermé est signalé à la ligne où il a commencé. Un document qui commence par une ligne --- est lu comme front matter YAML jusqu’à la ligne --- ou ... suivante : les deux-points, les crochets et les espaces finaux des métadonnées ne sont donc pas signalés comme du texte.
Il ne rend pas le Markdown, donc il ne peut pas montrer l’aspect final de la page, et il ne demande pas les cibles des liens : une URL injoignable n’est jamais signalée. Il vérifie les règles décrites ici et rien d’autre : longueur de ligne, style des puces, lignes vides autour des blocs, alignement des tableaux et les autres règles de style d’un linter complet restent hors de son périmètre, et un bloc de code indenté de quatre espaces est lu comme du texte ordinaire.
Un document de 4000 lignes contenant 4000 liens a été analysé en environ 0,6 s dans un navigateur de bureau, et le travail se fait au clic sur le bouton, pas pendant la frappe. Pour contrôler tout un dépôt avec un jeu de règles figé, un linter en ligne de commande reste le meilleur outil ; cette page répond pour un seul brouillon, sans le téléverser.