L'expertise accessibilité web, intégrée à votre workflow

Includdy transforme les non-conformités EAA en plan d'action clair.
Pour vos devs. Pour vos designers. Pour vos testeurs QA

Avant
Avec Includdy

Soutenu par les acteurs de l'accessibilité et de l'innovation

  • On parle de nous à la Tribune Côte d'Azur
  • Nous participons à la traduction des WCAG 2.2 en français au W3C
  • Nos experts sont certifiés par Access42 en audit et développement accessibilité
  • Nous avons participé au programme French Tech Tremplin 2025
  • Nos experts sont certifiés qualité web par Opquast
  • Nous avons été incubés en 2025 à l'Incubateur Provence Côte d'Azur

Votre site est-il concerné par l'EAA ou le RGAA ?

Plus besoin de toucher à des centaines de critères, des milliers de pages de documentation. Includdy les traduit en actions claires pour votre équipe.

Un langage que votre équipe comprend vraiment

Chaque non-conformité est expliquée avec son impact métier et son impact utilisateur. Fini les rapports que personne ne lit.

Includdy génère le correctif adapté à votre stack

Plus besoin de googler chaque critère ou de bricoler dix prompts dans ChatGPT. Le fix est adapté à votre CMS ou framework.

Montez en compétence, sans dépendre d’un expert

Chacun dans l’équipe progresse au fil des corrections. La connaissance reste, même quand quelqu’un part.

Votre audit RGAA ne devrait pas finir dans un tiroir

La moitié des non-conformités détectées lors d'un audit classique ne sont jamais corrigées. Quand votre équipe comprend le problème, son impact et le correctif à appliquer, tout avance plus vite. Scannez votre site et laissez Includdy faire le reste.

