| name | seo-structured-data |
| description | Add or update SEO metadata, Open Graph/Twitter tags, schema.org JSON-LD, canonical URLs, RSS, or sitemap entries for this site. Use when the user mentions SEO, structured data, JSON-LD, og:image, meta tags, robots, sitemap, RSS feed, or a new page/route that needs to be discoverable. |
SEO & Structured Data
SITE_URL is hardcoded as https://www.orafaelferreira.com in multiple places (src/components/SEO/JsonLd.tsx, src/hooks/use-article-meta-tags.ts, scripts/generate-rss.mjs, scripts/generate-sitemap.mjs) — there is no single shared constant, so a domain change means grepping for that string across all four.
JSON-LD (src/components/SEO/JsonLd.tsx)
Exports a JsonLd component (renders <script type="application/ld+json"> via react-helmet-async) plus reusable schema builder functions (personSchema() and others in that file) returning schema.org objects with stable @ids. Reuse an existing builder before writing a new inline schema object — check this file first for what's already modeled (Person, and whatever else is defined there) before adding e.g. Article/BreadcrumbList schema.
Per-article meta tags (src/hooks/use-article-meta-tags.ts)
useArticleMetaTags(article) runs in a useEffect and injects/updates OG, Twitter Card, article:*, and canonical <link> tags directly into document.head — client-side, not via react-helmet-async like JsonLd. It's gated on article.image being set: if image is missing, the entire OG/Twitter/description block is skipped (only the canonical link still gets set). See the skill for the article metadata requirement this implies.