30 min de lecture · 6 419 mots

SEO Technique 2025 – Checklist complète

SEO Technique 2025 – Checklist complète
Article · 2025.12.19

Guide de référence complet pour le SEO technique : optimisation on-page, Core Web Vitals, indexation, structured data, et meilleures pratiques 2025.

Table des matières

  1. Fondamentaux HTML
  2. Meta tags et SEO on-page
  3. Structured Data (Schema.org)
  4. Core Web Vitals et performance
  5. Mobile et responsive
  6. Indexation et crawl
  7. Architecture et URL
  8. Contenu et optimisation
  9. Liens internes et externes
  10. Sécurité et HTTPS
  11. International et multilingue
  12. Outils et monitoring

Fondamentaux HTML

Structure HTML5 sémantique

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Titre de la page - Marque</title>
    <!-- Meta tags, styles, scripts -->
</head>
<body>
    <header>
        <nav aria-label="Navigation principale">
            <!-- Navigation -->
        </nav>
    </header>

    <main>
        <article>
            <h1>Titre principal de la page</h1>
            <section>
                <h2>Section 1</h2>
                <!-- Contenu -->
            </section>
        </article>

        <aside>
            <!-- Contenu complémentaire -->
        </aside>
    </main>

    <footer>
        <!-- Pied de page -->
    </footer>
</body>
</html>

Hiérarchie des titres

<!-- Respecter la hiérarchie logique -->
<h1>Titre principal (1 seul par page)</h1>
    <h2>Section principale</h2>
        <h3>Sous-section</h3>
            <h4>Détail</h4>
        <h3>Autre sous-section</h3>
    <h2>Autre section principale</h2>

<!-- MAUVAIS : sauter des niveaux -->
<h1>Titre</h1>
    <h3>Section</h3>  <!-- Mauvais: h2 manquant -->

Checklist HTML

  • [ ] DOCTYPE HTML5 (<!DOCTYPE html>)
  • [ ] Attribut lang sur <html> (lang="fr")
  • [ ] Charset UTF-8 déclaré
  • [ ] Viewport meta tag présent
  • [ ] Un seul <h1> par page
  • [ ] Hiérarchie des titres respectée (h1 → h2 → h3…)
  • [ ] HTML sémantique (header, nav, main, article, aside, footer)
  • [ ] HTML valide (W3C validator)
  • [ ] Pas de balises dépréciées (font, center, etc.)

Meta tags et SEO on-page

Meta tags essentiels

<head>
    <!-- Charset et viewport -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <!-- Title (50-60 caractères optimal) -->
    <title>Titre de la page - Mot-clé principal | Marque</title>

    <!-- Meta description (150-160 caractères optimal) -->
    <meta name="description" content="Description concise et attractive de la page avec mots-clés pertinents. Incite au clic dans les résultats de recherche.">

    <!-- Canonical URL -->
    <link rel="canonical" href="https://example.com/page-canonique">

    <!-- Robots -->
    <meta name="robots" content="index, follow">
    <!-- ou pour bloquer: content="noindex, nofollow" -->

    <!-- Open Graph (Facebook, LinkedIn) -->
    <meta property="og:type" content="website">
    <meta property="og:title" content="Titre pour réseaux sociaux">
    <meta property="og:description" content="Description pour réseaux sociaux">
    <meta property="og:image" content="https://example.com/image-og.jpg">
    <meta property="og:url" content="https://example.com/page">
    <meta property="og:site_name" content="Nom du site">
    <meta property="og:locale" content="fr_BE">

    <!-- Twitter Cards -->
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:site" content="@username">
    <meta name="twitter:creator" content="@username">
    <meta name="twitter:title" content="Titre pour Twitter">
    <meta name="twitter:description" content="Description pour Twitter">
    <meta name="twitter:image" content="https://example.com/twitter-image.jpg">

    <!-- Favicon et icons -->
    <link rel="icon" type="image/x-icon" href="/favicon.ico">
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
    <link rel="manifest" href="/site.webmanifest">
</head>

Title tag : bonnes pratiques

<!-- Formules efficaces -->
<title>Mot-clé principal - Mot-clé secondaire | Marque</title>
<title>Service/Produit à Localisation | Marque</title>
<title>Comment [Action] : Guide complet | Marque</title>

<!-- Exemples concrets -->
<title>Agence SEO à Bruxelles - Référencement naturel | WebAgency</title>
<title>Comment optimiser votre site web : Guide 2025 | SEOPro</title>
<title>Formation JavaScript ES2024 en ligne | CodeSchool</title>

<!-- Page d'accueil -->
<title>Marque - Description courte du service principal</title>