Autocomplete inadapté au champ
Nœud ARIA progressbar sans nom accessible
Rôle ARIA sans attributs requis
Éléments interactifs imbriqués
Attributs ARIA avec valeurs invalides
Champ avec plusieurs étiquettes
Attribut id ARIA / étiquette non unique
Cellule d'en-tête sans référence aux données
Autocomplete inadapté au champ
Nœud ARIA progressbar sans nom accessible
Rôle ARIA sans attributs requis
Éléments interactifs imbriqués
Attributs ARIA avec valeurs invalides
Champ avec plusieurs étiquettes
Attribut id ARIA / étiquette non unique
Cellule d'en-tête sans référence aux données
Région main dans une autre région
Summary et caption identiques dans tableau
Image <img> sans alternative textuelle
Éléments <video> sans sous-titres
Landmark non unique
Éléments <audio> sans sous-titres
Nœud ARIA treeitem sans nom accessible
Contenu non localisé dans une région
Région main dans une autre région
Summary et caption identiques dans tableau
Image <img> sans alternative textuelle
Éléments <video> sans sous-titres
Landmark non unique
Éléments <audio> sans sous-titres
Nœud ARIA treeitem sans nom accessible
Contenu non localisé dans une région
Élément <blink> utilisé
Champ de basculement ARIA sans libellé
Élément select sans nom accessible
Images réactives côté serveur utilisées
Élément focusable avec rôle inapproprié
aria-roledescription sur élément sans rôle
Valeur de role invalide
Hiérarchie de titres sémantiquement incorrecte
Élément <blink> utilisé
Champ de basculement ARIA sans libellé
Élément select sans nom accessible
Images réactives côté serveur utilisées
Élément focusable avec rôle inapproprié
aria-roledescription sur élément sans rôle
Valeur de role invalide
Hiérarchie de titres sémantiquement incorrecte
Attribut headers référençant cellule invalide
Tabindex supérieur à 0
Niveau de titre sans texte perceptible
Région banner dans une autre région
Attributs ARIA non autorisés pour le rôle
Document HTML sans élément <title>
Nœud ARIA meter sans nom accessible
Attribut lang avec valeur invalide
Attribut headers référençant cellule invalide
Tabindex supérieur à 0
Niveau de titre sans texte perceptible
Région banner dans une autre région
Attributs ARIA non autorisés pour le rôle
Document HTML sans élément <title>
Nœud ARIA meter sans nom accessible
Attribut lang avec valeur invalide
Cellule de données sans cellule d'en-tête
SVG avec rôle img sans texte accessible
Lien d'évitement sans cible focusable
Dialog ou alertdialog ARIA sans nom accessible
Attributs aria- invalides
Valeur d'attribut id non unique
Lien sans texte perceptible
Contraste insuffisant (WCAG 2 AAA)
Cellule de données sans cellule d'en-tête
SVG avec rôle img sans texte accessible
Lien d'évitement sans cible focusable
Dialog ou alertdialog ARIA sans nom accessible
Attributs aria- invalides
Valeur d'attribut id non unique
Lien sans texte perceptible
Contraste insuffisant (WCAG 2 AAA)
Attribut scope incorrect dans tableau
Navigation ne pointant pas vers le contenu principal
Contenu limité à une orientation d'écran
Contrôle de bouton sans valeur textuelle
Plus d'une région banner
meta viewport désactivant le zoom
Attribut role invalide pour cet élément
Éléments <dl> mal structurés
Attribut scope incorrect dans tableau
Navigation ne pointant pas vers le contenu principal
Contenu limité à une orientation d'écran
Contrôle de bouton sans valeur textuelle
Plus d'une région banner
meta viewport désactivant le zoom
Attribut role invalide pour cet élément
Éléments <dl> mal structurés
Région contentinfo dans une autre région
Élément <marquee> utilisé
Contenu défilant non accessible au clavier
Plus d'un landmark main
Document HTML sans attribut lang
Éléments <p> stylés en titres
Cible tactile trop petite
meta refresh utilisé pour actualisation différée
Région contentinfo dans une autre région
Élément <marquee> utilisé
Contenu défilant non accessible au clavier
Plus d'un landmark main
Document HTML sans attribut lang
Éléments <p> stylés en titres
Cible tactile trop petite
meta refresh utilisé pour actualisation différée
Page sans titre de niveau 1
aria-hidden sur élément recevant le focus
Formulaire labellisé uniquement par title
role=text avec descendants focalisables
Éléments <area> sans alternative textuelle
Button, link ou menuitem ARIA sans nom accessible
iframe focalisable avec tabindex=-1
Aucun mécanisme de contournement de navigation
Page sans titre de niveau 1
aria-hidden sur élément recevant le focus
Formulaire labellisé uniquement par title
role=text avec descendants focalisables
Éléments <area> sans alternative textuelle
Button, link ou menuitem ARIA sans nom accessible
iframe focalisable avec tabindex=-1
Aucun mécanisme de contournement de navigation
Tableau avec légende sans élément <caption>
Attribut id non unique sur élément actif
Élément de formulaire sans étiquette
Plus d'une région contentinfo
Liens de même nom sans même finalité
Listes mal structurées
Audio ou vidéo en lecture automatique
Éléments <object> sans alternative textuelle
Tableau avec légende sans élément <caption>
Attribut id non unique sur élément actif
Élément de formulaire sans étiquette
Plus d'une région contentinfo
Liens de même nom sans même finalité
Listes mal structurées
Audio ou vidéo en lecture automatique
Éléments <object> sans alternative textuelle
Champ de formulaire ARIA sans intitulé accessible
Input type=image sans alternative textuelle
Éléments <dt> et <dd> hors d'un <dl>
iframe ou frame sans attribut title
Rôle ARIA sans rôles pour descendants directs
Éléments <li> utilisés hors sémantique
En-tête de tableau sans texte perceptible
Attribut lang avec valeur invalide
Champ de formulaire ARIA sans intitulé accessible
Input type=image sans alternative textuelle
Éléments <dt> et <dd> hors d'un <dl>
iframe ou frame sans attribut title
Rôle ARIA sans rôles pour descendants directs
Éléments <li> utilisés hors sémantique
En-tête de tableau sans texte perceptible
Attribut lang avec valeur invalide
Texte visible absent de l'intitulé accessible
Élément role=img sans équivalence textuelle
Espacement du texte non ajustable
Alternative d'image répétant le texte du lien
Rôle ARIA hors de son rôle parent requis
Valeur de l'attribut accesskey non unique
Landmark aside hors du plus haut niveau
iframe ou frame sans attribut title unique
Texte visible absent de l'intitulé accessible
Élément role=img sans équivalence textuelle
Espacement du texte non ajustable
Alternative d'image répétant le texte du lien
Rôle ARIA hors de son rôle parent requis
Valeur de l'attribut accesskey non unique
Landmark aside hors du plus haut niveau
iframe ou frame sans attribut title unique
Rôle none/presentation déclenchant un conflit
meta viewport empêchant l'agrandissement
Langues lang et xml:lang incohérentes
Bouton sans texte perceptible
Liens non distinguables sans couleur
Contraste insuffisant (WCAG 2 AA)
Nœud ARIA tooltip sans nom accessible
aria-hidden='true' présent sur le body
Rôle none/presentation déclenchant un conflit
meta viewport empêchant l'agrandissement
Langues lang et xml:lang incohérentes
Bouton sans texte perceptible
Liens non distinguables sans couleur
Contraste insuffisant (WCAG 2 AA)
Nœud ARIA tooltip sans nom accessible
aria-hidden='true' présent sur le body
Next.js

