Fonctionnalités SEO intégrées

Sur cette page

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éSortieNécessite
Panneau SEOTitre, description, image, URL canonique et no-index par entréeSEO activé sur la collection
Métadonnées de l’en-têteBalises de description, robots, canonical, Open Graph et Twitter Card<EmDashHead> dans l’en-tête de la page
Données structuréesJSON-LD BlogPosting ou WebSite<EmDashHead> dans l’en-tête de la page
Sitemaps/sitemap.xml et /sitemap-{collection}.xmlSEO activé sur la collection
robots.txt/robots.txt avec une référence au sitemapRien
Paramètres globaux du siteBalises de vérification, image sociale par défaut, séparateur de titreValeurs dans Settings > SEO
TraductionsLiens hreflang dans l’en-tête et dans le sitemapAstro i18n configuré
Redirections et journal des 404Règles de redirection et de « gone », un journal des URL introuvablesRien

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 de getSeoMeta().
  • 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 alternatives hreflang.

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:url lorsque 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:image utilise l’image sociale par défaut des paramètres du site.
  • article:published_time, article:modified_time et article:author lorsque le contexte de page inclut articleMeta.

<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 BlogPosting avec 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éfinit pageType sur "article", sauf si le contexte de page définit un autre type.
  • Une page de tout autre type obtient un graphe WebSite avec le nom et l’URL du site lorsque le contexte de page inclut siteName.

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 que titleSeparator, comme le fait l’exemple de page de contenu.
  • Default Social Image est l’og:image des pages sans image propre. <EmDashHead> l’applique.
  • Google Verification et Bing Verification ajoutent les balises meta google-site-verification et msvalidate.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.txt par 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 lien x-default. Voir Ajouter des liens hreflang à 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.