URL: https://linuxfr.org/news/validite-html-des-pages-sur-linuxfr-org
Title: Validité HTML des pages sur LinuxFr.org
Authors: Benoît Sibaud
yPhil, pulkomandy, BAud, Nils Ratusznik, Yves Bourguignon, bobble bubble, Ysabeau, NeoX et tisaac
Date: 2018-10-06T18:34:56+02:00
License: CC By-SA
Tags: html
Score: 5
Un matin (le 6 octobre 2018), une question existentielle a fait jour dans mon esprit, comme ça, venue d’on ne sait où. Et dont on voit le caractère urgent et prioritaire quelques années plus tard.
Une idée probablement dans le même genre que l’envie pas gagnée de Sir Tim Berners-Lee de rendre à l’utilisateur le contrôle via le [projet Solid](https://solid.mit.edu/), ou les râleries sur la [dérive obésitaire du logiciel](https://blog.romainfallet.fr/desenchantement-logiciel/) (évoquée en [journal](https://linuxfr.org/users/vincentd/journaux/un-developpeur-qui-denonce)) ou la quête graalesque du poétique oxymore de la [DRM ouverte interopérable standard accessible](https://www.actualitte.com/article/lecture-numerique/une-drm-ouverte-basee-sur-lcp-en-passe-de-devenir-un-standard/90877).
Bref, je me demandais « les pages produites par LinuxFr.org sont-elles valides niveau HTML, et est‐ce que (plutôt comment) ça a changé au fil des années ? ».
Évidemment, ça ne donnera un état et une évolution que sur les contenus/commentaires du site, et pas sur Internet en général (même si certains ne connaissent d’Internet que leur réseau social préféré, mais ceux‐là ne nous intéressent pas ici, car soit ils ne viennent donc pas sur LinuxFr.org, soit ils y sont en permanence mais ne mettent pas de liens pour en sortir vu qu’ils n’en sortent pas).
----
----
# HTM-quoi?
Le [HTML](https://fr.wikipedia.org/wiki/Hypertext_Markup_Language) est le langage du web. Il permet de structurer et de mettre en page le contenu de tous les sites internet.
Il est proche du XML, mais plus spécifique et moins strict. Comme dans tous les langages, il est possible de faire des erreurs qui rendent le fichier invalide. Par exemple, l’utilisation de balises qui n’existent pas, des balises ouvertes et jamais fermées (comme cela peut arriver avec des parenthèses, ou une utilisation incohérente des balises (par exemple un élément de liste qui ne serait pas dans une liste). Le navigateur [se débrouille alors comme il peut pour afficher quelque chose](https://developer.mozilla.org/fr/docs/Web/HTML/Quirks_Mode_and_Standards_Mode).[^1]
[^1]: https://xkcd.lapin.org/index.php?number=859#strips ) ;-)
Cela peut provoquer des problèmes d’affichage, nuit à l’accessibilité, et complique la conversion des documents dans d’autres formats.
Historiquement, les dépêches sur LinuxFr.org étaient écrites et stockées directement en HTML, aujourd’hui, c’est le format Markdown qui est utilisé, avec une conversion en HTML pour l’affichage sur le site.
# C’est plus compliqué que prévu
Faisons simple. On commence par les dépêches, en se limitant à la première et la seconde partie (on a déjà [vérifié les liens](https://linuxfr.org/news/evolution-des-hyperliens-sur-linuxfr-org) précédemment, et dans l’immédiat on fera l’hypothèse qu’il n’y a pas de souci sur le titre, les étiquettes, les infos sur les auteur(s)/contributeur(s)/modérateur(s), les dates, etc.), et on ne va pas regarder les commentaires. On extrait brutalement la concaténation du HTML stocké pour les deux parties d’une dépêche, on ajoute des début/fin de document HTML qui vont bien, et on utilise [_tidy_](http://www.html-tidy.org/) pour vérifier si on a obtenu une page valide, pour chaque dépêche. Le HTML des deux parties est produit à partir de Markdown pour les dépêches créées depuis la [migration RoR](https://linuxfr.org/news/nouvelle-version-de-linuxfrorg--2) en février 2011, et directement pour les dépêches créées avant et les milliers de [dépêches anciennes réinjectées](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000) en 2012.
# Les dépêches
## L’état initial
Voyons déjà comment a évolué la validité des dépêches (par série 4xxx, on entend ici les dépêches existantes numérotées de 4000 à 4999, par valide un code de retour de tidy de 0 et par invalide un code de retour de 1).
(analyse faite le 6 octobre 2018 et portant sur les dépêches publiées aux numéros allant de 1 à 38818, pour un total de 25249 dépêches)
série | HTML valide | HTML invalide | total | source HTML | source Markdown | commentaire
------|--------|----------|-------|------|----------|-----------------
0xxx | 593 (97 %)| 13 (3 %)| 606 | 606 (100 %) ||
1xxx | 576 (96 %)| 21 (4 %)| 597 | 597 (100 %) ||
2xxx | 585 (96 %)| 24 (4 %)| 609 | 609 (100 %) ||
3xxx | 579 (96 %)| 23 (4 %)| 602 | 609 (100 %) ||
4xxx | 531 (96 %)| 18 (4 %)| 549 | 609 (100 %) ||
5xxx | 491 (97 %)| 13 (3 %)| 504 | 503 (99 %) | 1|
6xxx | 540 (96 %)| 18 (4 %)| 558 | 558 (100 %) ||
7xxx | 492 (95 %)| 23 (5 %)| 515 | 514 (99 %) | 1|
8xxx | 565 (94 %)| 31 (6 %)| 595 | 595 (100 %) ||
9xxx | 582 (96 %)| 23 (4 %)| 605 | 605 (100 %) ||
10xxx | 625 (98 %)| 11 (2 %)| 636 | 635 (99 %) | 1|
11xxx | 559 (98 %)| 10 (2 %)| 569 | 569 (100 %) ||
12xxx | 484 (97 %)| 14 (3 %)| 498 | 498 (100 %) ||
13xxx | 419 (96 %)| 17 (4 %)| 436 | 436 (100 %) ||
14xxx | 503 (98 %)| 10 (2 %)| 513 | 513 (100 %) ||
15xxx | 408 (96 %)| 12 (4 %)| 420 | 419 (99 %) | 1|
16xxx | 406 (96 %)| 16 (4 %)| 422 | 422 (100 %) ||
17xxx | 409 (95 %)| 20 (5 %)| 429 | 429 (100 %) ||
18xxx | 463 (98 %)| 9 (2 %)| 472 | 472 (100 %) ||
19xxx | 440 (93 %)| 28 (7 %)| 468 | 468 (100 %) ||
20xxx | 484 (94 %)| 26 (6 %)| 510 | 510 (100 %) ||
21xxx | 567 (94 %)| 36 (6 %)| 603 | 603 (100 %) ||
22xxx | 479 (91 %)| 43 (9 %)| 522 | 522 (100 %) ||
23xxx | 585 (90 %)| 60 (10 %)| 645 | 644 (99 %) |1|
24xxx | 663 (88 %)| 85 (12 %)| 748 | 748 (100 %) ||
25xxx | 612 (83 %)| 117 (17 %)| 729 | 727 (99 %) |2|
26xxx | 610 (82 %)| 127 (18 %)| 737 | 736 (99 %) |1|
27xxx | 583 (76 %)| 183 (24 %)| 766 | 678 (88 %) |88 (12 %)| [migration technique RoR et début du Markdown](https://linuxfr.org/news/nouvelle-version-de-linuxfrorg--2)
28xxx | 680 (83 %)| 136 (17 %)| 816 || 816 (100 %)|
29xxx | 881 (92 %)| 68 (8 %)| 949 | 525 (55 %) | 424 (45 %) | [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000)
30xxx | 991 (100 %)| 0 (0 %)| 991 | 991 (100 %) || [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000)
31xxx | 998 (99 %)| 2 (1 %)| 1000 | 999 (99 %) |1| [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000)
32xxx | 965 (98 %)| 10 (2 %)| 975 | 903 (92 %) |72 (8 %)| [réinjection d’anciennes dépêches](https://linuxfr.org/news/remise-en-ligne-d-anciennes-depeches-de-1999-et-2000) et aussi un code de retour 2
33xxx | 762 (89 %)| 90 (11 %)| 852 ||852 (100 %)
34xxx | 810 (95 %)| 35 (5 %)| 845 |1 (1 %)|844 (99 %)
35xxx | 830 (99 %)| 2 (1 %)| 832 || 832 (100 %)
36xxx | 805 (99 %)| 3 (1 %)| 808 || 808 (100 %)
37xxx | 714 (98 %)| 13 (2 %)| 727 || 727 (100 %)
38xxx | 577 (97 %)| 14 (3 %)| 591 || 591 (100 %)
Commençons déjà par nettoyer ce vilain code de retour 2 sur une dépêche réinjectée, pour cause de balise `
Colonne 1 | Colonne 2 |
---|