SEO sur Sylius : le guide d'optimisation complet pour votre e-commerce
Un site e-commerce invisible sur Google est un site mort. Le referencement naturel est le premier levier d'acquisition pour la majorite des boutiques en ligne. Sylius offre une base technique saine pour le SEO, mais il faut l'optimiser correctement. Dans ce guide exhaustif, je couvre chaque aspect du SEO sur Sylius, du technique au contenu en passant par la performance.
L'etat des lieux : Sylius et le SEO natif
Avant de plonger dans les optimisations, faisons le point sur ce que Sylius fournit nativement en matiere de SEO :
Les points forts
- URLs propres : les slugs produits et categories sont personnalisables et traduisibles
- Rendu serveur : Twig genere du HTML cote serveur, indexable sans JavaScript
- Meta tags editables : titre et description modifiables par produit dans l'admin
- Architecture propre : code HTML semantique, structure claire
- Performance : Symfony est un framework performant, bon point de depart pour les Core Web Vitals
Les lacunes a combler
- Pas de sitemap XML natif
- Pas de donnees structurees (Schema.org) integrees
- Pas de gestion des redirections 301 dans l'admin
- Pas de meta robots configurable par page
- Pas de canonical URL automatique
- Pas d'optimisation d'images automatique
Structure des URLs
Les URLs sont le premier signal SEO. Sur Sylius, la structure par defaut est correcte mais peut etre amelioree.
URLs produits
Par defaut, Sylius genere des URLs de type /products/mon-produit. Pour un meilleur SEO, vous pouvez personnaliser le prefixe ou l'eliminer completement :
# config/routes/sylius_shop.yaml
sylius_shop_product_show:
path: /{slug}
methods: [GET]
defaults:
_controller: sylius.controller.product:showAction
_sylius:
template: "@SyliusShop/Product/show.html.twig"
# Attention aux conflits de routes si vous supprimez le prefixe !
# Ajoutez des requirements pour limiter les slugs valides :
requirements:
slug: "[a-z0-9]+(?:-[a-z0-9]+)*"
URLs categories (taxons)
Les taxons Sylius supportent la hierarchie dans les URLs (/vetements/t-shirts). Activez-la pour un meilleur maillage :
# Le slug d'un taxon peut inclure le chemin complet
# vetements/t-shirts/coton-bio
# Configurez dans l'admin : Catalog > Taxons > Edit > Slug
URLs canoniques
Les canonicals evitent le contenu duplique. Ajoutez-les systematiquement :
{# templates/bundles/SyliusShopBundle/layout.html.twig #}
{% block metatags %}
{# Pour les produits avec variantes, pointer vers le produit principal #}
{% if product is defined %}
{% endif %}
{% endblock %}
Meta tags et Open Graph
Chaque page de votre boutique doit avoir un titre et une description uniques. Etendez le modele Product pour ajouter des champs SEO :
// src/Entity/Product/Product.php
namespace App\Entity\Product;
use Sylius\Component\Core\Model\Product as BaseProduct;
class Product extends BaseProduct
{
private ?string $metaTitle = null;
private ?string $metaDescription = null;
private ?string $metaKeywords = null;
private ?string $ogImage = null;
// En Twig, utilisez :
// product.metaTitle ?: product.name ~ ' | Ma Boutique'
// product.metaDescription ?: product.shortDescription|slice(0, 160)
}
{# templates/bundles/SyliusShopBundle/Product/show.html.twig #}
{% block metatags %}
{{ product.metaTitle ?: product.name ~ ' - Ma Boutique' }}
{# Open Graph #}
{# Twitter Card #}
{% endblock %}
Sitemap XML
Le sitemap XML est indispensable pour guider Google dans l'indexation de votre catalogue. Voici comment le generer dynamiquement avec Symfony :
// src/Controller/SitemapController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
#[Route('/sitemap.xml', name: 'app_sitemap')]
class SitemapController
{
public function __invoke(
ProductRepositoryInterface $productRepo,
TaxonRepositoryInterface $taxonRepo,
ChannelContextInterface $channelContext,
): Response {
$channel = $channelContext->getChannel();
$urls = [];
// Pages statiques
$urls[] = ['loc' => '/', 'priority' => '1.0', 'changefreq' => 'daily'];
$urls[] = ['loc' => '/contact', 'priority' => '0.6'];
// Categories
foreach ($taxonRepo->findByChannel($channel) as $taxon) {
$urls[] = [
'loc' => '/taxons/' . $taxon->getSlug(),
'lastmod' => $taxon->getUpdatedAt()?->format('Y-m-d'),
'priority' => '0.8',
'changefreq' => 'weekly',
];
}
// Produits
foreach ($productRepo->findByChannel($channel) as $product) {
$urls[] = [
'loc' => '/products/' . $product->getSlug(),
'lastmod' => $product->getUpdatedAt()?->format('Y-m-d'),
'priority' => '0.7',
'changefreq' => 'weekly',
];
}
$response = new Response();
$response->headers->set('Content-Type', 'application/xml');
return $this->render('sitemap/sitemap.xml.twig', [
'urls' => $urls,
'baseUrl' => 'https://www.maboutique.fr',
], $response);
}
}
Pour les gros catalogues (10 000+ produits), utilisez un sitemap index avec plusieurs fichiers sitemap. Google accepte jusqu'a 50 000 URLs par fichier sitemap.
Donnees structurees (Schema.org)
Les donnees structurees permettent a Google d'afficher des rich snippets (etoiles, prix, disponibilite) dans les resultats de recherche. C'est un levier SEO majeur pour le e-commerce.
Schema Product
{# templates/bundles/SyliusShopBundle/Product/show.html.twig #}
Schema BreadcrumbList
Optimisation des images
Les images produits sont souvent le premier poste de poids sur une page e-commerce. Voici les optimisations essentielles :
- Format WebP : configurez LiipImagineBundle pour generer des images WebP automatiquement
- Lazy loading : ajoutez
loading="lazy"sur toutes les images sous la ligne de flottaison - Dimensions explicites : toujours specifier width et height pour eviter le CLS (Cumulative Layout Shift)
- Alt text : renseignez systematiquement l'attribut alt avec une description contenant le mot-cle du produit
- Srcset : proposez plusieurs tailles d'images pour s'adapter aux ecrans
# config/packages/liip_imagine.yaml
liip_imagine:
filter_sets:
product_thumbnail:
quality: 80
format: webp
filters:
thumbnail: { size: [400, 400], mode: outbound }
product_large:
quality: 85
format: webp
filters:
thumbnail: { size: [800, 800], mode: outbound }
Performance et Core Web Vitals
Google utilise les Core Web Vitals comme signal de classement. Les trois metriques cles :
- LCP (Largest Contentful Paint) : l'image ou le texte le plus grand doit s'afficher en moins de 2,5 secondes
- INP (Interaction to Next Paint) : les interactions doivent repondre en moins de 200ms
- CLS (Cumulative Layout Shift) : les elements ne doivent pas "sauter" pendant le chargement (score < 0.1)
Pour optimiser Sylius sur ces metriques, les leviers principaux sont :
- Varnish en reverse proxy pour servir les pages en cache (voir notre guide Varnish)
- Redis pour le cache applicatif (sessions, doctrine, metadata)
- CDN pour les assets statiques (images, CSS, JS)
- HTTP/2 ou HTTP/3 pour le multiplexage des requetes
- Preload des ressources critiques (fonts, CSS above-the-fold)
Strategie de contenu e-commerce
Le SEO technique seul ne suffit pas. Une strategie de contenu bien pensee est indispensable pour se positionner sur les requetes informationnelles qui generent du trafic qualifie.
Descriptions produits optimisees
- Minimum 300 mots par fiche produit pour les produits strategiques
- Integrer les mots-cles principaux dans le titre H1 et les 100 premiers mots
- Structurer avec des sous-titres H2/H3 pour les caracteristiques, les avantages, les cas d'usage
- Ajouter une section FAQ sur les produits les plus recherches
Pages categories enrichies
Les pages categories sont souvent des pages de listing sans texte. Ajoutez du contenu editorial au-dessus ou en dessous de la grille produits : introduction de la categorie, guide d'achat, criteres de choix.
Blog e-commerce
Un blog est le meilleur levier pour capturer le trafic informationnel. Exemples de contenus :
- Guides d'achat ("Comment choisir son...")
- Comparatifs ("X vs Y : lequel choisir ?")
- Tutoriels d'utilisation de vos produits
- Actualites de votre secteur
Maillage interne
Le maillage interne distribue le "jus SEO" entre vos pages. Quelques regles :
- Chaque produit doit etre accessible en 3 clics maximum depuis la page d'accueil
- Ajoutez des liens "Produits similaires" et "Les clients ont aussi achete" sur chaque fiche
- Liez vos articles de blog aux pages categories et produits concernes
- Utilisez un fil d'Ariane (breadcrumb) sur toutes les pages
Redirections 301
Quand vous supprimez ou renommez un produit, une redirection 301 est indispensable pour ne pas perdre le SEO acquis. Implementez un systeme de redirections dans Sylius :
// src/EventListener/SlugChangeRedirectListener.php
// Ecouter les changements de slug et creer automatiquement une redirection 301
public function onProductSlugChange(ProductEvent $event): void
{
$product = $event->getProduct();
$oldSlug = $event->getOldSlug();
$newSlug = $product->getSlug();
if ($oldSlug !== $newSlug) {
$redirect = new Redirect();
$redirect->setSource('/products/' . $oldSlug);
$redirect->setDestination('/products/' . $newSlug);
$redirect->setStatusCode(301);
$this->redirectRepository->save($redirect);
}
}
Conclusion
Le SEO sur Sylius demande du travail mais le framework offre une base technique saine. Les priorites par ordre d'impact : donnees structurees (rich snippets), sitemap XML, optimisation des images, Core Web Vitals, puis strategie de contenu. Chaque optimisation s'additionne pour construire une visibilite durable sur Google.
Vous voulez un audit SEO de votre boutique Sylius ? Contactez-moi pour un diagnostic complet et un plan d'action priorise. Decouvrez egalement mes services d'optimisation e-commerce.
