Maîtrisez la stratégie SEO 2026 : optimisation technique, contenus orientés intention, E-E-A-T, autorité de domaine et plan d'action concret sur 90 jours.
Les enjeux SEO en 2026
Le paysage du referencement a radicalement change depuis 2023. Google a deploye des mises a jour majeures contre le contenu genere en masse, le spam de liens et les pages creees uniquement pour le SEO. En parallele, l'AI Overview (ex-SGE) apparait sur pres de 40% des requetes transactionnelles aux USA, captant des clics avant meme la page de resultats classique.
Pour un developpeur ou un editeur technique, la regle est simple: un article qui n'apporte rien de nouveau, de precis ou de verifiable sera systematiquement devalue. L'algorithme detecte les contenus redondants, les paragraphes vagues et les pages sans veritable profondeur editoriale.
Les 5 signaux majeurs de 2026
| Signal | Impact | Indicateur mesurable |
|---|---|---|
| Helpful Content | Tres eleve | Satisfaction utilisateur, profondeur, sources |
| Core Web Vitals | Eleve (tie-breaker) | LCP < 2.5s, INP < 200ms, CLS < 0.1 |
| E-E-A-T | Eleve (YMYL) | Auteur identifie, sources citees, mise a jour |
| Mobile-first | Eleve | Indexation mobile, viewport, touch targets |
| Donnees structurees | Moyen (rich snippets) | JSON-LD valide, coverage GSC, erreurs 0 |
Core Web Vitals: mesure et optimisation
Depuis 2021, les Core Web Vitals sont un facteur de classement officiel. En 2026, INP (Interaction to Next Paint) a remplace FID comme metrique principale d'interactivite. Voici les seuils cibles:
Seuils officiels 2026
| Metrique | Bon | A ameliorer | Mauvais | Ce qu'il mesure |
|---|---|---|---|---|
| LCP | < 2.5s | 2.5–4s | > 4s | Chargement du plus grand element visible |
| INP | < 200ms | 200–500ms | > 500ms | Reactivite aux interactions utilisateur |
| CLS | < 0.1 | 0.1–0.25 | > 0.25 | Stabilite visuelle (saut de mise en page) |
Mesurer les CWV avec JavaScript (PerformanceObserver)
// Mesure LCP en temps reel avec PerformanceObserver
// Utile pour le monitoring RUM (Real User Monitoring)
const lcpObserver = new PerformanceObserver((list) => {
const entries = list.getEntries();
const lastEntry = entries[entries.length - 1]; // derniere entree = la plus representative
console.log('LCP:', lastEntry.startTime, 'ms');
console.log('Element LCP:', lastEntry.element);
// Envoyer vers Analytics ou votre endpoint de monitoring
navigator.sendBeacon('/api/vitals', JSON.stringify({
metric: 'LCP',
value: Math.round(lastEntry.startTime),
url: location.pathname,
}));
});
// On observe le type "largest-contentful-paint"
lcpObserver.observe({ type: 'largest-contentful-paint', buffered: true });
// Mesure INP avec "event" observer
const inpObserver = new PerformanceObserver((list) => {
for (const entry of list.getEntries()) {
if (entry.interactionId && entry.duration > 200) {
console.warn('INP eleve detecte:', entry.duration, 'ms', entry.name);
}
}
});
inpObserver.observe({ type: 'event', buffered: true, durationThreshold: 16 });
Corriger les problemes LCP courants
- Image LCP sans preload: ajouter
<link rel="preload" as="image" href="hero.webp">dans<head> - fetchpriority="high": attribut HTML sur l'image au-dessus de la ligne de flottaison
- Font LCP: utiliser
font-display: swapet precharger la police avecrel="preload" - TTFB eleve: cache serveur (Nginx FastCGI), CDN, ou prerendering des pages statiques
Corriger le CLS
/* Reservation d'espace pour les images = zero CLS */
img {
aspect-ratio: attr(width) / attr(height); /* attribut HTML width/height obligatoire */
}
/* Images responsive sans CLS */
.hero-image {
width: 100%;
aspect-ratio: 16 / 9; /* reserve la hauteur avant le chargement */
object-fit: cover;
}
/* Publicites et embeds: toujours definir une taille */
.ad-container {
min-height: 250px; /* empeche le saut quand l'annonce se charge */
}
/* Eviter les injections de contenu au-dessus du fold */
.notification-banner {
position: fixed; /* fixed ne declenche pas de CLS */
top: 0;
left: 0;
right: 0;
}
SEO technique: robots, sitemap, JSON-LD
La technique SEO est la fondation. Sans elle, le meilleur contenu du monde reste invisible. Voici les elements essentiels avec leur implementation concrete.
Configuration robots.txt
# /robots.txt - fichier a la racine du domaine
User-agent: *
Allow: /
# Bloquer les URLs non pertinentes pour le SEO
Disallow: /admin/
Disallow: /api/
Disallow: /assets/json/ # fichiers de donnees, pas des pages
Disallow: /*?*sort= # parametres de tri non canoniques
Disallow: /*?*page= # pages de pagination si canonicalisees
# Performance: indiquer le delai de crawl pour les bots agressifs
Crawl-delay: 1
# Sitemap XML (obligatoire)
Sitemap: https://www.monsite.com/sitemap.xml
Structure sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
<url>
<loc>https://www.monsite.com/posts/guide-seo-technique.php</loc>
<lastmod>2026-04-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.9</priority>
<!-- Image incluse pour le SEO Google Images -->
<image:image>
<image:loc>https://www.monsite.com/assets/images/seo-guide.webp</image:loc>
<image:title>Guide SEO technique 2026</image:title>
</image:image>
</url>
</urlset>
JSON-LD: schema Article complet
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "Strategie SEO technique 2026: guide complet",
"description": "Core Web Vitals, JSON-LD, clusters de contenu...",
"author": {
"@type": "Person",
"name": "Said Mezgani",
"url": "https://www.monsite.com/auteur/said",
"sameAs": [
"https://www.linkedin.com/in/said-mezgani",
"https://github.com/said-mezgani"
]
},
"publisher": {
"@type": "Organization",
"name": "AngularForAll",
"logo": {
"@type": "ImageObject",
"url": "https://www.angularforall.com/assets/images/logo.png"
}
},
"datePublished": "2026-01-15",
"dateModified": "2026-04-01",
"image": "https://www.angularforall.com/assets/images/seo-2026.webp",
"url": "https://www.angularforall.com/posts/referencement-2026.php"
}
</script>
JSON-LD: schema FAQPage pour les extraits enrichis
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Qu'est-ce que le LCP en SEO?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Le LCP (Largest Contentful Paint) mesure le temps de chargement
du plus grand element visible dans le viewport. Un bon score
est inferieur a 2.5 secondes. C'est un Core Web Vital officiel
pris en compte par Google depuis 2021."
}
},
{
"@type": "Question",
"name": "Comment ameliorer son E-E-A-T en 2026?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Pour ameliorer l'E-E-A-T: creez une page auteur detaillee avec bio
et references, citez vos sources avec des liens, ajoutez la date
de mise a jour visible, integrez des etudes de cas verifiables
et obtenez des mentions de sites autoritaires de votre domaine."
}
}
]
}
</script>
JSON-LD: schema BreadcrumbList
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Accueil",
"item": "https://www.angularforall.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "SEO",
"item": "https://www.angularforall.com/?category=seo"
},
{
"@type": "ListItem",
"position": 3,
"name": "Strategie SEO 2026"
}
]
}
</script>
Balise canonical: eviter le contenu duplique
<!-- Dans <head>: pointe vers la version canonique de la page -->
<link rel="canonical" href="https://www.monsite.com/posts/guide-seo.php">
<!-- Cas pagination: page 2 pointe vers la pilier (si contenu proche) -->
<link rel="canonical" href="https://www.monsite.com/blog/">
<!-- Cas parametres URL: version avec parametres pointe vers la propre -->
<!-- URL actuelle: /posts/article.php?ref=newsletter -->
<link rel="canonical" href="https://www.monsite.com/posts/article.php">
Clusters thematiques et intention de recherche
La strategie de contenu la plus efficace en 2026 repose sur les topic clusters: une page pilier autoritaire sur un sujet large, reliee par du maillage interne a des pages satellites qui traitent des sous-sujets specifiques. Cette structure signale a Google que votre site a une couverture experte et complete d'un domaine.
Architecture d'un cluster SEO technique
/* Structure d'un cluster "Performance Web" */
PILIER: "Guide complet de la performance web 2026"
URL: /posts/performance-web-guide.php
Mots-cles: performance web, optimisation site, vitesse chargement
Longueur: 4000+ mots | Intention: informationnelle
├── SATELLITE 1: "Core Web Vitals: guide pratique"
│ URL: /posts/core-web-vitals.php
│ Mots-cles: LCP, INP, CLS mesure
│ Lien interne vers pilier: oui (contexte)
│
├── SATELLITE 2: "Optimiser les images WebP pour le LCP"
│ URL: /posts/images-webp-optimisation.php
│ Mots-cles: image webp, lazy loading, fetchpriority
│ Lien vers pilier + satellite 1
│
├── SATELLITE 3: "Lighthouse CI dans GitHub Actions"
│ URL: /posts/lighthouse-ci-github-actions.php
│ Mots-cles: lighthouse ci, github actions seo
│ Lien vers pilier
│
└── SATELLITE 4: "Cache HTTP et strategie de cache navigateur"
URL: /posts/cache-http-strategie.php
Mots-cles: cache-control, service worker cache
Lien vers pilier + satellite 2
Identifier l'intention de recherche
| Type d'intention | Signal dans la requete | Format de page optimal |
|---|---|---|
| Informationnelle | qu'est-ce que, comment, pourquoi, guide | Article de fond, guide complet, tutoriel |
| Navigationnelle | nom de marque, site officiel | Page d'accueil, page marque |
| Transactionnelle | acheter, prix, meilleur, comparatif | Page produit, page de vente, comparatif |
| Commerciale | avis, vs, alternative, test | Review, benchmark, top 10 |
Template de brief de contenu SEO
/* Brief de contenu type pour un article pilier */
TITRE CIBLE: "Guide TypeScript pour developperus Angular 2026"
- Mot-cle principal: "typescript angular guide"
- Volume: 1200/mois | Difficulte: 42 | CPC: 1.80€
- Intention: informationnelle + formation
- Longueur cible: 4500 mots
STRUCTURE CIBLE (basee sur l'analyse des top 10):
H1: Guide TypeScript complet pour Angular (2026)
H2: Pourquoi TypeScript est essentiel pour Angular
H2: Types, interfaces et generiques dans Angular
H2: Decorateurs et leur fonctionnement interne
H2: Type guards et narrowing avances
H2: Configuration tsconfig.json optimale
H2: Migration JavaScript vers TypeScript
H2: Outils et plugins TypeScript recommandes
ELEMENTS DIFFERENCIANTS OBLIGATOIRES:
- Exemples de code specifiquement Angular (pas generiques)
- Erreurs TypeScript courantes en Angular + solutions
- Comparaison Angular 17 vs 20 sur les types
- Checklist de validation TypeScript en revue de code
- Un seul sujet par page: eviter de melanger TypeScript + RxJS + State Management dans un seul article.
- Repondre a la question en moins de 100 mots avant de developper — Google prefere les pages qui vont droit au but.
- Mise a jour obligatoire: les articles de fond doivent etre revus au minimum tous les 6 mois pour rester dans les top positions.
- Analyse de la SERP avant d'ecrire: regarder les "People Also Ask" et les extraits enrichis pour adapter votre structure.
E-E-A-T: signaux de confiance concrets
E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) est le cadre qu'utilisent les quality raters de Google pour evaluer les pages. Ce n'est pas un facteur de classement direct, mais il influence fortement les mises a jour algorithmiques. Voici comment l'implementer concretement.
Page auteur: les elements indispensables
<!-- Page auteur optimisee E-E-A-T -->
<div class="author-profile">
<img src="photo-auteur.webp"
alt="Said Mezgani, developpeur Angular senior"
width="120" height="120">
<h1>Said Mezgani</h1>
<p class="author-title">Developpeur Angular Senior — 10 ans d'experience</p>
<!-- Experience concrete: Google valorise les preuves reelles -->
<ul>
<li>Contributeur Angular (15 PRs mergees)</li>
<li>Speaker ng-conf 2024 et 2025</li>
<li>Certifie Google Cloud Professional</li>
</ul>
<!-- Reseaux professionnels: signaux de confiance externes -->
<a href="https://linkedin.com/in/said">LinkedIn</a>
<a href="https://github.com/said">GitHub</a>
<a href="https://twitter.com/said">Twitter/X</a>
</div>
<!-- Schema JSON-LD auteur integre dans chaque article -->
<script type="application/ld+json">
{
"@type": "Person",
"name": "Said Mezgani",
"jobTitle": "Developpeur Angular Senior",
"knowsAbout": ["Angular", "TypeScript", "SEO technique", "Performance web"],
"sameAs": ["https://linkedin.com/in/said", "https://github.com/said"]
}
</script>
Signaux E-E-A-T par element de page
| Element | Implementation E-E-A-T | Priorite |
|---|---|---|
| Byline article | Nom auteur + lien page auteur + date de mise a jour | Critique |
| Sources et references | Liens vers sources primaires (docs officielles, etudes) | Critique |
| Page A propos | Mission, equipe, histoire, adresse physique | Important |
| Mentions legales | CGU, politique de confidentialite, contact | Important |
| Avis et temoignages | Schema Review, temoignages verifiables | Recommande |
| Mentions externes | Backlinks de sites autoritaires, citations presse | Recommande |
SGE et LLM: etre cite par l'IA
L'AI Overview de Google (SGE) et les chatbots comme ChatGPT ou Perplexity extraient et resument les contenus web. Pour etre cite par ces systemes, il faut produire des pages optimisees pour l'extraction machine — ce qu'on appelle le AEO (Answer Engine Optimization).
Principes de l'AEO en 2026
Les LLMs privilegient les contenus qui sont structures, factuels et faciles a chunker (decouper en blocs). Voici les patterns qui augmentent la probabilite d'etre cite:
/* Mauvaise structure: paragraphes longs sans ancrages */
<p>
Le SEO en 2026 est complexe. Il faut considerer de nombreux facteurs
comme la performance, le contenu, les backlinks, l'experience
utilisateur et bien d'autres elements importants. La technique
est egalement cruciale...
</p>
/* Bonne structure: reponse directe + developpement */
<h3>Qu'est-ce que le LCP en SEO?</h3>
<p>
<strong>Le LCP (Largest Contentful Paint) mesure le temps de chargement
du plus grand element visible.</strong> Un bon score est inferieur a 2.5
secondes. C'est un des trois Core Web Vitals officiels de Google.
</p>
<p>Pour ameliorer votre LCP: precharger l'image hero avec
<code>rel="preload"</code>, utiliser WebP, et eviter les ressources
qui bloquent le rendu.
</p>
Structures HTML optimisees pour l'AEO
- Questions en H2/H3: formuler les titres comme des questions directes que posent les utilisateurs.
- Reponse en 40-60 mots: le premier paragraphe sous un H2 doit repondre directement — les LLMs extraient ce bloc.
- Listes et tableaux: les donnees structurees sont preservees par les IA extractrices (vs les paragraphes fleuves).
- Schema FAQPage: augmente la probabilite d'apparaitre dans les featured snippets et l'AI Overview.
- Contenu unique: les LLMs detectent les informations qu'ils n'ont pas en memoire et les privilegient.
Optimiser pour les featured snippets
/* Structure pour cibler un featured snippet de type definition */
<h2>Qu'est-ce que le E-E-A-T en SEO?</h2>
<p>
<!-- Repondre en 1-2 phrases directes, 40-60 mots -->
Le E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness)
est le cadre de Google pour evaluer la qualite d'un contenu. Il
influence les mises a jour algorithmiques en favorisant les pages
ecrites par des experts credibles et verifiables.
</p>
/* Structure pour un featured snippet de type liste */
<h2>Comment ameliorer son E-E-A-T?</h2>
<ol>
<li>Creer une page auteur detaillee avec bio et references.</li>
<li>Citer des sources primaires dans chaque article.</li>
<li>Afficher la date de mise a jour visible.</li>
<li>Obtenir des mentions de sites autoritaires du secteur.</li>
</ol>
Google Search Console et Analytics: ce qu'il faut surveiller
Les outils de monitoring sont essentiels pour piloter votre SEO. Voici les rapports et metriques prioritaires dans Google Search Console (GSC) et GA4.
Google Search Console: rapports prioritaires
| Rapport GSC | Ce qu'il faut surveiller | Frequence |
|---|---|---|
| Performances > Pages | CTR < 2% sur des pages en top 10 = titre a optimiser | Hebdomadaire |
| Couverture d'index | Pages "Decouverte - actuellement non indexee" = probleme de crawl budget | Hebdomadaire |
| Experience de page | Pages avec "Mauvaise" experience = fix urgent Core Web Vitals | Mensuelle |
| Donnees structurees | Erreurs dans les schemas JSON-LD = perte d'extraits enrichis | Mensuelle |
| Liens | Pages avec 0 lien interne = pages orphelines a relier | Trimestrielle |
Identifier les opportunites CTR avec l'API GSC
// Script Node.js: detecter les pages avec CTR faible mais position haute
// Necessite l'API Google Search Console + cle OAuth2
const { google } = require('googleapis');
async function analyzeSearchConsole(siteUrl, days = 90) {
const searchconsole = google.searchconsole('v1');
const response = await searchconsole.searchanalytics.query({
siteUrl,
requestBody: {
startDate: getDateNDaysAgo(days),
endDate: getToday(),
dimensions: ['page'],
rowLimit: 500,
},
});
const opportunities = response.data.rows
.filter(row => {
const { position, ctr, impressions } = row;
// Page bien positionnee (top 10) mais CTR faible = titre a retravailler
return position <= 10 && ctr < 0.03 && impressions > 100;
})
.sort((a, b) => a.position - b.position);
console.log('Pages a optimiser (CTR faible, bonne position):');
opportunities.forEach(page => {
console.log(`Position ${page.position.toFixed(1)} | CTR ${(page.ctr*100).toFixed(1)}% | ${page.keys[0]}`);
});
}
// Resultat typique:
// Position 4.2 | CTR 1.8% | /posts/core-web-vitals.php -> retravailler le title
// Position 7.1 | CTR 0.9% | /posts/typescript-types.php -> retravailler la meta
GA4: metriques SEO essentielles
- Taux d'engagement: > 60% = bon signal comportemental (vs taux de rebond GA3).
- Temps moyen sur la page: articles longs = attendre au moins 3 minutes sur les guides.
- Pages par session organique: > 2 = maillage interne efficace.
- Conversions depuis le trafic organique: segmenter par landing page pour mesurer le ROI de chaque article.
Plan d'action SEO sur 90 jours
Voici un plan d'action structure pour un site technique existant qui veut ameliorer son positionnement. Ce plan suppose un site de 50 a 200 pages avec un historique d'indexation.
Phase 1 — Jours 1 a 21: audit et socle technique
/* SEMAINE 1: Audit complet */
1. Crawl Screaming Frog complet:
- Exporter: titres dupliques, H1 manquants, redirects en chaine
- Identifier les pages canoniques manquantes
- Lister les images sans attribut alt
2. Verification Google Search Console:
- Pages "Decouverte - non indexee" = probleme de crawl budget?
- Erreurs de donnees structurees = schemas JSON-LD invalides?
- Pages avec "Mauvaise experience de page" = Core Web Vitals a corriger
3. Analyse Lighthouse (via Chrome DevTools):
- Tester les 10 pages les plus trafiquees
- Objectif: score Performance > 85 sur mobile
/* SEMAINE 2: Fix des erreurs critiques */
4. Corriger les canonical manquants sur toutes les pages
5. Ajouter/corriger les balises title (max 60 caracteres, unique par page)
6. Corriger les redirects en chaine (A -> B -> C devient A -> C)
7. Corriger les images sans alt sur les pages principales
/* SEMAINE 3: Performance */
8. Implementer les preloads pour les images hero
9. Passer toutes les images a WebP + lazy loading
10. Activer la mise en cache HTTP (Cache-Control: max-age=31536000 sur les assets)
Phase 2 — Jours 22 a 56: contenu et maillage
/* SEMAINES 4-8: Strategie editoriale */
AUDIT CONTENU EXISTANT:
- Identifier les articles en position 11-20 (page 2-3) = wins rapides
- Tagger chaque article: "Bon", "A developper", "A supprimer"
- Priorite: developper les articles "A developper" qui ont deja des impressions
NOUVEAUX CONTENUS:
- 1 page pilier par cluster thematique (4000+ mots)
- 2-3 pages satellites par pilier (1500-2500 mots)
- Brief de contenu avant chaque article (intention + structure + concurrents)
MAILLAGE INTERNE:
- Chaque nouvel article = au moins 3 liens entrants depuis des articles existants
- Chaque pilier = liens contextuels depuis toutes ses satellites
- Ancres descriptives (eviter "cliquez ici")
Phase 3 — Jours 57 a 90: autorite et mesure
/* SEMAINES 9-12: Autoriteé et iteration */
NETLINKING:
- Identifier 20 sites autoritaires du secteur (Ahrefs ou Moz)
- Contact pour: guest posts, interviews, ressources complementaires
- Creer des contenus "linkables": outils, etudes, infographies, guides de reference
MESURE ET AJUSTEMENT:
- Comparer positions avant/apres (GSC, Semrush ou Ahrefs)
- Analyser les CTR: titre a retravailler si < 3% en top 10
- Identifier les pages stagnantes = enrichir avec FAQ, tableau, ou section de code
KPIs FINAUX A J+90:
- Nombre de pages indexees: stable ou en hausse
- Impressions organiques: +20% minimum
- Pages en top 10: +5 nouvelles entrees
- Core Web Vitals: 100% des pages en "Bon"
Accessibilite, responsive et UX inclusive
L'accessibilite n'est plus separee du SEO: Google utilise des signaux comportementaux (rebonds, engagement) qui refletent la qualite de l'experience. Un site inaccessible perd du trafic organique, du temps de session et des conversions.
Checklist accessibilite WCAG 2.2 pour le SEO
- Images:
altdescriptif (pas "image1.jpg"), videalt=""pour les images decoratives. - Labels de formulaires:
<label for="email">explicite sur chaque champ — ameliore aussi le SEO des pages de contact. - Navigation clavier: tous les elements interactifs accessibles a Tab + Enter/Space.
- Contraste: ratio 4.5:1 minimum pour le texte normal (verifiez avec l'outil Colour Contrast Analyser).
- Titres hierarchiques: H1 unique par page, H2/H3 ordonnes — profite au SEO ET a l'accessibilite.
- Liens: texte d'ancre descriptif, pas de "cliquez ici" ou "lire la suite".
Test Lighthouse Accessibility via CI
# .github/workflows/lighthouse.yml
# Execute Lighthouse sur chaque PR et bloque si le score baisse
name: Lighthouse CI
on: [pull_request]
jobs:
lighthouse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install LHCI
run: npm install -g @lhci/cli
- name: Run Lighthouse CI
run: lhci autorun
env:
LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
# lighthouserc.json
{
"ci": {
"collect": {
"url": ["http://localhost:8000/posts/guide-seo.php"],
"startServerCommand": "php -S localhost:8000"
},
"assert": {
"assertions": {
"categories:performance": ["error", { "minScore": 0.85 }],
"categories:accessibility": ["error", { "minScore": 0.90 }],
"categories:seo": ["error", { "minScore": 0.95 }]
}
}
}
}
Responsive: les points de rupture critiques pour le SEO
/* L'indexation est mobile-first: optimiser d'abord pour mobile */
/* Viewport meta obligatoire */
<meta name="viewport" content="width=device-width, initial-scale=1">
/* Tailles de cibles tactiles (WCAG 2.5.5 + Google Core Web Vitals) */
/* Minimum: 48x48px pour les boutons et liens principaux */
.btn-nav, .article-link {
min-height: 48px;
min-width: 48px;
display: inline-flex;
align-items: center;
}
/* Police lisible sur mobile sans zoom (prevents double-tap zoom) */
input, select, textarea {
font-size: 16px; /* en-dessous = iOS zoome automatiquement */
}
/* Eviter le contenu plus large que le viewport (CLS sur mobile) */
img, video, iframe {
max-width: 100%;
height: auto;
}