EmDash fournit des fonctionnalités d’optimisation pour les moteurs de recherche (SEO) pour les entrées de contenu, les en-têtes de page, les sitemaps, robots.txt et les redirections. La plupart fonctionnent dès qu’une collection a le SEO activé et que le site affiche <EmDashHead> dans les en-têtes de ses pages.
| Fonctionnalité | Sortie | Nécessite |
|---|---|---|
| Panneau SEO | Titre, description, image, URL canonique et no-index par entrée | SEO activé sur la collection |
| Métadonnées de l’en-tête | Balises de description, robots, canonical, Open Graph et Twitter Card | <EmDashHead> dans l’en-tête de la page |
| Données structurées | JSON-LD BlogPosting ou WebSite | <EmDashHead> dans l’en-tête de la page |
| Sitemaps | /sitemap.xml et /sitemap-{collection}.xml | SEO activé sur la collection |
robots.txt | /robots.txt avec une référence au sitemap | Rien |
| Paramètres globaux du site | Balises de vérification, image sociale par défaut, séparateur de titre | Valeurs dans Settings > SEO |
| Traductions | Liens hreflang dans l’en-tête et dans le sitemap | Astro i18n configuré |
| Redirections et journal des 404 | Règles de redirection et de « gone », un journal des URL introuvables | Rien |
Activer le SEO sur une collection
Activez SEO pour une collection dans Content Types dans l’admin EmDash. Dans un fichier seed, ajoutez "seo" au tableau supports de la collection :
{
"version": "1",
"collections": [
{
"slug": "posts",
"label": "Posts",
"urlPattern": "/posts/{slug}",
"supports": ["drafts", "revisions", "seo"],
"fields": [{ "slug": "title", "label": "Title", "type": "string", "required": true }]
}
]
}
Avec le SEO activé, l’éditeur d’une entrée enregistrée affiche un panneau SEO, et la collection apparaît dans le sitemap. Les collections dont Routable est désactivé restent hors du sitemap.
Modifier les champs SEO de chaque entrée
Le panneau SEO de l’éditeur d’entrée contient ces champs :
- OG Image est l’image d’aperçu social (
og:image) et l’image indiquée pour l’entrée dans le sitemap. - SEO Title remplace le titre de l’entrée dans les aperçus sociaux et les données structurées, ainsi que dans
<title>lorsque la page affiche le titre à partir degetSeoMeta(). - Meta Description est le résumé affiché sous le titre dans les résultats de recherche. Le panneau compte les caractères par rapport à une recommandation de 160 caractères.
- Canonical URL indique aux moteurs de recherche la version originale d’une page dupliquée à partir d’une autre URL.
- Hide from search engines ajoute
noindex, nofollowà la page et retire l’entrée du sitemap et des alternativeshreflang.
Les champs vides se rabattent sur les valeurs que la page transmet à createPublicPageContext(). getSeoMeta() se rabat sur les champs title et excerpt de l’entrée.
Afficher les métadonnées SEO sur une page de contenu
<EmDashHead> affiche les métadonnées SEO d’un contexte de page. Sur une page de contenu, transmettez la collection et l’ID de base de données de l’entrée comme content, afin que <EmDashHead> applique les valeurs du panneau SEO de l’entrée.
L’exemple suivant affiche l’en-tête d’une page d’article. getSeoMeta() détermine le <title> et l’URL canonique, et <EmDashHead> affiche les autres balises :
---
import { decodeSlug, getEmDashEntry, getSeoMeta, getSiteSettings } from "emdash";
import { createPublicPageContext } from "emdash/page";
import { EmDashHead } from "emdash/ui";
const slug = decodeSlug(Astro.params.slug);
if (!slug) return Astro.rewrite("/404");
const { entry: post } = await getEmDashEntry("posts", slug);
if (!post) return Astro.rewrite("/404");
const settings = await getSiteSettings();
const seo = getSeoMeta(post, {
siteTitle: settings.title,
siteUrl: settings.url || Astro.url.origin,
titleSeparator: settings.seo?.titleSeparator,
path: Astro.url.pathname,
});
const page = createPublicPageContext({
Astro,
kind: "content",
title: seo.title,
pageTitle: seo.ogTitle,
description: seo.description,
canonical: seo.canonical,
siteName: settings.title,
content: { collection: "posts", id: post.data.id, slug: post.data.slug },
});
---
<html lang="en">
<head>
<meta charset="utf-8" />
<title>{seo.title}</title>
<EmDashHead page={page} />
</head>
<body>
<h1>{post.data.title}</h1>
</body>
</html>
<EmDashHead> affiche ces balises :
- La méta description.
- Une directive robots lorsque l’entrée est masquée aux moteurs de recherche.
- Un lien canonical et
og:urllorsque le contexte de page ou l’entrée définit une URL canonique. - Les balises Open Graph (
og:type,og:title,og:description,og:image,og:site_name) et les balises Twitter Card. Lorsqu’une page n’a pas d’image,og:imageutilise l’image sociale par défaut des paramètres du site. article:published_time,article:modified_timeetarticle:authorlorsque le contexte de page inclutarticleMeta.
<EmDashHead> n’affiche pas l’élément <title>. Affichez-le dans la page ou la mise en page, comme le fait l’exemple.
Pour les pages qui ne sont pas des entrées de contenu, utilisez kind: "custom". Paramètres du site présente une mise en page qui construit un contexte de page personnalisé à partir des paramètres du site.
Les plugins peuvent ajouter ou remplacer des balises d’en-tête via le hook page:metadata. Pour une même balise, la valeur d’un plugin l’emporte sur les paramètres du site, qui l’emportent sur les valeurs générées à partir du contexte de page.
Données structurées
<EmDashHead> ajoute un script JSON-LD à une page lorsque le contexte de page contient les données nécessaires :
- Une page d’article avec une URL canonique obtient un graphe
BlogPostingavec le titre, la description, l’image, les dates de publication et de modification, l’auteur et l’éditeur fournis par le contexte de page.kind: "content"définitpageTypesur"article", sauf si le contexte de page définit un autre type. - Une page de tout autre type obtient un graphe
WebSiteavec le nom et l’URL du site lorsque le contexte de page inclutsiteName.
Le JSON-LD utilise les mêmes titre, description et image que les balises Open Graph, y compris les valeurs du panneau SEO de l’éditeur. Les plugins peuvent le remplacer via le hook page:metadata.
Sitemaps
EmDash sert un index de sitemaps à /sitemap.xml. Il référence un sitemap enfant à /sitemap-{collection}.xml pour chaque collection ayant au moins une entrée listée.
Le sitemap d’une collection liste les entrées publiées, non supprimées, qui ont un slug et ne sont pas masquées aux moteurs de recherche. Il construit chaque URL à partir du modèle d’URL de la collection, ou de /{collection}/{slug} lorsque la collection n’en a pas, et liste l’image SEO de l’entrée avec l’extension de sitemap d’images de Google.
Chaque sitemap enfant contient jusqu’à 2 000 entrées, triées par ID d’entrée afin que la modification d’une entrée ne la déplace pas vers une autre page. Les collections plus volumineuses se poursuivent à /sitemap-{collection}-2.xml, /sitemap-{collection}-3.xml, et ainsi de suite. L’index liste chaque page avec la date de l’entrée la plus récemment mise à jour de cette page.
Ajoutez l’URL du sitemap à Google Search Console ou à Bing Webmaster Tools pour y voir son état d’indexation.
robots.txt
EmDash sert /robots.txt. Par défaut, il autorise tous les robots d’exploration, interdit /_emdash/ et référence le sitemap :
User-agent: *
Allow: /
# Disallow admin and API routes
Disallow: /_emdash/
Sitemap: https://example.com/sitemap.xml
Pour remplacer la valeur par défaut, saisissez un contenu personnalisé dans Settings > SEO > robots.txt. EmDash ajoute la ligne Sitemap: lorsque le contenu personnalisé n’en contient pas.
robots.txt et les sitemaps construisent des URL absolues à partir de la Site URL dans Settings > General, puis de l’option siteUrl ou de la variable d’environnement EMDASH_SITE_URL, puis de l’origine de la requête. Définissez l’une d’elles pour que les URL correspondent au domaine public. Les navigateurs et les caches partagés peuvent conserver robots.txt jusqu’à un jour et les sitemaps jusqu’à une heure.
Paramètres SEO globaux du site
Settings > SEO dans l’admin EmDash contient ces valeurs :
- Title Separator est le texte placé entre le titre de la page et le nom du site. Il prend effet lorsque la page transmet
settings.seo.titleSeparatoràgetSeoMeta()en tant quetitleSeparator, comme le fait l’exemple de page de contenu. - Default Social Image est l’
og:imagedes pages sans image propre.<EmDashHead>l’applique. - Google Verification et Bing Verification ajoutent les balises meta
google-site-verificationetmsvalidate.01, qui prouvent la propriété du site auprès de Google Search Console et de Bing Webmaster Tools.<EmDashHead>les ajoute à chaque page. - robots.txt remplace le
robots.txtpar défaut.
Contenu traduit
Lorsque Astro i18n est configuré, EmDash relie les traductions d’une entrée pour les moteurs de recherche :
<EmDashHead>ajoute un<link rel="alternate" hreflang="...">pour chaque traduction publiée et un lienx-default. Voir Ajouter des lienshreflangà l’en-tête de la page.- Le sitemap de chaque collection liste chaque traduction comme sa propre URL avec des alternatives
xhtml:link. Voir Sitemaps dans le guide d’internationalisation.
Redirections et journal des 404
Gérez les règles dans Redirects dans l’admin EmDash. Une règle redirige soit un chemin source vers une destination avec le statut 301, 302, 307 ou 308, soit y répond par 410 Gone ou 451 Unavailable For Legal Reasons. Les chemins source acceptent des segments nommés (/old/[slug]) et des segments fourre-tout (/old-blog/[...path]), que la destination peut réutiliser.
Lorsque le slug d’une entrée publiée change, EmDash crée une redirection 301 de l’ancienne URL vers la nouvelle, d’après le modèle d’URL de la collection. Il réduit les chaînes de redirection existantes qui pointaient vers l’ancienne URL. Il ne crée aucune redirection tant qu’une autre entrée, comme une traduction, utilise encore l’ancien slug.
EmDash journalise les requêtes qui se terminent par une réponse 404. L’onglet 404 Errors de la page Redirects affiche les chemins les plus souvent introuvables. Pour chacun, vous pouvez ajouter une redirection ou le marquer comme disparu (410), ce qui indique aux moteurs de recherche que la page a été supprimée. Le journal conserve jusqu’à 10 000 chemins et supprime ceux qui n’ont pas été vus depuis le plus longtemps.
Les fichiers seed peuvent aussi définir des redirections. Voir Redirects dans la référence des fichiers seed.
Données SEO importées
L’import WordPress via l’EmDash Exporter peut copier les titres et descriptions SEO de Yoast et Rank Math dans les champs SEO Title et SEO Description de la collection cible. Ce sont des champs de contenu ordinaires, distincts du panneau SEO ; le modèle de page doit donc les afficher.
Un transfert de site copie les valeurs du panneau SEO, les paramètres SEO et les redirections vers un autre site EmDash. Le site cible conserve sa propre URL de site, qu’utilisent ses sitemaps et son robots.txt.