Déclarer la langue sur <html lang>

export default
function RootLayout({
  children
}) {
  return (
    <html lang="fr">
      <body>{children}</body>
    </html>
  );
}
Camille, Content designer

Définir la langue principale du site

Thomas, Frontend

Ajouter l'attribut lang sur la balise html

Noah, Testeur

Vérifier la prononciation au lecteur d'écran

Angular

Lier label et input via for/id

<label for="consent">
  J'accepte les CGU
</label>
<input id="consent"
  type="checkbox"
  formControlName=
    "consent" />
Marie, UX Designer

Maquetter un label visible pour chaque champ

Thomas, Frontend

Associer label et input via for/id

Noah, Testeur

Tester la navigation clavier

Vue

Décrire chaque image avec un alt

<img
  v-for="p in gallery"
  :key="p.id"
  :src="p.thumbnail"
  :alt="p.caption"
/>
Camille, Content designer

Rédiger les alt descriptifs de la galerie

Thomas, Frontend

Mapper photo.caption sur l'attribut alt

Léa, Testeuse

Contrôler le rendu au lecteur d'écran

React

Ajouter aria-label à ce bouton icône

<IconButton
  aria-label="Supprimer"
  onClick={() =>
    removeItem(id)
  }
>
  <TrashIcon />
</IconButton>
Marie, UX Designer

Définir le libellé du bouton de suppression

Thomas, Frontend

Implémenter IconButton avec aria-label

Léa, Testeuse

Valider le libellé au lecteur d'écran

L'expertise d'un consultant, la vitesse d'une machine

Includdy combine une base de connaissances experte avec l'IA pour générer des correctifs fiables, adaptés à votre stack. Vous appliquez directement au lieu de déchiffrer un rapport RGAA.

ReactVueAngularNext.jsWordPressDrupalShopify
Corrections IA

Passez de « on verra plus tard » à « c'est en cours »

Includdy crée des tickets qui parlent le langage de chaque membre de votre équipe : le quoi, le pourquoi, le comment. Intégrés dans votre Jira, GitLab ou Trello, priorisés par impact et effort. Commencez par les quick wins et avancez sprint après sprint.

JiraLinearTrelloGitHubGitLabExcel
Tickets

Du diagnostic au correctif, sans changer d'outil

Commencez par un diagnostic complet pour voir l'ensemble. Puis passez en mode développement : scannez une page en local, concentrez-vous sur un composant à la fois. Tout se passe dans votre navigateur, même avant de déployer.

Scan complet
En local

« Le vrai problème de l'accessibilité, ce n'est pas la détection des non-conformités. C'est de ne pas se noyer dedans quand personne ne sait quoi en faire. »

Misha
CEO et Fondateur, Includdy

Pour les équipes qui passent à l'action

L'accessibilité est devenue obligatoire, mais votre équipe n'a pas changé du jour au lendemain. Les deadlines restent les mêmes, et le sujet atterrit sur le bureau de quelqu'un qui n'a jamais ouvert le RGAA.

Agences web

L'accessibilité est une opportunité de marché. Includdy comble l'écart entre votre équipe et la conformité.

Équipes de développement

Includdy rend l'équipe autonome et la forme au passage, sans tout faire reposer sur un seul référent.