<!-- Éviter -->
<title>Accueil</title>  <!-- Trop vague -->
<title>Bienvenue sur notre site</title>  <!-- Pas de valeur SEO -->
<title>Mot-clé, mot-clé, mot-clé, mot-clé...</title>  <!-- Spam -->

Meta description : optimisation

<!-- Bonne meta description (150-160 caractères) -->
<meta name="description" content="Découvrez notre guide complet SEO 2025 : techniques avancées, Core Web Vitals, et stratégies éprouvées pour améliorer votre référencement naturel.">

<!-- Call-to-action -->
<meta name="description" content="Apprenez le JavaScript moderne en 30 jours. Formation complète avec projets réels, certificat inclus. Inscrivez-vous gratuitement aujourd'hui !">

<!-- Éviter -->
<!-- Trop court -->
<meta name="description" content="Guide SEO">

<!-- Trop long (> 160 caractères, sera coupé) -->
<meta name="description" content="Voici un guide extrêmement détaillé et complet sur le référencement naturel qui va vous expliquer absolument tout ce que vous devez savoir sur le SEO moderne et les techniques les plus avancées...">

<!-- Duplicate content -->
<meta name="description" content="Page d'accueil">

Checklist meta tags

  • [ ] Title unique pour chaque page (50-60 caractères)
  • [ ] Meta description unique (150-160 caractères)
  • [ ] Title contient le mot-clé principal
  • [ ] Meta description incite au clic
  • [ ] Canonical URL définie
  • [ ] Meta robots approprié (index/noindex)
  • [ ] Open Graph complet (og:title, og:description, og:image, og:url)
  • [ ] Twitter Cards configurées
  • [ ] Images Open Graph optimisées (1200x630px)
  • [ ] Favicon présent (multiple tailles)

Structured Data (Schema.org)

JSON-LD : format recommandé

<!-- Organization Schema -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "Nom de l'entreprise",
  "url": "https://example.com",
  "logo": "https://example.com/logo.png",
  "description": "Description de l'entreprise",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Rue Example",
    "addressLocality": "Bruxelles",
    "postalCode": "1000",
    "addressCountry": "BE"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "telephone": "+32-2-123-45-67",
    "contactType": "Service client",
    "availableLanguage": ["fr", "en"]
  },
  "sameAs": [
    "https://www.facebook.com/example",
    "https://twitter.com/example",
    "https://www.linkedin.com/company/example"
  ]
}
</script>

Article / Blog Post

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "Titre de l'article",
  "description": "Description de l'article",
  "image": "https://example.com/article-image.jpg",
  "author": {
    "@type": "Person",
    "name": "Prénom Nom",
    "url": "https://example.com/author/prenom-nom"
  },
  "publisher": {
    "@type": "Organization",
    "name": "Nom du site",
    "logo": {
      "@type": "ImageObject",
      "url": "https://example.com/logo.png"
    }
  },
  "datePublished": "2025-01-15T08:00:00+01:00",
  "dateModified": "2025-01-20T10:30:00+01:00",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/article-url"
  }
}
</script>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Accueil",
      "item": "https://example.com"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Catégorie",
      "item": "https://example.com/categorie"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Article",
      "item": "https://example.com/categorie/article"
    }
  ]
}
</script>

Product (E-commerce)

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Nom du produit",
  "image": "https://example.com/product-image.jpg",
  "description": "Description détaillée du produit",
  "sku": "SKU-12345",
  "mpn": "MPN-67890",
  "brand": {
    "@type": "Brand",
    "name": "Marque"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product",
    "priceCurrency": "EUR",
    "price": "99.99",
    "priceValidUntil": "2025-12-31",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock",
    "seller": {
      "@type": "Organization",
      "name": "Nom du vendeur"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.5",
    "reviewCount": "127"
  }
}
</script>

FAQ

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Qu'est-ce que le SEO ?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Le SEO (Search Engine Optimization) est l'ensemble des techniques visant à améliorer le positionnement d'un site web dans les résultats des moteurs de recherche."
      }
    },
    {
      "@type": "Question",
      "name": "Combien de temps faut-il pour voir des résultats SEO ?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Les premiers résultats SEO sont généralement visibles entre 3 et 6 mois, selon la concurrence et les optimisations appliquées."
      }
    }
  ]
}
</script>

LocalBusiness

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Nom de l'entreprise",
  "image": "https://example.com/storefront.jpg",
  "@id": "https://example.com",
  "url": "https://example.com",
  "telephone": "+32-2-123-45-67",
  "priceRange": "€€",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Rue Example",
    "addressLocality": "Bruxelles",
    "postalCode": "1000",
    "addressCountry": "BE"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 48.8566,
    "longitude": 2.3522
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "18:00"
    }
  ]
}
</script>

