diff --git a/base/opquast.php b/base/opquast.php index 8317ed5..c77421e 100644 --- a/base/opquast.php +++ b/base/opquast.php @@ -16,12 +16,16 @@ if (!defined('_ECRIRE_INC_VERSION')) { * Déclarations d'interface pour le compilateur **/ function opquast_declarer_tables_interfaces($interfaces) { - $interfaces['table_des_tables']['opquast_criteres'] = 'opquast_criteres'; + $interfaces['table_des_tables']['opquast_criteres'] = 'opquast_criteres'; $interfaces['table_des_tables']['opquast_criteres_liens'] = 'opquast_criteres_liens'; - $interfaces['table_des_tables']['opquast_tags'] = 'opquast_tags'; + $interfaces['table_des_tables']['opquast_tags'] = 'opquast_tags'; + $interfaces['table_des_tables']['opquast_themes'] = 'opquast_themes'; + $interfaces['table_des_tables']['opquast_etapes'] = 'opquast_etapes'; $interfaces['tables_jointures']['spip_opquast_criteres'][] = 'opquast_criteres_liens'; - $interfaces['tables_jointures']['spip_opquast_tags'][] = 'opquast_criteres_liens'; + $interfaces['tables_jointures']['spip_opquast_tags'][] = 'opquast_criteres_liens'; + $interfaces['tables_jointures']['spip_opquast_themes'][] = 'opquast_criteres_liens'; + $interfaces['tables_jointures']['spip_opquast_etapes'][] = 'opquast_criteres_liens'; return $interfaces; } @@ -45,6 +49,8 @@ function opquast_declarer_tables_objets_sql($tables) { 'table_objet_surnoms' => array('opquast_critere'), 'field' => array( 'id_opquast_critere' => 'BIGINT(21) NOT NULL', + 'numero' => 'BIGINT(21) NOT NULL', + 'version' => 'VARCHAR(5) NOT NULL DEFAULT ""', 'titre' => "TEXT NOT NULL DEFAULT ''", 'lien' => "TEXT NOT NULL DEFAULT ''", 'texte' => "TEXT NOT NULL DEFAULT ''", @@ -56,7 +62,12 @@ function opquast_declarer_tables_objets_sql($tables) { 'KEY statut' => 'statut', ), 'titre' => 'titre AS titre, "" AS lang', - 'champs_editables' => array(), + 'champs_editables' => array( + 'titre', + 'texte', + 'numero', + 'version', + ), 'champs_versionnes' => array(), 'rechercher_champs' => array( 'titre' => 10, @@ -118,6 +129,28 @@ function opquast_declarer_tables_principales($tables) { ), ); + $tables['spip_opquast_themes'] = array( + 'field' => array( + 'id_opquast_theme' => 'BIGINT(21) NOT NULL', + 'titre' => "TEXT NOT NULL DEFAULT ''", + 'maj' => 'TIMESTAMP', + ), + 'key' => array( + 'PRIMARY KEY' => 'id_opquast_theme', + ), + ); + + $tables['spip_opquast_etapes'] = array( + 'field' => array( + 'id_opquast_etape' => 'BIGINT(21) NOT NULL', + 'titre' => "TEXT NOT NULL DEFAULT ''", + 'maj' => 'TIMESTAMP', + ), + 'key' => array( + 'PRIMARY KEY' => 'id_opquast_etape', + ), + ); + return $tables; } diff --git a/data/data-fr-v4.json b/data/data-fr-v4.json new file mode 100644 index 0000000..ec85016 --- /dev/null +++ b/data/data-fr-v4.json @@ -0,0 +1,2162 @@ +{ + "225": { + "objectif": "
Ce crit\u00e8re peut \u00eatre v\u00e9rifi\u00e9 par l\u2019examen du code source, \u00e0 l\u2019aide d'un outil de d\u00e9veloppement. Pour chaque page :<\/p>
L\u2019\u00e9l\u00e9ment meta est renseign\u00e9 en fonction de l\u2019encodage effectif du document et de son type MIME sous la forme :<\/p>
meta charset=\"utf-8\"<\/code> en HTML5 <\/li><\/ul>En savoir plus: meta<\/code> sur MDN<\/a><\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "SEO",
+ "theme": "Structure et code"
+ },
+ "180": {
+ "objectif": "- Faciliter l\u2019adaptation du rendu au media (mobile ou autre) ou aux besoins de l\u2019utilisateur (agrandissement de la taille des caract\u00e8res, modification des couleurs, de la police, de la graisse, de la justification, etc.). <\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es<\/li><\/ul>",
+ "titre": "Un contenu qui doit \u00eatre restitu\u00e9 dans un lecteur d'\u00e9cran ne lui est pas dissimul\u00e9.",
+ "controle": "
Dans le code g\u00e9n\u00e9r\u00e9 et dans les feuilles de styles CSS des pages examin\u00e9es :<\/p>
<\/p>
- D\u00e9tecter, \u00e0 l\u2019aide d\u2019un inspecteur de code, des contenus qui seraient masqu\u00e9s \u00e0 l\u2019affichage (en dehors de ceux destin\u00e9s \u00e0 \u00eatre rendus visibles sur action de l\u2019utilisateur).<\/li>
- V\u00e9rifier qu\u2019aucun de ces contenus n\u2019utilise les techniques indiqu\u00e9es dans la mise en \u0153uvre s\u2019ils sont destin\u00e9s \u00e0 \u00eatre restitu\u00e9s dans un lecteur d\u2019\u00e9cran.<\/li><\/ul>
<\/p>
<\/ul>",
+ "solution": "Sauf si le contenu concern\u00e9 est destin\u00e9 \u00e0 \u00eatre rendu visible et perceptible sur action de l\u2019utilisateur (onglets, menus d\u00e9roulants, etc.) :<\/p>
- Ne pas utiliser les propri\u00e9t\u00e9s display et visibility pour masquer le contenu.<\/li>
- Ne pas utiliser l\u2019attribut HTML hidden pour masquer le contenu.<\/li>
- Ne pas donner au contenu un attribut ARIA aria-hidden=\"true\".<\/li>
- Ne pas utiliser le param\u00e8tre wmode d\u2019un objet Flash avec les valeurs transparent ou opaque.<\/li><\/ul>
<\/p>
Utiliser :<\/div>- les propri\u00e9t\u00e9s CSS permettant de positionner le contenu en dehors de la zone d\u2019affichage du navigateur (position, text- indent) ou de le rogner (clip) ;<\/li>
- les propri\u00e9t\u00e9s ARIA permettant d\u2019associer un libell\u00e9 \u00e0 un contenu (aria-label, aria-labelledby, aria-describedby) ;<\/li>
- ou, dans le cas d\u2019une \u00e9tiquette de champ de formulaire, l\u2019attribut title de celui-ci.<\/li><\/ul>
En savoir plus: display<\/code> sur MDN<\/a> - visibility<\/code> sur MDN<\/a><\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "Accessibility",
+ "theme": "Pr\u00e9sentation"
+ },
+ "182": {
+ "objectif": "- Faciliter l\u2019adaptation du rendu au media (mobile ou autre) ou aux besoins de l\u2019utilisateur (agrandissement de la taille des caract\u00e8res, modification des couleurs, de la police, de la graisse, de la justification, etc.).<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es. <\/li>
- Am\u00e9liorer la prise en compte des contenus par les moteurs de recherche et outils d\u2019indexation.<\/li><\/ul>",
+ "titre": "Les textes pouvant \u00eatre mis en forme via des styles ne sont pas remplac\u00e9s par des images.",
+ "controle": "
Cette v\u00e9rification n\u00e9cessite l\u2019examen visuel des pages pour identifier les images ne contenant que du texte et \u00e9valuer si une mise en forme via CSS aurait permis d\u2019obtenir un rendu \u00e9quivalent. Pour chaque page contenant des textes mis en images :<\/p>
<\/p>
- Passer en revue les images (images HTML et \u00e9ventuelles images d\u2019arri\u00e8re-plan CSS utilis\u00e9es pour simuler un contenu \u00e9ditorial dans un \u00e9l\u00e9ment vide).<\/li>
- V\u00e9rifier que les textes mis en image correspondent uniquement \u00e0 des mises en forme ne pouvant \u00eatre obtenues via les styles CSS.<\/li><\/ul>
<\/p>
Sont exclus de cette exigence : les logos, les banni\u00e8res publicitaires et les \u00e9l\u00e9ments graphiques de promotion. <\/p>",
+ "solution": "
Utiliser des textes HTML mis en forme \u00e0 l\u2019aide des styles CSS (et en particulier les polices de caract\u00e8res t\u00e9l\u00e9chargeables, ou Web fonts).<\/p>",
+ "etape": "Editorial",
+ "tag": "SEO",
+ "theme": "Pr\u00e9sentation"
+ },
+ "105": {
+ "objectif": "
- Informer les utilisateurs de la prise en compte de leur demande. <\/li>
- Permettre aux utilisateurs d\u2019obtenir une confirmation archivable de la bonne r\u00e9ception de leur demande d\u2019information.<\/li><\/ul>",
+ "titre": "Chaque demande d'information fait l'objet d'un accus\u00e9 de r\u00e9ception.",
+ "controle": "Via un formulaire de contact ou via le canal de contact mail indiqu\u00e9 :<\/div>
- Adresser une demande d\u2019information fictive en utilisant une adresse e-mail r\u00e9elle.<\/li>
- Contr\u00f4ler qu\u2019un accus\u00e9 de r\u00e9ception est bien re\u00e7u \u00e0 cette adresse.<\/li><\/ul><\/div>",
+ "solution": "Faire en sorte que la validation de chaque formulaire de contact ou de demande d\u2019information d\u00e9clenche l\u2019envoi d\u2019un accus\u00e9 de r\u00e9ception \u00e0 l\u2019attention de l\u2019envoyeur. Cela suppose bien entendu de rendre obligatoire le champ de saisie de l\u2019adresse e-mail dans chaque formulaire.<\/div>",
+ "etape": "Editorial",
+ "tag": "",
+ "theme": "Identification et contact"
+ },
+ "98": {
+ "objectif": "
- Permettre aux utilisateurs d'identifier imm\u00e9diatement la nature des contenus de chaque page dans les onglets, les favoris, dans la fen\u00eatre du navigateur ou encore dans les lecteurs d'\u00e9cran.<\/li>
- Am\u00e9liorer le r\u00e9f\u00e9rencement des pages et leur pr\u00e9sentation dans les moteurs de recherche.<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es. <\/li>
- Am\u00e9liorer la prise en compte des contenus par les moteurs de recherche et outils d\u2019indexation<\/li><\/ul>",
+ "titre": "Le titre de chaque page permet d'identifier son contenu.",
+ "controle": "
Dans toutes les pages du site, y compris dans les pages d'un processus ou d'une s\u00e9rie de r\u00e9sultats de recherche, ou encore dans les pages dont le contenu peut \u00eatre modifi\u00e9 de mani\u00e8re majeure via Ajax :<\/p>
- V\u00e9rifier que chaque titre de page (\u00e9l\u00e9ment
title<\/code>) permet d'identifier le contenu ou la fonction de la page.<\/li><\/ul>",
+ "solution": "R\u00e9diger le contenu de l'\u00e9l\u00e9ment title<\/code> de chaque page de mani\u00e8re \u00e0 ce qu'il d\u00e9crive, de la fa\u00e7on la plus concise possible, le contenu ou la fonction de la page , y compris \u00e0 la suite d'une requ\u00eate Ajax modifiant de mani\u00e8re essentielle le contenu de la page.<\/p>Pr\u00e9ciser quelle est l'\u00e9tape en cours d'un processus dans l'\u00e9l\u00e9ment title des pages. Par exemple, inscrire \u00ab \u00c9tape 3 de votre inscription \u00bb dans l'\u00e9l\u00e9ment title<\/code> de la page correspondant \u00e0 la troisi\u00e8me \u00e9tape d'un formulaire d'inscription. <\/p>Pr\u00e9ciser, dans le cas de l'affichage d'une s\u00e9rie de r\u00e9sultats de recherche, quel est l'intervalle de r\u00e9sultats affich\u00e9 dans la page courante. Par exemple, \u00ab R\u00e9sultats 10 \u00e0 19 de la recherche sur \u201cFoo\u201d \u00bb.<\/p>
Pr\u00e9ciser l'\u00e9tat dans le titre d'une page de demande de confirmation ou d'annulation lors de la soumission d'un formulaire (exemple : \u00ab Demande de confirmation de suppression - Mes documents \u00bb).<\/p>",
+ "etape": "Editorial",
+ "tag": "SEO",
+ "theme": "Identification et contact"
+ },
+ "8": {
+ "objectif": "
- Permettre une identification imm\u00e9diate des contenus publicitaires ou sponsoris\u00e9s.<\/li>
- \u00c9viter les confusions entre contenus r\u00e9dactionnels et publicitaires. <\/li>
- Pr\u00e9venir les risques associ\u00e9s aux conflits d'int\u00e9r\u00eat.<\/li><\/ul>",
+ "titre": "Les contenus publicitaires ou sponsoris\u00e9s sont identifi\u00e9s comme tels.",
+ "controle": "
Au sein du site examin\u00e9 :<\/p>
- Identifier les contenus publicitaires. <\/li>
- V\u00e9rifier que tous les espaces d\u00e9di\u00e9s \u00e0 la publicit\u00e9 se diff\u00e9rencient du reste du contenu et comportent une mention permettant de les identifier sans ambigu\u00eft\u00e9 : typiquement, la mention \u00ab publicit\u00e9 \u00bb affich\u00e9e au dessus ou en dessous du contenu concern\u00e9.<\/li><\/ul>",
+ "solution": "
- Signaler les publicit\u00e9s par une mention permettant de les identifier (publicit\u00e9, pub, partenariats\u2026).<\/li>
- Et, dans la mesure du possible, s\u00e9parer graphiquement la publicit\u00e9 du reste du contenu.<\/li><\/ul>",
+ "etape": "Editorial",
+ "tag": "",
+ "theme": "Contenus"
+ },
+ "7": {
+ "objectif": "
- Permettre aux utilisateurs de comprendre les contenus sectoriels ou \u00e0 caract\u00e8re technique. <\/li>
- Faciliter l'utilisation d'un service. <\/li>
- Am\u00e9liorer le r\u00e9f\u00e9rencement sur des mots-cl\u00e9s ou expressions techniques.<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es. <\/li>
- Am\u00e9liorer la prise en compte des contenus par les moteurs de recherche et outils d\u2019indexation<\/li><\/ul>",
+ "titre": "Un lexique ou un glossaire adapt\u00e9 au public vis\u00e9 explique le vocabulaire sectoriel ou technique.",
+ "controle": "
Pour chaque page contenant du vocabulaire sp\u00e9cifique, contr\u00f4ler qu'il est possible d'acc\u00e9der : <\/p>
- \u00c0 une section jouant le r\u00f4le de glossaire dans chaque page concern\u00e9e.<\/li>
- \u00c0 une page ou une s\u00e9rie de pages de glossaire disponible via les menus de navigation.<\/li>
- Ou directement \u00e0 la d\u00e9finition des termes depuis au moins leur premi\u00e8re occurrence dans chaque page du site via un lien ou un tooltip.<\/li><\/ul>",
+ "solution": "
Pour mettre en \u0153uvre cette bonne pratique, il s'agira de fournir :<\/p>
- Une section, une page ou une s\u00e9rie de pages de glossaire explicitant le vocabulaire technique ou sectoriel utilis\u00e9 dans le contenu du site. Ce glossaire devra \u00eatre disponible directement depuis chaque page du site.<\/li>
- Ou bien un m\u00e9canisme permettant \u00e0 l'utilisateur d'acc\u00e9der \u00e0 la d\u00e9finition des termes du vocabulaire technique ou sectoriel, depuis au moins leur premi\u00e8re occurrence dans chaque page du site.<\/li><\/ul>",
+ "etape": "Editorial",
+ "tag": "SEO",
+ "theme": "Contenus"
+ },
+ "142": {
+ "objectif": "
- Permettre aux utilisateurs de savoir en temps utile si leurs outils les autorisent \u00e0 consulter les fichiers propos\u00e9s en t\u00e9l\u00e9chargement. <\/li>
- R\u00e9duire la charge serveur en \u00e9vitant les t\u00e9l\u00e9chargements inutiles.<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es<\/li><\/ul>",
+ "titre": "Le format des fichiers propos\u00e9s en t\u00e9l\u00e9chargement est indiqu\u00e9.",
+ "controle": "
Pour chaque lien de t\u00e9l\u00e9chargement, v\u00e9rifier qu'il est possible d'en conna\u00eetre le format via : <\/p>
- Une information g\u00e9n\u00e9rique donn\u00e9e dans une page d'aide ;<\/li>
- Une information donn\u00e9e dans le contexte du lien : paragraphe ou \u00e9l\u00e9ment de liste
li<\/code> o\u00f9 il est inclus, titre de section qui le pr\u00e9c\u00e8de, cellule d'en-t\u00eate de tableau associ\u00e9e \u00e0 celle o\u00f9 il est pr\u00e9sent ;<\/li>- L'attribut
title<\/code> du lien reprenant et compl\u00e9tant le libell\u00e9 de celui-ci ;<\/li>- Une information donn\u00e9e dans le libell\u00e9 du lien ;<\/li>
- Une ic\u00f4ne dot\u00e9e d'un texte alternatif indiquant le format du fichier.<\/li><\/ul>",
+ "solution": "
Au minimum, pr\u00e9voir une page d'aide indiquant le format des fichiers propos\u00e9s s'il est unique.<\/p>
Au mieux, indiquer le format pour chaque lien permettant de t\u00e9l\u00e9charger un fichier. <\/p>
En savoir plus: \u00e9l\u00e9ment a<\/code> sur MDN<\/a><\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "Accessibility",
+ "theme": "Liens"
+ },
+ "42": {
+ "objectif": "- Permettre aux utilisateurs de conna\u00eetre les conditions d'assistance en cas de difficult\u00e9.<\/li><\/ul>",
+ "titre": "Les conditions de fonctionnement du service apr\u00e8s-vente sont indiqu\u00e9es.",
+ "controle": "
Dans la page d'accueil, la page des mentions l\u00e9gales, la page d'aide ou encore dans les pages consacr\u00e9es aux conditions g\u00e9n\u00e9rales d'utilisation ou de vente :<\/p>
- V\u00e9rifier la pr\u00e9sence des informations relatives aux conditions de fonctionnement du service apr\u00e8s-vente.<\/li><\/ul>",
+ "solution": "
Indiquer, dans les conditions g\u00e9n\u00e9rales, les informations relatives aux conditions de fonctionnement du service apr\u00e8s-vente.<\/p>",
+ "etape": "Editorial",
+ "tag": "",
+ "theme": "E-Commerce"
+ },
+ "52": {
+ "objectif": "
- Permettre aux utilisateurs de comprendre ou d'anticiper d'\u00e9ventuelles difficult\u00e9s sur le site ou lors de la transaction.<\/li><\/ul>",
+ "titre": "Le mode de d\u00e9p\u00f4t et la proc\u00e9dure de traitement des r\u00e9clamations sont indiqu\u00e9s.",
+ "controle": "
Dans au moins une des pages suivantes : les pages consacr\u00e9es aux conditions g\u00e9n\u00e9rales d'utilisation ou de vente, la page d'accueil, la page des mentions l\u00e9gales, la page d'\u00e0 propos, la page produit ou encore la page d'aide : <\/p>
- V\u00e9rifier la pr\u00e9sence des informations relatives \u00e0 la proc\u00e9dure de d\u00e9p\u00f4t et de traitement des r\u00e9clamations.<\/li><\/ul>
La nature de la proc\u00e9dure en question n'est pas \u00e9valu\u00e9e ici : seule sa pr\u00e9sence est contr\u00f4l\u00e9e.<\/p>",
+ "solution": "
Indiquer, dans les conditions g\u00e9n\u00e9rales de vente, par exemple, la proc\u00e9dure de d\u00e9p\u00f4t et de traitement des r\u00e9clamations.<\/p>",
+ "etape": "Editorial",
+ "tag": "",
+ "theme": "E-Commerce"
+ },
+ "60": {
+ "objectif": "
- Permettre aux utilisateurs d\u2019afficher et \u00e9ventuellement d\u2019imprimer une trace de leur commande. <\/li>
- Fournir aux utilisateurs une preuve \u00e9crite de l\u2019op\u00e9ration effectu\u00e9e. <\/li>
- Renforcer la tra\u00e7abilit\u00e9 de la transaction.<\/li><\/ul>",
+ "titre": "La r\u00e9f\u00e9rence de la transaction est affich\u00e9e au client apr\u00e8s la validation de sa commande.",
+ "controle": "
Dans un site de e-commerce :<\/p>
- Mener \u00e0 terme une proc\u00e9dure de commande ;<\/li>
- V\u00e9rifier que la r\u00e9f\u00e9rence de la transaction est bien indiqu\u00e9e sur la page de confirmation de commande affich\u00e9e apr\u00e8s validation d'un achat en ligne. <\/li><\/ul>",
+ "solution": "
Indiquer la r\u00e9f\u00e9rence de la transaction sur la page de confirmation apr\u00e8s validation d'un achat en ligne.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "E-Commerce"
+ },
+ "65": {
+ "objectif": "
- Donner \u00e0 l'utilisateur une confirmation des informations relatives \u00e0 la commande. <\/li>
- Permettre \u00e0 l'utilisateur de conserver un historique de la transaction ailleurs que dans le site.<\/li><\/ul>",
+ "titre": "Un mail indiquant la r\u00e9f\u00e9rence de la transaction et les donn\u00e9es de la commande est envoy\u00e9 suite \u00e0 la validation.",
+ "controle": "
Dans un site de e-commerce :<\/p>
- Mener \u00e0 terme une proc\u00e9dure de commande ;<\/li>
- V\u00e9rifier, \u00e0 l'issue de cette derni\u00e8re, que le mail contenant la r\u00e9f\u00e9rence de la transaction et les donn\u00e9es de la commande parvient effectivement au destinataire.<\/li><\/ul>",
+ "solution": "
Utiliser ou d\u00e9velopper des outils de gestion du caddie qui envoient automatiquement une confirmation contenant le r\u00e9capitulatif des donn\u00e9es de la commande.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "E-Commerce"
+ },
+ "67": {
+ "objectif": "
- Faciliter la compr\u00e9hension des donn\u00e9es attendues dans les formulaires. <\/li>
- Permettre aux aides techniques d'accessibilit\u00e9 de restituer les champs de formulaires en les associant syst\u00e9matiquement \u00e0 une \u00e9tiquette indiquant leur r\u00f4le et la nature de la saisie attendue.<\/li>
- Faciliter la saisie en permettant de s\u00e9lectionner le champ via un clic sur son \u00e9tiquette aussi bien que sur le champ lui-m\u00eame (particuli\u00e8rement en cas de case \u00e0 cocher ou de case radio).<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es<\/li><\/ul>",
+ "titre": "Chaque champ de formulaire est associ\u00e9 dans le code source \u00e0 une \u00e9tiquette qui lui est propre.",
+ "controle": "
Pour chaque champ de formulaire : <\/p>
- V\u00e9rifier, en regardant le code source ou \u00e0 l'aide de Firebug, que l'attribut
for<\/code>, propre \u00e0 l'\u00e9l\u00e9ment label<\/code>, ainsi que l'attribut id<\/code> du champ ont exactement le m\u00eame contenu. Si les valeurs de ces deux attributs sont effectivement identiques, l'\u00e9tiquette (label<\/code>) est bien associ\u00e9e au champ (input<\/code>). <\/li>- Dans le cas o\u00f9 aucune \u00e9tiquette n'est visible dans le site (placeholder), v\u00e9rifier que chaque champ de formulaire est dot\u00e9 d'un attribut
aria-label<\/code> ou aria-labelledby<\/code>.<\/li><\/ul>Dans les deux cas, v\u00e9rifier enfin que l'\u00e9tiquette d\u00e9crit effectivement le r\u00f4le du champ ou la nature de l'information qui doit y \u00eatre saisie. Cette bonne pratique ne peut donc \u00eatre automatis\u00e9e mais n\u00e9cessite un examen manuel de chaque formulaire<\/p>",
+ "solution": "
Donner \u00e0 chaque champ de formulaire une \u00e9tiquette qui lui soit explicitement associ\u00e9e :<\/p>
- si l'\u00e9tiquette est visible, sous la forme d'un \u00e9l\u00e9ment
label<\/code> dot\u00e9 d'un attribut for<\/code> reprenant la valeur de l'attribut id<\/code> affect\u00e9 au champ, par exemple :<\/li><\/ul><label for=\"nom1\">Nom de famille :<\/label><\/p>
<input id=\"nom1\" type=\"text\" name=\"nom\"><\/p>
- si l'affichage de l'\u00e9tiquette n'est pas souhait\u00e9e (placeholder), sous la forme d'un attribut
aria-label<\/code> ou aria-labelledby<\/code>.<\/li><\/ul>Le recours \u00e0 une \u00e9tiquette <label for=\"\u2026\"> masqu\u00e9e via les styles CSS est d\u00e9conseill\u00e9 au profit de l'attribut aria-label<\/code> ou aria-labelledby<\/code>.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "Accessibility",
+ "theme": "Formulaires"
+ },
+ "75": {
+ "objectif": "- Permettre aux utilisateurs d'identifier sans ambigu\u00eft\u00e9 les champs de formulaire et la nature des informations \u00e0 saisir. <\/li>
- Pr\u00e9venir les erreurs de saisie. <\/li>
- Faciliter et acc\u00e9l\u00e9rer l'usage du formulaire. <\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es<\/li><\/ul>",
+ "titre": "Chaque \u00e9tiquette de formulaire est visuellement rattach\u00e9e au champ qu'elle d\u00e9crit.",
+ "controle": "
Pour chaque formulaire<\/p>
- S'assurer que chaque \u00e9tiquette de formulaire est affich\u00e9e \u00e0 proximit\u00e9 imm\u00e9diate du champ concern\u00e9 sur toutes les tailles d'\u00e9cran (attention au mobile);<\/li>
- V\u00e9rifier que l'\u00e9tiquette occupe une position pr\u00e9visible : au-dessus ou \u00e0 gauche d'un champ sauf pour les champs
input type radio<\/code> et checkbox<\/code> o\u00f9 elle peut se trouver \u00e0 droite ou \u00e0 gauche du champ. <\/li><\/ul>La proximit\u00e9 imm\u00e9diate est une mesure \u00e0 pr\u00e9ciser selon le contexte mais elle est de l'ordre d'une trentaine de pixels maximum pour une \u00e9tiquette plac\u00e9e \u00e0 gauche du champ, d'un interligne pour une \u00e9tiquette plac\u00e9e au-dessus du champ et de quelques pixels pour l'\u00e9tiquette d'une case radio ou \u00e0 cocher.<\/p>",
+ "solution": "
Veiller \u00e0 ce que l'\u00e9tiquette visible de chaque champ de formulaire soit affich\u00e9e \u00e0 proximit\u00e9 imm\u00e9diate du champ concern\u00e9, afin que le rapport entre ceux-ci puisse \u00eatre per\u00e7u sans ambigu\u00eft\u00e9.<\/p>
\u00c9viter les mises en forme de formulaire entra\u00eenant la pr\u00e9sence d'un espace vide important entre un champ et son \u00e9tiquette, ou un positionnement inhabituel de l'\u00e9tiquette telle qu'une \u00e9tiquette plac\u00e9e en-dessous du champ, ou une \u00e9tiquette de case \u00e0 cocher plac\u00e9e au dessus de celle-ci.<\/p>",
+ "etape": "Conception",
+ "tag": "Accessibility",
+ "theme": "Formulaires"
+ },
+ "73": {
+ "objectif": "
- \u00c9viter \u00e0 l'utilisateur de saisir un mot de passe qui ne correspond finalement pas \u00e0 celui qu'il a souhait\u00e9 ou m\u00e9moris\u00e9.<\/li><\/ul>",
+ "titre": "La cr\u00e9ation d'un mot de passe par l'utilisateur fait l'objet d'un m\u00e9canisme de pr\u00e9vention des erreurs de saisie.",
+ "controle": "
Dans le cas d'une cr\u00e9ation de mot de passe :<\/p>
- V\u00e9rifier qu'un m\u00e9canisme de double saisie des mots de passe, g\u00e9n\u00e9ralement pr\u00e9sent sous la forme de deux champs successifs, est syst\u00e9matiquement pr\u00e9sent.<\/li><\/ul>",
+ "solution": "
Proposer, apr\u00e8s le champ de saisie du mot de passe, un champ de confirmation o\u00f9 le mot de passe doit \u00eatre saisi \u00e0 nouveau et v\u00e9rifier que les deux saisies sont effectivement identiques lors de la soumission.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "Formulaires"
+ },
+ "137": {
+ "objectif": "
- Avertir clairement l\u2019internaute du fait qu\u2019il va quitter le service en ligne qu\u2019il est en train de visiter. <\/li>
- Faciliter le rep\u00e9rage des liens externes.<\/li><\/ul>",
+ "titre": "Les liens internes et externes sont diff\u00e9renci\u00e9s.",
+ "controle": "
Pour chaque page contenant des liens :<\/p>
- V\u00e9rifier que les liens internes et externes sont diff\u00e9renci\u00e9s par le moyen d'une mention textuelle, d'une ic\u00f4ne ou d'un comportement qui leur est propre. La v\u00e9rification s'effectue manuellement en contr\u00f4lant visuellement les liens. <\/li><\/ul>",
+ "solution": "
Il est possible d'ajouter l'information \u00ab lien externe \u00bb dans le libell\u00e9 du lien (mention textuelle, ic\u00f4ne HTML sp\u00e9cifique), dans l'attribut title<\/code> du lien en y reprenant et en y compl\u00e9tant le libell\u00e9, via la mise en forme du lien (ic\u00f4ne CSS) ou encore via le comportement du lien (ouverture dans une nouvelle fen\u00eatre r\u00e9serv\u00e9e aux liens externes, avec avertissement pr\u00e9alable).<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "Liens"
+ },
+ "212": {
+ "objectif": "- Permettre un r\u00e9f\u00e9rencement cibl\u00e9. <\/li>
- Am\u00e9liorer le guidage des outils de recherche. <\/li>
- Diminuer l'impact \u00e9nerg\u00e9tique li\u00e9 \u00e0 la consultation du site. <\/li>
- Am\u00e9liorer la prise en compte des contenus par les moteurs de recherche et outils d\u2019indexation<\/li><\/ul>",
+ "titre": "La racine du site contient des instructions pour les robots d'indexation.",
+ "controle": "
\u00c0 partir de l'adresse URL de votre site : <\/p>
- Acc\u00e9der tout d'abord \u00e0 l'adresse du fichier robots.txt, \u00e0 la racine du site, en tapant par exemple http:\/\/example.com\/robots.txt dans la barre d'adresse du navigateur ; <\/li>
- V\u00e9rifier la pr\u00e9sence du fichier
robots.txt<\/code> plac\u00e9 dans le r\u00e9pertoire racine du site ; <\/li>- V\u00e9rifier la validit\u00e9 de la syntaxe du fichier
robots.txt<\/code> \u00e0 l'aide des indications donn\u00e9es par les moteurs de recherche <\/li><\/ul>En l'absence de fichier robots.txt<\/code> v\u00e9rifier la pr\u00e9sence et la validit\u00e9 de la balise meta name=\"robots\" content=\"attribut1, attribut2\"<\/code> dans chaque page.<\/p>",
+ "solution": "Pour d\u00e9finir les r\u00e9pertoires, fichiers ou types de fichiers non indexables, utiliser les instructions user-agent<\/code> et disallow<\/code> dans un fichier texte unique appel\u00e9 robots.txt<\/code>, plac\u00e9 dans le r\u00e9pertoire racine du site.<\/p>Alternativement, pour agir au niveau d'une page sp\u00e9cifique, utiliser dans celle-ci la balise meta name=\"robots\" content=\"attribut1, attribut2\" <\/code> : <\/p>- attribut1 peut prendre les valeurs
index<\/code> (indexer cette page) ou noindex<\/code> (ne pas indexer cette page) ;<\/li>- attribut2 peut prendre les valeurs
follow<\/code> (suivre les liens contenus dans cette page) ou nofollow<\/code> (ne pas suivre les liens).<\/li><\/ul>En savoir plus: meta<\/code> sur MDN<\/a><\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "SEO",
+ "theme": "Serveur et performances"
+ },
+ "189": {
+ "objectif": "- Faciliter la consultation sur les terminaux mobiles. <\/li>
- Am\u00e9liorer le positionnement dans les outils d\u2019indexation qui prennent ce crit\u00e8re en compte.<\/li><\/ul>",
+ "titre": "Le site propose un ou plusieurs m\u00e9canismes d\u00e9di\u00e9s \u00e0 l'adaptation aux terminaux mobiles.",
+ "controle": "Comparer l\u2019affichage de la page sur diff\u00e9rentes tailles d\u2019\u00e9cran (desktop, tablettes, smartphone, etc.) et v\u00e9rifier que le rendu s\u2019adapte \u00e0 celles-ci.<\/div>",
+ "solution": "
Soit recourir aux media queries ou \u00e0 l\u2019adaptative design pour adresser au navigateur des r\u00e8gles de style adapt\u00e9es selon la taille de l\u2019\u00e9cran.<\/p>
Soit fournir une version mobile d\u00e9di\u00e9e. <\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "Mobile",
+ "theme": "Pr\u00e9sentation"
+ },
+ "162": {
+ "objectif": "
- Faciliter la navigation au clavier.<\/li>
- Permettre aux utilisateurs de clavier de se doter de rep\u00e8res de navigation.<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es<\/li><\/ul>",
+ "titre": "La navigation au clavier s'effectue dans un ordre pr\u00e9visible.",
+ "controle": "
Ce contr\u00f4le s'effectue sur l'ensemble des \u00e9l\u00e9ments interactifs, prioritairement \u00e0 l'aide de la touche tabulation et, dans l'interface de certains widgets, \u00e0 l'aide de touches de d\u00e9placement sp\u00e9cifiques (touches fl\u00e8ches) : <\/p>
- Naviguer au clavier puis v\u00e9rifier que l'ordre de passage d'un \u00e9l\u00e9ment \u00e0 un autre est identique entre les diff\u00e9rentes pages ; <\/li>
- V\u00e9rifier que l'ordre de passage est adapt\u00e9 au contenu concern\u00e9. Par exemple, la navigation clavier dans une pseudo-popup javascript commence par son bouton de fermeture<\/li>
- Contr\u00f4ler que l'ordre est pr\u00e9visible par l'utilisateur : sauf exceptions, cet ordre doit \u00eatre aussi proche que possible de l'ordre de lecture, par exemple haut-bas et gauche-droite pour les \u00e9critures lisibles de gauche \u00e0 droite.<\/li><\/ul>",
+ "solution": "
Organiser les contenus dans l'ordre lin\u00e9aire du code HTML de mani\u00e8re \u00e0 regrouper et ordonner logiquement les liens et les contr\u00f4les de formulaires qui apparaissent les uns \u00e0 la suite des autres \u00e0 l'affichage et ordonner logiquement les principaux blocs de navigation et de contenu composant la page.<\/p>
Le cas \u00e9ch\u00e9ant, et en dernier ressort, recourir \u00e0 l'attribut HTML tabindex<\/code> pour cr\u00e9er un ordre de navigation au clavier sp\u00e9cifique, diff\u00e9rent de l'ordre par d\u00e9faut issu de l'organisation des liens et des contr\u00f4les de formulaires dans le code.<\/p>G\u00e9rer sp\u00e9cifiquement l'ordre de navigation au clavier en cas de fen\u00eatre modale ou de widget.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "Accessibility",
+ "theme": "Navigation"
+ },
+ "163": {
+ "objectif": "
- Fournir aux utilisateurs une solution de navigation alternative et d'acc\u00e8s rapide aux contenus li\u00e9s \u00e0 des mots-cl\u00e9s retenus par ceux-ci.<\/li>
- Diminuer l'impact \u00e9nerg\u00e9tique li\u00e9 \u00e0 la consultation du site. <\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es.<\/li><\/ul>",
+ "titre": "Le site propose un moteur de recherche interne.",
+ "controle": "
Dans toutes les pages \u00e9valu\u00e9es ou bien en contr\u00f4lant les templates du site (sous r\u00e9serve de tenir compte de pages d\u00e9pendant de solutions tierces) : <\/p>
- V\u00e9rifier manuellement la pr\u00e9sence syst\u00e9matique d'un moteur de recherche.<\/li><\/ul>",
+ "solution": "
Proposer un formulaire et une fonctionnalit\u00e9 de recherche simple, qu'il s'agisse d'une solution interne ou de l'incorporation d'une solution externe.<\/p>",
+ "etape": "Conception",
+ "tag": "Ecodesign",
+ "theme": "Navigation"
+ },
+ "187": {
+ "objectif": "
- Permettre un copier-coller des contenus ind\u00e9pendamment de la mise en forme enti\u00e8rement en majuscules. <\/li>
- Faciliter l'adaptation de la mise en forme pour les utilisateurs ayant des difficult\u00e9s de lecture des textes enti\u00e8rement en majuscules.<\/li><\/ul>",
+ "titre": "Les mises en majuscules \u00e0 des fins d\u00e9coratives sont effectu\u00e9es \u00e0 l'aide des styles",
+ "controle": "
Pour tous les contenus mis enti\u00e8rement en majuscules : <\/p>
- D\u00e9sactiver le support des styles du site dans le navigateur ;<\/li>
- Identifier les textes qui apparaissent en majuscules lorsque les styles sont d\u00e9sactiv\u00e9s ;<\/li>
- V\u00e9rifier que l'usage des majuscules respecte le cadre des conventions typographiques de la langue utilis\u00e9e. Par exemple : les sigles ou noms d'auteurs dans une bibliographie peuvent \u00eatre en majuscules.<\/li><\/ul>",
+ "solution": "
Saisir les contenus HTML en respectant l'usage typographique pour les majuscules (d\u00e9but de phrase, noms propres, etc.).<\/p>
Utiliser la propri\u00e9t\u00e9 CSS text-transform<\/code> avec la valeur uppercase<\/code> pour g\u00e9rer les mises en majuscules d\u00e9coratives.<\/p>",
+ "etape": "Editorial",
+ "tag": "",
+ "theme": "Pr\u00e9sentation"
+ },
+ "179": {
+ "objectif": "- Permettre la compr\u00e9hension de l'information sans l'acc\u00e8s au support visuel ou lorsque le rendu de celui-ci est alt\u00e9r\u00e9.<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es<\/li><\/ul>",
+ "titre": "Un contenu n'est pas d\u00e9sign\u00e9 uniquement par sa forme ou par sa position \u00e0 l'\u00e9cran.",
+ "controle": "
Cette v\u00e9rification concerne une large vari\u00e9t\u00e9 de cas potentiels, par exemple dans une page d'aide o\u00f9 il est fait r\u00e9f\u00e9rence \u00e0 des captures d'\u00e9cran ou encore dans le fil d'un texte o\u00f9 il est fait r\u00e9f\u00e9rence \u00e0 une illustration ou \u00e0 un tableau. Pour chaque contenu o\u00f9 il est n\u00e9cessaire d'avoir acc\u00e8s \u00e0 l'affichage graphique de la page afin de retrouver le contenu ainsi d\u00e9sign\u00e9 : <\/p>
- S'assurer que les r\u00e9f\u00e9rences \u00e0 la forme ou \u00e0 la position \u00e0 l'\u00e9cran d'un contenu ne sont pas le seul moyen d'identifier celui-ci. <\/li><\/ul>
Les moyens compl\u00e9mentaires peuvent \u00eatre la r\u00e9f\u00e9rence explicite \u00e0 un identifiant (exemple \u00ab Voir la figure n\u00b01 \u00bb), un lien vers une ancre, etc.<\/p>",
+ "solution": "
Lorsqu'un contenu est d\u00e9sign\u00e9 par une r\u00e9f\u00e9rence \u00e0 sa forme ou \u00e0 sa position \u00e0 l'\u00e9cran, l'information doit \u00eatre \u00e9galement disponible par un autre moyen (balisage, mention textuelle, etc.).<\/p>",
+ "etape": "Editorial",
+ "tag": "Accessibility",
+ "theme": "Pr\u00e9sentation"
+ },
+ "206": {
+ "objectif": "
- R\u00e9duire les risques d\u2019utilisation trompeuse du contenu.<\/li><\/ul>",
+ "titre": "Le serveur envoie les informations indiquant les domaines autoris\u00e9s \u00e0 int\u00e9grer ses pages dans des cadres.",
+ "controle": "V\u00e9rifier \u00e0 l\u2019aide d\u2019un outil d\u2019inspection des en-t\u00eates HTTP la pr\u00e9sence de X-Frame-Options avec la valeur deny ou sameorigin.<\/div>",
+ "solution": "Configurer le serveur pour l\u2019envoi de l\u2019en-t\u00eate HTTP X-Frame-Options avec la valeur deny (pour interdire toute inclusion de la page dans un cadre, quel qu\u2019en soit le site) ou sameorigin (pour limiter les inclusions \u00e0 des cadres du m\u00eame nom de domaine que la page). La valeur allow-from (pour limiter les inclusions \u00e0 des URL sp\u00e9cifiques) ne b\u00e9n\u00e9ficie pas, en revanche, \u00e0 l\u2019heure o\u00f9 nous \u00e9crivons ces lignes, d\u2019un support suffisant.<\/div>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "S\u00e9curit\u00e9"
+ },
+ "103": {
+ "objectif": "
- Informer les utilisateurs sur les d\u00e9lais chiffr\u00e9s de r\u00e9ponse.<\/li>
- Limiter les risques de relance de la part des utilisateurs. <\/li>
- Rassurer sur la capacit\u00e9 \u00e0 prendre en compte les demandes.<\/li><\/ul>",
+ "titre": "Les d\u00e9lais de r\u00e9ponse aux demandes d'information sont indiqu\u00e9s.",
+ "controle": "
Dans toute page comportant un formulaire de contact, v\u00e9rifier qu'une indication chiffr\u00e9e de d\u00e9lai de r\u00e9ponse est pr\u00e9sente.<\/p>
Ni le d\u00e9lai en lui-m\u00eame ni son respect effectif ne font l'objet d'une validation : seule la pr\u00e9sence de sa mention est contr\u00f4l\u00e9e.<\/p>",
+ "solution": "
Indiquer le d\u00e9lai chiffr\u00e9 de r\u00e9ponse pr\u00e9vu pour chaque formulaire de demande d'information.<\/p>",
+ "etape": "Editorial",
+ "tag": "",
+ "theme": "Identification et contact"
+ },
+ "2": {
+ "objectif": "
- Informer les utilisateurs sur les conditions sous lesquelles sont publi\u00e9s les contenus. <\/li>
- Informer les utilisateurs sur les conditions de copie et de r\u00e9utilisation.<\/li><\/ul>",
+ "titre": "Les informations relatives aux droits de copie et de r\u00e9utilisation sont disponibles depuis toutes les pages.",
+ "controle": "
Dans chacune des pages \u00e9valu\u00e9es, v\u00e9rifier la pr\u00e9sence de la mention compl\u00e8te des droits de copie et de r\u00e9utilisation ou d'un lien donnant directement acc\u00e8s \u00e0 la mention des droits de copie et de r\u00e9utilisation.<\/p>",
+ "solution": "
Indiquer les droits de copie et de r\u00e9utilisation des divers \u00e9l\u00e9ments du site sur chaque page ou via un hyperlien pointant vers une page sp\u00e9cifique.<\/p>",
+ "etape": "Editorial",
+ "tag": "",
+ "theme": "Contenus"
+ },
+ "133": {
+ "objectif": "
- Acc\u00e9l\u00e9rer l'apprentissage du fonctionnement de l'interface. <\/li>
- Am\u00e9liorer l'identification des liens et de leurs fonctions respectives.<\/li><\/ul>",
+ "titre": "Les liens de m\u00eame nature ont des couleurs, des formes et des comportements identiques sur toutes les pages.",
+ "controle": "
Dans l'ensemble du site :<\/p>
- V\u00e9rifier que les liens de m\u00eame nature (menus, liens au fil du texte, autres groupes de liens tels qu'un nuage de tags, etc.) ont des pr\u00e9sentations visuellement similaires dans l'ensemble du site.<\/li><\/ul>",
+ "solution": "
Appliquer des propri\u00e9t\u00e9s communes de style, de couleur, de graisse, de casse, de soulignement aux ensembles de liens de m\u00eame nature.<\/p>",
+ "etape": "Conception",
+ "tag": "",
+ "theme": "Liens"
+ },
+ "158": {
+ "objectif": "
- Limiter le temps d\u2019apprentissage de l\u2019interface. <\/li>
- Acc\u00e9l\u00e9rer l\u2019acc\u00e8s aux contenus. <\/li>
- Faciliter la navigation.<\/li><\/ul>",
+ "titre": "Les m\u00e9canismes de fermetures de fen\u00eatres sont affich\u00e9s aux m\u00eames emplacements sur toutes les pages.",
+ "controle": "S\u2019assurer visuellement que l\u2019emplacement de tous les boutons de fermeture est identique \u00e0 travers le site.",
+ "solution": "Opter pour un positionnement syst\u00e9matique des boutons de fermeture dans un m\u00eame emplacement, pour toutes les fen\u00eatres modales et similaires (par exemple, en haut \u00e0 droite de la fen\u00eatre).",
+ "etape": "Conception",
+ "tag": "",
+ "theme": "Navigation"
+ },
+ "183": {
+ "objectif": "
- Permettre aux utilisateurs plac\u00e9s dans des contextes o\u00f9 les styles ne sont pas restitu\u00e9s (navigateur texte, lecteur d'\u00e9cran, navigateur avec styles d\u00e9sactiv\u00e9s) d\u2019acc\u00e9der \u00e0 l\u2019information pr\u00e9sente sous forme de contenus g\u00e9n\u00e9r\u00e9s en CSS (images d\u2019arri\u00e8re-plan notamment). <\/li>
- Permettre aux robots d'exploiter l'information v\u00e9hicul\u00e9e par les styles CSS (r\u00e9f\u00e9rencement, indexation, traduction automatique des alternatives).<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es. Am\u00e9liorer la prise en compte des contenus par les moteurs de recherche et outils d\u2019indexation<\/li><\/ul>",
+ "titre": "Les contenus g\u00e9n\u00e9r\u00e9s via les styles sont dot\u00e9s d'une alternative appropri\u00e9e.",
+ "controle": "Examiner directement le code CSS et comparer visuellement l\u2019affichage normal de la page avec son rendu apr\u00e8s d\u00e9sactivation des images d\u2019arri\u00e8re-plan. Pour chaque page :<\/div>
- Afficher les feuilles de styles gr\u00e2ce \u00e0 une barre d\u2019outils d\u00e9di\u00e9e et v\u00e9rifier que les propri\u00e9t\u00e9s et \u00e9l\u00e9ments cit\u00e9s dans le paragraphe \u00ab Solution technique \u00bb sont absents des CSS ou ne sont pas utilis\u00e9s pour produire une information par ailleurs absente du code HTML.<\/li>
- D\u00e9sactiver les images d\u2019arri\u00e8re-plan CSS avec une barre d\u2019outils d\u00e9di\u00e9e.<\/li>
- Contr\u00f4ler l\u2019absence de perte d\u2019information, en comparant l\u2019affichage avec et sans images d\u2019arri\u00e8re-plan.<\/li><\/ul><\/div>",
+ "solution": "
Fournir un contenu masqu\u00e9 \u00e0 l\u2019affichage via CSS :<\/p>
- pour chaque information port\u00e9e par les propri\u00e9t\u00e9s CSS background-image ou content ;<\/li>
- pour chaque information affich\u00e9e via un pseudo-\u00e9l\u00e9ment CSS :before ou :after ;<\/li>
- et plus g\u00e9n\u00e9ralement, pour chaque information absente par ailleurs de la page et dont la restitution d\u00e9pend du support des styles. <\/li><\/ul>
En savoir plus: background-image<\/code> sur MDN<\/a> - content<\/code> sur MDN<\/a> - before<\/code> sur MDN<\/a> - after<\/code> sur MDN<\/a><\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "SEO",
+ "theme": "Pr\u00e9sentation"
+ },
+ "66": {
+ "objectif": "- Permettre \u00e0 l'utilisateur d'obtenir une confirmation de sa demande en-dehors du contexte de la navigation sur le site. <\/li>
- \u00c9viter au service client de recevoir plusieurs demandes concernant une m\u00eame r\u00e9clamation.<\/li><\/ul>",
+ "titre": "Chaque r\u00e9clamation fait l'objet d'un accus\u00e9 de r\u00e9ception.",
+ "controle": "
Via le canal de contact de r\u00e9clamation indiqu\u00e9 :<\/p>
- Adresser une r\u00e9clamation fictive ;<\/li>
- Contr\u00f4ler l'envoi par le service d'un accus\u00e9 de r\u00e9ception.<\/li><\/ul>
<\/p>",
+ "solution": "
D\u00e9finir une proc\u00e9dure de gestion de l'envoi d'un e-mail accusant r\u00e9ception d'une r\u00e9clamation.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "E-Commerce"
+ },
+ "226": {
+ "objectif": "
- Recourir \u00e0 un jeu de caract\u00e8res international. <\/li>
- Pr\u00e9venir les d\u00e9fauts d\u2019affichage. <\/li>
- Faciliter la manipulation des contenus par les utilisateurs et les d\u00e9veloppeurs.<\/li><\/ul>",
+ "titre": "Le codage de caract\u00e8res utilis\u00e9 est UTF-8.",
+ "controle": "
Cette v\u00e9rification s\u2019effectue en trois temps. Pour chaque page examin\u00e9e :<\/p>
- V\u00e9rifier l\u2019indication du jeu de caract\u00e8res donn\u00e9e par l\u2019en-t\u00eate HTTP content-type envoy\u00e9e par le serveur, \u00e0 l'aide d'un outil d\u00e9di\u00e9.<\/li>
- V\u00e9rifier, le cas \u00e9ch\u00e9ant, la conformit\u00e9 \u00e0 cet en-t\u00eate de l\u2019\u00e9l\u00e9ment meta http-equiv=\"Content-Type\" dans le code HTML des pages.<\/li>
- V\u00e9rifier que le contenu des pages est effectivement encod\u00e9 en UTF-8 (absence de caract\u00e8res inattendus ou erron\u00e9s), par exemple en soumettant la page \u00e0 une validation HTML aupr\u00e8s du validateur du W3C (validator.w3.org).<\/li><\/ul>
L\u2019outil Internationalization Checker du W3C (validator.w3.org\/i18n-checker\/) permet de combiner ces trois \u00e9tapes.<\/p>",
+ "solution": "
Configurer le serveur et les bases de donn\u00e9es de mani\u00e8re \u00e0 utiliser UTF-8.<\/p>
Choisir des outils (logiciels de d\u00e9veloppement, frameworks, CMS, outils de production de contenu) compatibles avec UTF-8.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "Structure et code"
+ },
+ "40": {
+ "objectif": "
- Permettre \u00e0 l'utilisateur de conna\u00eetre le d\u00e9tail du montant de sa commande. <\/li>
- Lever un frein \u00e0 la validation d'une commande.<\/li><\/ul>",
+ "titre": "Le sous-total d\u00e9taill\u00e9 est indiqu\u00e9 avant la validation d\u00e9finitive de la commande.",
+ "controle": "
Dans un site de vente en ligne : <\/p>
- Entreprendre une commande de test ;<\/li>
- V\u00e9rifier la pr\u00e9sence du sous-total d\u00e9taill\u00e9 (quantit\u00e9s, montants, frais, assurances, etc.) avant la validation. <\/li><\/ul>",
+ "solution": "
Indiquer sur le formulaire r\u00e9capitulatif de la commande et avant validation, le sous-total d\u00e9taill\u00e9 du co\u00fbt du produit ou service command\u00e9.<\/p>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "E-Commerce"
+ },
+ "207": {
+ "objectif": "
- R\u00e9duire les risques d\u2019ex\u00e9cution ou d\u2019affichage d\u2019un contenu non d\u00e9sirable ou d\u2019une source non autoris\u00e9e.<\/li><\/ul>",
+ "titre": "Le site propose un m\u00e9canisme de s\u00e9curit\u00e9 permettant de restreindre l'origine des contenus.",
+ "controle": "V\u00e9rifier, \u00e0 l\u2019aide d\u2019un outil d\u2019inspection des en-t\u00eates HTTP, la pr\u00e9sence de l\u2019en-t\u00eate Content-Security-Policy.<\/div>",
+ "solution": "Activer l\u2019en-t\u00eate HTTP Content-Security-Policy avec les directives CSP 1 appropri\u00e9es :<\/div>
- img-src pour les images ;<\/li>
- script-src pour le JavaScript ;<\/li>
- style-src pour les styles CSS ;<\/li>
- font-src pour les webfonts ;<\/li>
- etc.<\/li><\/ul><\/div>",
+ "etape": "D\u00e9veloppement",
+ "tag": "",
+ "theme": "S\u00e9curit\u00e9"
+ },
+ "113": {
+ "objectif": "
- Permettre aux utilisateurs plac\u00e9s dans des contextes o\u00f9 les images ne sont pas perceptibles (navigateur texte, lecteur d'\u00e9cran, navigateur avec images d\u00e9sactiv\u00e9es) de comprendre le sens des images qu'ils ne peuvent voir. <\/li>
- Permettre aux robots d'exploiter l'information v\u00e9hicul\u00e9e par les images (r\u00e9f\u00e9rencement, indexation, traduction automatique des alternatives d\u2019images-texte).<\/li>
- Permettre l'affichage d'un texte pendant le chargement des images.<\/li>
- Am\u00e9liorer l\u2019accessibilit\u00e9 des contenus aux personnes handicap\u00e9es.<\/li>
- Am\u00e9liorer la prise en compte des contenus par les moteurs de recherche et outils d\u2019indexation<\/li><\/ul>",
+ "titre": "Chaque image porteuse d'information est dot\u00e9e d'une alternative textuelle appropri\u00e9e.",
+ "controle": "
- V\u00e9rifier que l\u2019attribut alt de chaque \u00e9l\u00e9ment img concern\u00e9 reproduit l\u2019information port\u00e9e par l\u2019image.<\/li>
- V\u00e9rifier que l\u2019attribut alt de chaque \u00e9l\u00e9ment area concern\u00e9 reproduit l\u2019information port\u00e9e par l\u2019image.<\/li>
- V\u00e9rifier que le contenu de chaque \u00e9l\u00e9ment object concern\u00e9 reproduit l\u2019information port\u00e9e par l\u2019image.<\/li>
- V\u00e9rifier que le contenu de chaque \u00e9l\u00e9ment canvas concern\u00e9 reproduit l\u2019information port\u00e9e par l\u2019image.<\/li>
- V\u00e9rifier que chaque \u00e9l\u00e9ment svg concern\u00e9 est associ\u00e9 \u00e0 un libell\u00e9 textuel reproduisant l\u2019information port\u00e9e par l\u2019image par le biais de son attribut aria-label ou de la balise desc.<\/li>
- V\u00e9rifier la pr\u00e9sence et la pertinence de la description \u00e9tendue le cas \u00e9ch\u00e9ant.
<\/li><\/ul><\/div>",
+ "solution": "- Donner \u00e0 chaque \u00e9l\u00e9ment img concern\u00e9 un attribut alt reproduisant l\u2019information.<\/li>
- Donner \u00e0 chaque \u00e9l\u00e9ment area concern\u00e9 un attribut alt reproduisant l\u2019information.<\/li>
- Reproduire l\u2019information dans le contenu de chaque \u00e9l\u00e9ment object concern\u00e9.<\/li>
- Reproduire l\u2019information dans le contenu de chaque \u00e9l\u00e9ment canvas concern\u00e9.<\/li>
- Reproduire l\u2019information dans un libell\u00e9 textuel associ\u00e9 \u00e0 chaque \u00e9l\u00e9ment svg concern\u00e9 par le biais de son attribut aria-label ou de la balise desc.<\/li><\/ul><\/div>Dans le cas d\u2019une image complexe qui ne peut \u00eatre r\u00e9sum\u00e9e de mani\u00e8re concise dans une alternative textuelle, le d\u00e9tail de l\u2019information doit \u00eatre apport\u00e9 en compl\u00e9ment \u00e0 l\u2019aide d\u2019une description \u00e9tendue :<\/div>
- soit via l\u2019attribut longdesc de l\u2019image indiquant l\u2019URL de la description,<\/li>
- soit via un lien adjacent \u00e0 l\u2019image jouant le m\u00eame r\u00f4le,<\/li>
- soit dans le contenu de la page, dans le contexte imm\u00e9diat de l\u2019image. Dans ce dernier cas, l\u2019alternative peut signaler la pr\u00e9sence de cette description et y renvoyer.<\/li><\/ul><\/div>
<\/div>",
+ "etape": "Editorial",
+ "tag": "SEO",
+ "theme": "Images et m\u00e9dias"
+ },
+ "228": {
+ "objectif": "- Permettre l\u2019identification des listes par les navigateurs et les aides techniques et donc leur restitution approprie\u0301e afin de faciliter leur compre\u0301hension par les utilisateurs.<\/li>
- Ame\u0301liorer la se\u0301mantique du contenu des pages et sa re\u0301utilisabilite\u0301.<\/li><\/ul>",
+ "titre": "Les \u00e9l\u00e9ments visuellement pr\u00e9sent\u00e9s sous forme de liste sont balis\u00e9s de fa\u00e7on appropri\u00e9e dans le code source.",
+ "controle": "
Pour chaque page contenant une liste :<\/p>
- Contr\u00f4ler le code source des contenus pr\u00e9sent\u00e9s sous forme de liste (caract\u00e9ris\u00e9s par la pr\u00e9sence de retours \u00e0 la ligne et de marqueurs de listes tels que des puces ou des num\u00e9ros) \u00e0 l\u2019aide d\u2019un inspecteur de code.<\/li>
- V\u00e9rifier si le code source de ces listes apparentes comporte bien les \u00e9l\u00e9ments HTML correspondant au type de liste concern\u00e9 :
ul, li<\/code> pour une liste non ordonn\u00e9e (liste \u00e0 puces), ol, li<\/code> pour une liste ordonn\u00e9e (liste num\u00e9rot\u00e9e) et dl, dt, dd<\/code>npour une liste de d\u00e9finitions ou, \u00e0 d\u00e9faut, les r\u00f4les ARIA list<\/code> et listitem<\/code>.<\/li><\/ul>",
+ "solution": "Soit utiliser les \u00e9l\u00e9ments HTML appropri\u00e9s :<\/p>
ul, li<\/code> pour les listes non ordonn\u00e9es ;<\/li>ol, li<\/code>pour les listes ordonn\u00e9es ;<\/li>dl, dt, dd<\/code> pour les listes de d\u00e9finitions ou de descriptions.<\/li><\/ul>Soit recourir aux attributs ARIA permettant de donner la s\u00e9mantique d\u2019une liste non ordonn\u00e9e ou ordonn\u00e9e \u00e0 un contenu balis\u00e9 de mani\u00e8re plus g\u00e9n\u00e9rique :<\/p>
- donner au conteneur de la liste un attribut