BaliseTonSite

Automatisation SEO Sémantique

Génère des schémas JSON-LD (Schema.org) et des balises Meta dynamiques par analyse de contenu - l'IA lit ton article et forge les runes d'indexation.

7.1Les runes d'indexation

Google utilise les données structurées pour afficher des rich snippets dans les résultats : étoiles de notation, breadcrumb, aperçu d'article, FAQ déroulante… Chaque format de rich snippet correspond à un schéma Schema.org différent.

Schémas les plus utiles

  • Article - articles de blog
  • BreadcrumbList - fil d'Ariane
  • FAQPage - questions/réponses
  • Course - cours en ligne
  • Person - page auteur
  • WebSite - moteur de recherche interne

Bénéfices concrets

  • • +20-30% de CTR sur les rich snippets
  • • Meilleure compréhension du contenu par Google
  • • Éligibilité aux fonctionnalités SERP avancées
  • • Boost pour les requêtes vocales et IA

7.2Générer le JSON-LD pour un article

Prompt : JSON-LD Article depuis un post WordPressmarkdown
Tu es un expert en SEO et données structurées Schema.org.

Génère une fonction TypeScript "generateArticleJsonLd(post: WpPost)" qui retourne un objet JSON-LD pour le type Article de Schema.org.

Inclure :
- @context, @type : Article
- headline (titre décodé HTML)
- description (extrait nettoyé du HTML)  
- author (name, url vers /auteurs/[slug])
- datePublished, dateModified (ISO 8601)
- image (URL image à la une)
- url (URL canonique)
- publisher (nom du site, logo depuis les constantes de site)

Base URL : process.env.NEXT_PUBLIC_SITE_URL
La fonction doit retourner null si les données requises sont manquantes.
Résultat généré : lib/seo/article-jsonld.tstypescript
import type { WpPost } from '@/lib/types/schemas/post.schema';

const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? '';
const SITE_NAME = 'BaliseTonSite';
const LOGO_URL = `${SITE_URL}/logo.png`;

function stripHtml(html: string): string {
    return html.replace(/<[^>]*>/g, '').trim();
}

export function generateArticleJsonLd(post: WpPost): Record<string, unknown> | null {
    const author = post._embedded?.author?.[0];
    const image = post._embedded?.['wp:featuredmedia']?.[0]?.source_url;

    if (!author) return null;

    return {
        '@context': 'https://schema.org',
        '@type': 'Article',
        headline: stripHtml(post.title.rendered),
        description: stripHtml(post.excerpt.rendered).slice(0, 160),
        author: {
            '@type': 'Person',
            name: author.name,
            url: `${SITE_URL}/auteurs/${author.slug ?? ''}`,
        },
        datePublished: post.date,
        dateModified: post.modified ?? post.date,
        image: image ? { '@type': 'ImageObject', url: image } : undefined,
        url: `${SITE_URL}/${post.slug}`,
        publisher: {
            '@type': 'Organization',
            name: SITE_NAME,
            logo: { '@type': 'ImageObject', url: LOGO_URL },
        },
        mainEntityOfPage: { '@type': 'WebPage', '@id': `${SITE_URL}/${post.slug}` },
    };
}

7.3Injecter le JSON-LD dans Next.js

app/[slug]/page.tsx - Injection JSON-LDtsx
import { generateArticleJsonLd } from '@/lib/seo/article-jsonld';

export default async function ArticlePage({ params }: { params: Promise<{ slug: string }> }) {
    const { slug } = await params;
    const post = await fetchPost(slug);
    const jsonLd = generateArticleJsonLd(post);

    return (
        <>
            {jsonLd && (
                <script
                    type="application/ld+json"
                    dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
                />
            )}
            <article>{/* contenu */}</article>
        </>
    );
}

7.4generateMetadata dynamique depuis le contenu

app/[slug]/page.tsx - generateMetadata assistée IAtypescript
export async function generateMetadata({ params }: Props): Promise<Metadata> {
    const { slug } = await params;
    const post = await fetchPost(slug);
    
    const title = stripHtml(post.title.rendered);
    const description = stripHtml(post.excerpt.rendered).slice(0, 155);
    const image = post._embedded?.['wp:featuredmedia']?.[0]?.source_url;

    return {
        title: `${title} - BaliseTonSite`,
        description,
        openGraph: {
            title,
            description,
            type: 'article',
            publishedTime: post.date,
            authors: [post._embedded?.author?.[0]?.name ?? ''],
            images: image ? [{ url: image, width: 1200, height: 630 }] : [],
        },
        twitter: {
            card: 'summary_large_image',
            title,
            description,
            images: image ? [image] : [],
        },
        alternates: {
            canonical: `${process.env.NEXT_PUBLIC_SITE_URL}/${slug}`,
        },
    };
}

Le prompt "génère tous mes schémas"

Demande à l'IA de générer une batterie complète : JSON-LD Article, BreadcrumbList, WebSite, Person - en une seule demande, en lui donnant la liste de tes pages et leur type de contenu.

Verifie tes acquis

5 questions pour valider ce chapitre

1. Comment l'IA aide-t-elle le SEO technique ?

Valide et sauvegarde ce chapitre

Ne perds pas le fil de ton apprentissage. Chaque QCM terminé sauvegarde ton score. Crée ton profil gratuitement pour débloquer toutes les évaluations du site et retrouver tes résultats plus tard.

Commencer l'aventure
Déjà membre ?Connecte-toi