# Générer des attributs alt pertinents pour une bibliothèque de 5 000 images

> Un catalogue e-commerce de cinq mille photos sans texte alternatif, un délai serré et une équipe rédactionnelle réduite : voici la méthode que nous avons mise en place pour tout traiter sans sacrifier la qualité.

- Auteur : Clément Hadrot
- Publié le : 2022-05-11
- Mis à jour le : 2022-05-11
- Catégorie : Accessibilité
- URL : https://wpmoderne.dev.wordpress-developpement.fr/accessibilite/generer-alt-pertinents-bibliotheque-5000-images/

## L’essentiel

- Classement des images par catégorie avant rédaction
- Modèle de phrase par type de produit, jamais copié-collé
- Script WP-CLI pour repérer les images encore vides

Une agence cliente gérait un site de vente de pièces détachées pour l'électroménager, avec un catalogue de plus de cinq mille références, chacune illustrée par une ou plusieurs photos importées en vrac depuis les fiches fournisseurs. Aucune de ces images ne comportait de texte alternatif exploitable : la plupart avaient un attribut `alt` vide, quelques-unes reprenaient bêtement le nom de fichier d'origine, du type `IMG_20210304_142233.jpg`.

La mise en demeure d'un client final malvoyant a donné trois semaines à l'agence pour corriger la situation. Rédiger cinq mille descriptions une par une à la main était impossible dans ce délai avec l'équipe disponible. Voici la méthode que nous avons construite pour rester juste, rapide et cohérente.

## Le problème : la rédaction manuelle ne passe pas à l'échelle telle quelle

Rédiger un texte alternatif pertinent suppose de connaître le produit, son usage, et le contexte dans lequel l'image apparaît sur la page. Un rédacteur qui doit ouvrir cinq mille fiches une par une perd un temps considérable à retrouver ces informations à chaque fois, alors qu'elles sont souvent déjà présentes ailleurs sur la fiche produit elle-même.

## Étape 1 : extraire les métadonnées existantes avant de rédiger

Plutôt que de partir de l'image seule, nous avons écrit un script qui associe chaque média à la fiche produit qui l'utilise, via la table `wp_postmeta`, et qui en extrait le titre, la catégorie de produit et la marque. Ce tableau devient la matière première du rédacteur, qui n'a plus qu'à composer une phrase à partir de données déjà correctes.

> L'essentiel à retenir : Classement des images par catégorie avant rédaction ; Modèle de phrase par type de produit, jamais copié-collé ; Script WP-CLI pour repérer les images encore vides

```
global $wpdb;
$rows = $wpdb->get_results("
  SELECT p.ID as attachment_id, pm.meta_value as product_id
  FROM {$wpdb->posts} p
  JOIN {$wpdb->postmeta} pm ON pm.meta_value = p.post_parent
  WHERE p.post_type = 'attachment'
  AND p.post_mime_type LIKE 'image/%'
");
foreach ($rows as $row) {
  $product = get_post($row->product_id);
  echo $row->attachment_id . "\t" . $product->post_title . "\n";
}
```

### Étape 2 : des modèles de phrase, pas des phrases toutes faites

Pour garantir une cohérence sans tomber dans la répétition mécanique qu'un lecteur d'écran finirait par trouver lassante, nous avons défini des gabarits par type de produit plutôt que des textes figés :

- Pièce détachée seule : « [Nom de la pièce] pour [modèle d'appareil compatible] »
- Photo de montage : « Étape de montage : [action] sur [nom de la pièce] »
- Packaging : « Emballage d'origine du [nom du produit], référence [référence fournisseur] »

Chaque gabarit laissait une marge de reformulation au rédacteur : il ne s'agissait pas d'un simple remplissage automatique de variables, ce qui aurait produit des textes mécaniques et parfois absurdes lorsque les métadonnées étaient incomplètes ou mal orthographiées à la source.

## Étape 3 : répartir le travail sans doublons ni oublis

Avec deux rédacteurs travaillant en parallèle, le risque était de traiter deux fois la même image ou d'en oublier. Nous avons utilisé WP-CLI pour générer, chaque matin, la liste exacte des images encore sans texte alternatif :

```
wp post list --post_type=attachment --post_mime_type=image \
  --meta_key=_wp_attachment_image_alt --meta_compare=NOT EXISTS \
  --fields=ID,post_title --format=csv > images-restantes.csv
```

Ce fichier CSV, réparti chaque matin en deux moitiés entre les deux rédacteurs, a permis de suivre l'avancement jour après jour et d'éviter tout travail en double.

## Étape 4 : contrôle qualité avant mise en production

Avant publication, un script de contrôle a vérifié trois critères automatiquement vérifiables : longueur du texte alternatif entre 10 et 125 caractères, absence du mot « image » ou « photo » en début de phrase (redondant pour un lecteur d'écran, qui annonce déjà qu'il s'agit d'une image), et absence de doublon strict entre deux textes alternatifs différents.

| Critère | Seuil retenu | Images concernées |
| --- | --- | --- |
| Longueur | 10 à 125 caractères | 340 corrigées |
| Mot redondant en tête | « image de », « photo de » | 512 corrigées |
| Doublon strict | 0 toléré | 89 corrigées |

## Variantes possibles selon le contexte

Pour un site avec moins de références mais des photos plus complexes, comme un catalogue de mobilier avec des mises en situation, le gabarit par catégorie perd de son intérêt et une rédaction entièrement manuelle redevient préférable. Inversement, pour des images strictement décoratives répétées sur plusieurs pages, un attribut `alt=""` vide reste la bonne réponse : toutes les images n'ont pas vocation à recevoir un texte alternatif descriptif.

## En résumé

Traiter cinq mille images en trois semaines n'a rien eu de magique : le gain de temps est venu presque entièrement de la préparation, en extrayant les métadonnées existantes et en organisant la répartition du travail, avant même d'écrire le premier mot. La rédaction elle-même est restée humaine, phrase par phrase, ce qui a évité l'écueil des textes alternatifs absurdes que produit trop souvent l'automatisation intégrale.