Checklist Structured Data

  • [ ] JSON-LD utilisé (recommandé par Google)
  • [ ] Schema Organization sur toutes les pages
  • [ ] Schema Article pour contenus éditoriaux
  • [ ] Schema BreadcrumbList pour navigation
  • [ ] Schema Product pour e-commerce
  • [ ] Schema LocalBusiness si applicable
  • [ ] Schema FAQ pour pages FAQ
  • [ ] Données validées (Google Rich Results Test)
  • [ ] Pas de contenu caché dans structured data
  • [ ] Dates au format ISO 8601

Core Web Vitals et performance

Core Web Vitals (2025)

Largest Contentful Paint (LCP)

  • Cible : < 2.5 secondes
  • Mesure le temps de chargement du plus grand élément visible

Interaction to Next Paint (INP) – Remplace FID en 2024

  • Cible : < 200 millisecondes
  • Mesure la réactivité aux interactions

Cumulative Layout Shift (CLS)

  • Cible : < 0.1
  • Mesure la stabilité visuelle

Optimisation LCP

<!-- Précharger ressources critiques -->
<link rel="preload" as="image" href="/hero-image.jpg">
<link rel="preload" as="font" type="font/woff2" href="/font.woff2" crossorigin>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="dns-prefetch" href="https://cdn.example.com">

<!-- Images responsive avec loading lazy -->
<img
  src="/image.jpg"
  srcset="/image-320.jpg 320w,
          /image-640.jpg 640w,
          /image-1024.jpg 1024w"
  sizes="(max-width: 640px) 100vw,
         (max-width: 1024px) 50vw,
         800px"
  alt="Description de l'image"
  width="800"
  height="600"
  loading="lazy"
  decoding="async"
>

<!-- Image hero (above the fold) sans lazy -->
<img
  src="/hero.jpg"
  alt="Hero image"
  width="1920"
  height="1080"
  fetchpriority="high"
>

Optimisation INP

// Débounce des interactions
function debounce(func, wait) {
  let timeout;
  return function executedFunction(...args) {
    clearTimeout(timeout);
    timeout = setTimeout(() => func(...args), wait);
  };
}

// Utilisation
const handleSearch = debounce((query) => {
  // Logique de recherche
}, 300);

// Lazy loading des scripts
<script src="/script.js" defer></script>
<script src="/non-critical.js" async></script>

// Code splitting
import(/* webpackChunkName: "module" */ './module.js')
  .then(module => {
    // Utiliser le module
  });

Optimisation CLS

<!-- Toujours définir width et height -->
<img src="image.jpg" width="800" height="600" alt="Image">

<!-- Réserver espace pour ads -->
<div style="min-height: 250px;">
  <!-- Ad slot -->
</div>

<!-- Font loading optimisé -->
<link rel="preload" as="font" type="font/woff2" href="/font.woff2" crossorigin>
<style>
  @font-face {
    font-family: 'CustomFont';
    src: url('/font.woff2') format('woff2');
    font-display: swap; /* ou optional */
  }
</style>

Performance générale

<!-- Compression CSS/JS -->
<link rel="stylesheet" href="/styles.min.css">
<script src="/script.min.js" defer></script>

<!-- Service Worker pour cache -->
<script>
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('/sw.js');
}
</script>

<!-- HTTP/2 Server Push (configuration serveur) -->
<!-- Compression Brotli/Gzip -->
<!-- CDN pour ressources statiques -->

Checklist Performance

  • [ ] LCP < 2.5s
  • [ ] INP < 200ms
  • [ ] CLS < 0.1
  • [ ] Time to First Byte (TTFB) < 600ms
  • [ ] Images optimisées (WebP, AVIF)
  • [ ] Lazy loading images below the fold
  • [ ] CSS critique inline
  • [ ] JavaScript différé ou async
  • [ ] Compression Brotli/Gzip activée
  • [ ] HTTP/2 ou HTTP/3
  • [ ] CDN configuré
  • [ ] Cache browser optimisé
  • [ ] Minification CSS/JS
  • [ ] Fonts optimisées (subset, preload)
  • [ ] Service Worker (si applicable)

Mobile et responsive

Viewport et responsive

<!-- Viewport correct -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<!-- ÉVITER -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<!-- Ne pas bloquer le zoom : accessibilité -->

Mobile-friendly CSS

/* Mobile-first approach */
/* Base styles (mobile) */
.container {
  padding: 1rem;
  font-size: 16px;
}

