Tutoriels Symfony + Twig 04 May 2026 14 min de lecture

Jour 10 - Mettre en place un SEO propre pour le blog Symfony

On implémente un SEO technique propre: title, meta description, canonical, Open Graph et données structurées JSON-LD.

Jour 10 - Mettre en place un SEO propre pour le blog Symfony - article technique

Le SEO d’un blog technique repose d’abord sur la structure: balises propres, contenus utiles et URLs stables.

On va implémenter un socle SEO qui tient en production sans complexité inutile.

Objectif d’apprentissage

Mettre en place un SEO technique robuste article par article, sans sur-optimisation marketing.

Ce que tu vas pratiquer aujourd’hui

  • Meta title et description dynamiques.
  • Balise canonical propre.
  • Open Graph et Twitter Cards.
  • JSON-LD Article côté Twig.

1. Préparer les données SEO dans le controller

Construis un petit tableau SEO plutôt que de disperser la logique dans plusieurs templates.

Cela rend la maintenance plus simple.

$seo = [
    'title' => $post->getSeoTitle() ?: $post->getTitle(),
    'description' => $post->getMetaDescription() ?: $post->getExcerpt(),
    'canonical' => $request->getUri(),
    'ogTitle' => $post->getOgTitle() ?: $post->getTitle(),
    'ogDescription' => $post->getOgDescription() ?: $post->getExcerpt(),
];

2. Rendre les balises meta dans Twig

Centralise les balises dans le layout pour éviter les oublis.

Évite les titres dupliqués ou vides.

<title>{{ seo.title }}</title>
<meta name="description" content="{{ seo.description }}">
<link rel="canonical" href="{{ seo.canonical }}">
<meta property="og:title" content="{{ seo.ogTitle }}">
<meta property="og:description" content="{{ seo.ogDescription }}">
<meta property="og:type" content="article">
<meta name="twitter:card" content="summary_large_image">

3. Ajouter un JSON-LD Article minimal

Le JSON-LD aide les moteurs à comprendre le contexte de l’article.

Garde un schéma simple, propre et valide.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "{{ post.title|e('js') }}",
  "datePublished": "{{ post.publishedAt ? post.publishedAt|date('c') : '' }}",
  "author": {"@type": "Person", "name": "{{ post.authorName|e('js') }}"}
}
</script>

Checklist de fin de session

  • Title et description dynamiques.
  • Canonical présent.
  • Open Graph présent.
  • JSON-LD article valide.

Erreurs fréquentes à éviter

  • Sauter la vérification finale parce que “ça marche chez moi”.
  • Mélanger trop de logique dans le controller au lieu de garder un flux clair.
  • Oublier la cohérence entre la donnée, le template Twig et le comportement en production.

Pourquoi cette étape compte en conditions réelles

Dans un vrai projet client, chaque étape technique doit rester compréhensible par l’équipe, duplicable sur un autre environnement et fiable dans le temps. Ici, l’objectif est de transformer la théorie en un flux de travail concret, avec des décisions simples que tu peux défendre en revue de code.

Si tu appliques sérieusement les points du jour (meta title et description dynamiques.), tu réduis la dette technique dès le départ et tu facilites la suite: SEO, publication, maintenance et déploiement. C’est exactement la différence entre un blog “démo” et un blog exploitable en production.

Mini plan de révision

  • Reprends ce point et explique-le à voix haute comme si tu faisais un code review : Meta title et description dynamiques.
  • Reprends ce point et explique-le à voix haute comme si tu faisais un code review : Balise canonical propre.
  • Reprends ce point et explique-le à voix haute comme si tu faisais un code review : Open Graph et Twitter Cards.

Exercice rapide

Ajoute une meta robots conditionnelle noindex pour les brouillons preview.

Et demain ?

Demain, on accélère le blog avec cache, images optimisées et bonnes pratiques Core Web Vitals.

Partager

Faire circuler cet article

Si ce contenu peut aider quelqu’un dans son projet, tu peux le partager directement.

LinkedIn X WhatsApp

Tu dois structurer un backend, clarifier une API ou reprendre un existant en production ?

Échanger sur ton besoin