/* Tablet */
@media (min-width: 768px) {
  .container {
    padding: 2rem;
    font-size: 18px;
  }
}

/* Desktop */
@media (min-width: 1024px) {
  .container {
    padding: 3rem;
    max-width: 1200px;
    margin: 0 auto;
  }
}

/* Tap targets minimum 48x48px */
.button {
  min-height: 48px;
  min-width: 48px;
  padding: 12px 24px;
}

Responsive images

<!-- Picture element pour art direction -->
<picture>
  <source media="(min-width: 1024px)" srcset="/desktop.jpg">
  <source media="(min-width: 768px)" srcset="/tablet.jpg">
  <img src="/mobile.jpg" alt="Description">
</picture>

<!-- Formats modernes avec fallback -->
<picture>
  <source type="image/avif" srcset="/image.avif">
  <source type="image/webp" srcset="/image.webp">
  <img src="/image.jpg" alt="Description">
</picture>

Checklist Mobile

  • [ ] Mobile-friendly (Google Mobile-Friendly Test)
  • [ ] Viewport meta tag correct
  • [ ] Texte lisible sans zoom (min 16px)
  • [ ] Tap targets espacés (min 48x48px)
  • [ ] Pas de contenu plus large que viewport
  • [ ] Images responsive
  • [ ] Navigation mobile optimisée
  • [ ] Formulaires utilisables sur mobile
  • [ ] Pas de Flash ou plugins
  • [ ] Vitesse mobile optimisée (< 3s)

Indexation et crawl

Robots.txt

# /robots.txt

# Autoriser tous les bots
User-agent: *
Allow: /

# Bloquer sections spécifiques
Disallow: /admin/
Disallow: /private/
Disallow: /api/
Disallow: /*.json$
Disallow: /*?*print=true

# Googlebot spécifique
User-agent: Googlebot
Allow: /

# Bloquer mauvais bots
User-agent: BadBot
Disallow: /

# Sitemap
Sitemap: https://example.com/sitemap.xml
Sitemap: https://example.com/sitemap-images.xml

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">

  <!-- Page standard -->
  <url>
    <loc>https://example.com/</loc>
    <lastmod>2025-01-15</lastmod>
    <changefreq>daily</changefreq>
    <priority>1.0</priority>
  </url>

  <!-- Page avec image -->
  <url>
    <loc>https://example.com/article</loc>
    <lastmod>2025-01-10</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.8</priority>
    <image:image>
      <image:loc>https://example.com/image.jpg</image:loc>
      <image:title>Titre de l'image</image:title>
      <image:caption>Description de l'image</image:caption>
    </image:image>
  </url>

</urlset>

Sitemap Index (pour gros sites)

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-pages.xml</loc>
    <lastmod>2025-01-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-articles.xml</loc>
    <lastmod>2025-01-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-products.xml</loc>
    <lastmod>2025-01-14</lastmod>
  </sitemap>
</sitemapindex>

Meta robots

<!-- Indexer et suivre les liens (défaut) -->
<meta name="robots" content="index, follow">

<!-- Ne pas indexer cette page -->
<meta name="robots" content="noindex, follow">

<!-- Ne pas suivre les liens -->
<meta name="robots" content="index, nofollow">

<!-- Ne pas indexer ni suivre -->
<meta name="robots" content="noindex, nofollow">

<!-- Pas de cache -->
<meta name="robots" content="index, follow, noarchive">

<!-- Pas de snippet -->
<meta name="robots" content="index, follow, nosnippet">

<!-- Contrôle du snippet -->
<meta name="robots" content="index, follow, max-snippet:160">

<!-- Googlebot spécifique -->
<meta name="googlebot" content="index, follow">

Checklist Indexation

  • [ ] Robots.txt présent et correct
  • [ ] Sitemap XML généré
  • [ ] Sitemap soumis à Google Search Console
  • [ ] Pages importantes indexables (pas de noindex)
  • [ ] Pages dupliquées en noindex
  • [ ] Canonical tags corrects
  • [ ] Pas de chaînes de redirections
  • [ ] Redirections 301 (pas 302) pour permanent
  • [ ] Erreurs 404 minimales
  • [ ] Pagination gérée (rel= »next »/ »prev » ou canonical)
  • [ ] Profondeur de clic < 3 depuis homepage

Architecture et URL

Structure URL optimale

BONNES URLs :
https://example.com/category/article-title
https://example.com/blog/seo-guide-2025
https://example.com/products/laptop-model-x
https://example.com/fr/blog/article-francais

MAUVAISES URLs :
https://example.com/index.php?id=123&cat=5
https://example.com/article?p=abc123
https://example.com/2025/01/15/article (dates inutiles)
https://example.com/catégorie/article-avec-accents

Règles URL

  1. Courtes et descriptives
  2. Mots-clés pertinents
  3. Tirets pour séparer les mots (pas underscore)
  4. Minuscules uniquement
  5. Pas de caractères spéciaux
  6. Structure logique et hiérarchique
  7. HTTPS systématique
  8. Trailing slash cohérent (avec ou sans, mais constant)

Redirections

# .htaccess (Apache)

# Redirection 301 (permanent)
Redirect 301 /old-page https://example.com/new-page

# Redirection avec RewriteRule
RewriteEngine On
RewriteRule ^old-url$ /new-url [R=301,L]

# Forcer HTTPS
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Forcer www
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# Ou forcer non-www
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
# Nginx

# Redirection 301
location /old-page {
  return 301 https://example.com/new-page;
}

# Forcer HTTPS
server {
  listen 80;
  server_name example.com www.example.com;
  return 301 https://$server_name$request_uri;
}

# Forcer www
server {
  listen 443 ssl;
  server_name example.com;
  return 301 https://www.example.com$request_uri;
}

Pagination

<!-- Page 1 -->
<link rel="canonical" href="https://example.com/blog">
<link rel="next" href="https://example.com/blog?page=2">

<!-- Page 2 -->
<link rel="canonical" href="https://example.com/blog?page=2">
<link rel="prev" href="https://example.com/blog">
<link rel="next" href="https://example.com/blog?page=3">

<!-- Alternative : View All canonical -->
<link rel="canonical" href="https://example.com/blog/all">

Checklist Architecture

  • [ ] URLs courtes et descriptives
  • [ ] Structure hiérarchique logique
  • [ ] HTTPS sur tout le site
  • [ ] www ou non-www cohérent (choix et redirection)
  • [ ] Trailing slash cohérent
  • [ ] Pas de paramètres URL inutiles
  • [ ] Redirections 301 pour anciennes URLs
  • [ ] Pas de chaînes de redirections
  • [ ] Breadcrumbs implémentés
  • [ ] Navigation claire et cohérente
  • [ ] 404 personnalisée avec suggestions

Contenu et optimisation

Densité et placement des mots-clés

<!-- Mot-clé principal dans : -->
<title>Mot-clé principal - Titre de la page</title>
<meta name="description" content="Description avec mot-clé principal...">
<h1>Titre avec mot-clé principal</h1>

<!-- Dans l'URL -->
https://example.com/category/mot-cle-principal

<!-- Dans le contenu (naturellement) -->
<article>
  <h1>Guide complet du mot-clé principal</h1>
  <p>Introduction avec mot-clé principal naturellement intégré...</p>

  <h2>Section avec variation du mot-clé</h2>
  <p>Contenu avec mots-clés secondaires et synonymes...</p>

  <!-- Premier paragraphe important -->
  <p><strong>Mot-clé principal</strong> en début de contenu...</p>

  <!-- Alt text images -->
  <img src="image.jpg" alt="Description avec mot-clé pertinent">
</article>

Longueur optimale

  • Page d’accueil : 500-800 mots
  • Page catégorie : 300-500 mots
  • Article de blog : 1500-2500+ mots (selon sujet)
  • Page produit : 300-1000 mots
  • Page contact/légales : selon besoin

Structure de contenu SEO

<article>
  <!-- Introduction (100-150 mots) -->
  <div class="intro">
    <p>Introduction engageante avec mot-clé principal dans les 100 premiers mots.</p>
  </div>

  <!-- Table des matières (pour articles longs) -->
  <nav class="table-of-contents">
    <h2>Sommaire</h2>
    <ul>
      <li><a href="#section1">Section 1</a></li>
      <li><a href="#section2">Section 2</a></li>
    </ul>
  </nav>

  <!-- Sections avec titres H2 -->
  <section id="section1">
    <h2>Premier titre de section (mot-clé secondaire)</h2>
    <p>Paragraphes de 3-5 lignes maximum pour lisibilité.</p>

    <!-- Listes à puces pour scannabilité -->
    <ul>
      <li>Point 1</li>
      <li>Point 2</li>
      <li>Point 3</li>
    </ul>

    <!-- Sous-sections H3 -->
    <h3>Sous-section détaillée</h3>
    <p>Contenu détaillé...</p>

    <!-- Images avec alt text optimisé -->
    <figure>
      <img src="image.jpg" alt="Description précise avec mot-clé">
      <figcaption>Légende descriptive de l'image</figcaption>
    </figure>
  </section>

  <!-- Conclusion -->
  <section class="conclusion">
    <h2>Conclusion</h2>
    <p>Résumé des points clés avec appel à l'action.</p>
  </section>

  <!-- Call to Action -->
  <div class="cta">
    <a href="/contact" class="button">Contactez-nous</a>
  </div>
</article>

Optimisation images

<!-- Image optimisée SEO -->
<img
  src="/images/seo-guide-2025.jpg"
  alt="Guide SEO complet 2025 avec checklist technique"
  title="Guide SEO 2025"
  width="800"
  height="600"
  loading="lazy"
>

<!-- Nom de fichier descriptif -->
seo-guide-2025.jpg  ✓
img123.jpg  ✗

<!-- Alt text descriptif -->
alt="Guide SEO complet 2025 avec checklist technique"  ✓
alt="Image"  ✗
alt=""  (OK si décoratif seulement)

<!-- Formats optimisés -->
<picture>
  <source type="image/avif" srcset="image.avif">
  <source type="image/webp" srcset="image.webp">
  <img src="image.jpg" alt="Description">
</picture>

Checklist Contenu

  • [ ] Mot-clé principal dans title, H1, URL, meta description
  • [ ] Mot-clé dans les 100 premiers mots
  • [ ] Variations et synonymes utilisés naturellement
  • [ ] Contenu unique (pas de duplicate)
  • [ ] Longueur appropriée au sujet
  • [ ] Structure avec H2/H3 logiques
  • [ ] Paragraphes courts (3-5 lignes)
  • [ ] Listes à puces pour scannabilité
  • [ ] Images optimisées (taille, format, alt text)
  • [ ] Liens internes pertinents
  • [ ] CTA clair
  • [ ] Contenu à jour (dates récentes)
  • [ ] Orthographe et grammaire correctes
  • [ ] Contenu apportant de la valeur

Liens internes et externes

Liens internes

<!-- Bon lien interne -->
<a href="/guide-seo-technique" title="Consulter notre guide SEO technique complet">
  Guide SEO technique 2025
</a>

<!-- Éviter -->
<a href="/page">Cliquez ici</a>  <!-- Anchor text non descriptif -->
<a href="#">En savoir plus</a>   <!-- href vide -->

<!-- Navigation breadcrumb -->
<nav aria-label="Fil d'Ariane">
  <ol itemscope itemtype="https://schema.org/BreadcrumbList">
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
      <a itemprop="item" href="/">
        <span itemprop="name">Accueil</span>
      </a>
      <meta itemprop="position" content="1" />
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
      <a itemprop="item" href="/blog">
        <span itemprop="name">Blog</span>
      </a>
      <meta itemprop="position" content="2" />
    </li>
    <li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
      <span itemprop="name">Article</span>
      <meta itemprop="position" content="3" />
    </li>
  </ol>
</nav>

<!-- Articles connexes -->
<aside class="related-articles">
  <h3>Articles connexes</h3>
  <ul>
    <li><a href="/article-1">Titre descriptif article 1</a></li>
    <li><a href="/article-2">Titre descriptif article 2</a></li>
  </ul>
</aside>

Liens externes

<!-- Lien externe avec attributs appropriés -->
<a href="https://external-site.com" rel="noopener noreferrer" target="_blank">
  Site externe de confiance
</a>

<!-- Lien sponsorisé/payant -->
<a href="https://sponsor.com" rel="sponsored noopener" target="_blank">
  Lien sponsorisé
</a>

<!-- UGC (User Generated Content) -->
<a href="https://user-link.com" rel="ugc noopener">
  Lien d'utilisateur
</a>

<!-- Lien nofollow (ne pas transmettre autorité) -->
<a href="https://untrusted.com" rel="nofollow noopener">
  Lien non suivi
</a>

Attributs rel

Attribut Usage
rel="noopener" Sécurité (target= »_blank »)
rel="noreferrer" Ne pas envoyer referrer
rel="nofollow" Ne pas suivre (SEO)
rel="sponsored" Lien commercial/payant
rel="ugc" User generated content
rel="canonical" URL canonique
rel="alternate" Version alternative

Checklist Liens

  • [ ] Liens internes vers pages importantes
  • [ ] Anchor text descriptif et varié
  • [ ] Liens externes vers sources fiables
  • [ ] rel= »noopener » sur liens externes (sécurité)
  • [ ] rel= »sponsored » sur liens payants
  • [ ] Pas de liens brisés (404)
  • [ ] Liens ouvrent dans nouvel onglet si approprié
  • [ ] Breadcrumbs implémentés
  • [ ] Pas d’excès de liens (dilution PageRank)
  • [ ] Liens contextuels et pertinents

Sécurité et HTTPS

Certificat SSL/TLS

# Vérifier certificat
openssl s_client -connect example.com:443

# Let's Encrypt (gratuit)
certbot --nginx -d example.com -d www.example.com

Headers de sécurité

# .htaccess (Apache)

# HSTS (HTTP Strict Transport Security)
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

# X-Content-Type-Options
Header set X-Content-Type-Options "nosniff"

# X-Frame-Options
Header set X-Frame-Options "SAMEORIGIN"

# X-XSS-Protection
Header set X-XSS-Protection "1; mode=block"

# Referrer Policy
Header set Referrer-Policy "strict-origin-when-cross-origin"

# Content Security Policy
Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';"
# Nginx

# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# X-Content-Type-Options
add_header X-Content-Type-Options "nosniff" always;

# X-Frame-Options
add_header X-Frame-Options "SAMEORIGIN" always;

# X-XSS-Protection
add_header X-XSS-Protection "1; mode=block" always;

# Referrer Policy
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Checklist Sécurité

  • [ ] HTTPS sur tout le site (certificat valide)
  • [ ] Redirection HTTP → HTTPS (301)
  • [ ] HSTS activé
  • [ ] Certificat SSL valide et à jour
  • [ ] Mixed content résolu (pas de http:// sur page https://)
  • [ ] Headers de sécurité configurés
  • [ ] Mises à jour système/CMS régulières
  • [ ] Passwords forts
  • [ ] Backups réguliers
  • [ ] Protection contre brute force

International et multilingue

Hreflang

<!-- Page française -->
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page">
<link rel="alternate" hreflang="en" href="https://example.com/en/page">
<link rel="alternate" hreflang="es" href="https://example.com/es/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page">

<!-- Page anglaise -->
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page">
<link rel="alternate" hreflang="en" href="https://example.com/en/page">
<link rel="alternate" hreflang="es" href="https://example.com/es/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/en/page">

Structures URL multilingues

Option 1 : Sous-répertoires (recommandé)
https://example.com/fr/
https://example.com/en/
https://example.com/es/

Option 2 : Sous-domaines
https://fr.example.com/
https://en.example.com/
https://es.example.com/

Option 3 : Domaines différents (ccTLD)
https://example.be/
https://example.co.uk/
https://example.es/

Balise lang

<!-- HTML avec langue -->
<html lang="fr">

<!-- Sections en langues différentes -->
<html lang="fr">
  <body>
    <article lang="fr">
      <p>Contenu en français</p>
      <blockquote lang="en">
        <p>Quote in English</p>
      </blockquote>
    </article>
  </body>
</html>

Google Search Console international

1. Ajouter toutes les versions linguistiques
2. Configurer ciblage géographique si ccTLD
3. Soumettre sitemaps pour chaque langue
4. Vérifier hreflang avec rapport dédié

Checklist International

  • [ ] Hreflang sur toutes pages traduites
  • [ ] Hreflang réciproque (bidirectionnel)
  • [ ] x-default défini pour langue par défaut
  • [ ] Attribut lang sur balise html
  • [ ] URLs cohérentes par langue
  • [ ] Contenu traduit (pas juste auto-traduit)
  • [ ] Sitemaps séparés par langue
  • [ ] Google Search Console configuré par version
  • [ ] Géotargeting approprié
  • [ ] Pas de redirection automatique forcée (UX)

Outils et monitoring

Google Search Console

À configurer :

  • Propriété vérifiée (DNS, fichier HTML, ou Google Analytics)
  • Sitemap soumis
  • Données structurées validées
  • Exploration testée (URL Inspection Tool)
  • Core Web Vitals monitorés
  • Couverture d’index vérifiée

À surveiller régulièrement :

  • Erreurs d’exploration
  • Erreurs de données structurées
  • Problèmes de sécurité
  • Actions manuelles
  • Core Web Vitals
  • Performances (clics, impressions, CTR)
  • Liens (internes/externes)

Google Analytics 4

<!-- GA4 tag -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>

Outils de test essentiels

Outil URL Usage
PageSpeed Insights https://pagespeed.web.dev/ Core Web Vitals
Mobile-Friendly Test https://search.google.com/test/mobile-friendly Test mobile
Rich Results Test https://search.google.com/test/rich-results Structured data
W3C Validator https://validator.w3.org/ HTML validity
Schema Markup Validator https://validator.schema.org/ Schema validation
Lighthouse Chrome DevTools Audit complet
Screaming Frog https://www.screamingfrogseocrawler.com/ Crawl technique
GTmetrix https://gtmetrix.com/ Performance
WebPageTest https://www.webpagetest.org/ Performance détaillée

Monitoring continu

// Core Web Vitals monitoring (web-vitals library)
import {onCLS, onINP, onLCP} from 'web-vitals';

function sendToAnalytics({name, value, id}) {
  gtag('event', name, {
    event_category: 'Web Vitals',
    value: Math.round(name === 'CLS' ? value * 1000 : value),
    event_label: id,
    non_interaction: true,
  });
}

onCLS(sendToAnalytics);
onINP(sendToAnalytics);
onLCP(sendToAnalytics);

Checklist Outils

  • [ ] Google Search Console configuré
  • [ ] Google Analytics 4 installé
  • [ ] Sitemaps soumis
  • [ ] Tests réguliers PageSpeed Insights
  • [ ] Monitoring Core Web Vitals
  • [ ] Crawl technique régulier (Screaming Frog)
  • [ ] Tracking positions mots-clés
  • [ ] Alertes configurées (GSC, Analytics)
  • [ ] Backlinks monitorés
  • [ ] Rapports SEO automatisés

Checklist SEO complète

Technique

  • [ ] HTML5 valide
  • [ ] HTTPS activé partout
  • [ ] Certificat SSL valide
  • [ ] Sitemap XML généré et soumis
  • [ ] Robots.txt configuré
  • [ ] Redirections 301 pour anciennes URLs
  • [ ] Canonical tags corrects
  • [ ] Structured data (JSON-LD)
  • [ ] Core Web Vitals optimisés (LCP, INP, CLS)
  • [ ] Mobile-friendly
  • [ ] Page speed optimale (< 3s)
  • [ ] Images optimisées
  • [ ] Lazy loading configuré
  • [ ] HTTP/2 ou HTTP/3
  • [ ] Compression Brotli/Gzip
  • [ ] CDN configuré
  • [ ] Cache browser optimisé

On-page

  • [ ] Title unique par page (50-60 car.)
  • [ ] Meta description unique (150-160 car.)
  • [ ] H1 unique avec mot-clé principal
  • [ ] Hiérarchie H2-H6 logique
  • [ ] URLs SEO-friendly
  • [ ] Alt text sur toutes images
  • [ ] Liens internes pertinents
  • [ ] Anchor text descriptifs
  • [ ] Contenu unique et de qualité
  • [ ] Mots-clés naturellement intégrés
  • [ ] Open Graph complet
  • [ ] Twitter Cards configurées

Contenu

  • [ ] Contenu original et utile
  • [ ] Longueur appropriée
  • [ ] Mots-clés bien placés
  • [ ] Paragraphes courts
  • [ ] Listes à puces
  • [ ] Images et vidéos
  • [ ] CTA clairs
  • [ ] Contenu à jour
  • [ ] Orthographe correcte
  • [ ] Liens vers sources fiables

Indexation

  • [ ] Pages importantes indexées
  • [ ] Pages dupliquées en noindex
  • [ ] Pas de contenu bloqué par robots.txt
  • [ ] Pas de chaînes de redirections
  • [ ] Profondeur de clic < 3
  • [ ] Pagination gérée
  • [ ] Erreurs 404 minimales

International (si applicable)

  • [ ] Hreflang configuré
  • [ ] Structure URL cohérente
  • [ ] Contenu traduit
  • [ ] Sitemaps par langue
  • [ ] GSC par version linguistique

Monitoring

  • [ ] Google Search Console actif
  • [ ] Google Analytics installé
  • [ ] Core Web Vitals suivis
  • [ ] Positions mots-clés trackées
  • [ ] Backlinks monitorés
  • [ ] Alertes configurées

Ressources 2025

Documentation officielle

Tendances SEO 2025

  • Intelligence Artificielle et contenu
  • Search Generative Experience (SGE)
  • E-E-A-T (Experience, Expertise, Authoritativeness, Trust)
  • Recherche vocale et conversationnelle
  • Vidéo et contenu multimédia
  • Core Web Vitals évolution continue
  • INP remplace FID définitivement

Mises à jour Google importantes

  • Helpful Content Update
  • Product Reviews Update
  • Page Experience Update
  • Spam Updates
  • Core Updates (plusieurs par an)

Version : SEO Technique 2025 Dernière mise à jour : Décembre 2024

Ce guide couvre les aspects essentiels du SEO technique moderne avec un focus sur les Core Web Vitals, l’expérience utilisateur et les standards 2025.

Une remarque, un retour ?

Cet article est vivant - corrections, contre-arguments et retours de production sont les bienvenus. Trois canaux, choisis celui qui te convient.

Laisser un commentaire