sdxc-seo

Generates canonical URLs, schema.org JSON-LD, and head metadata for Remix pages.

5|Updated Feb 2, 2026
One-click install
npx skills add https://github.com/sergiodxa/monorepo --skill sdxc-seo-sergiodxa
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: sdxc-seo
Source: https://github.com/sergiodxa/monorepo/tree/main/.agents/skills/sdxc-seo
Command: npx skills add https://github.com/sergiodxa/monorepo --skill sdxc-seo-sergiodxa

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @sdxc/seo, remix/ui.

What problem does it solve? Page head metadata is easy to get subtly wrong: canonical URLs must name one origin regardless of which host served the request, structured data must spell @context and @type exactly, and JSON-LD must not let page content close its own script tag. This Skill centralizes those rules in one createSeo() instance plus Seo, Seo.Meta, and Seo.JsonLd components. ## Core Features & Use Cases - Canonical URL resolution: seo.canonical() pins every page to the site's single origin, fixing preview deployments or custom domains that emit their own host in the canonical link. - Head metadata components: Seo.Meta renders Open Graph, Twitter card, and robots tags without restating the site name and description at every route. - Typed JSON-LD builders: schema builders for Organization, Article, BreadcrumbList, FAQPage, SoftwareApplication, and Book, with jsonLdString escaping every < so no value can close the script element. - Use Case: A Remix app deployed to preview URLs is emitting the preview host in its canonical tags; create one seo instance at module scope and call seo.canonical(request.url) per page to always emit the production origin. ## Quick Start Add @sdxc/seo as a workspace dependency, create one seo instance with createSeo at module scope, and render Seo.Meta and Seo.JsonLd in the page head.

Frequently Asked Questions about sdxc-seo

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I set canonical URLs in a Remix app?▼

Create one seo instance with createSeo({ baseUrl, siteName, defaultDescription }) at module scope, then call seo.canonical(request.url) per page and pass it to Seo.Meta. The canonical helper drops the trailing slash and hash while preserving the query string.

How do I add JSON-LD structured data to a page?▼

Build nodes with the typed schema builders (Organization, Article, BreadcrumbList, FAQPage, SoftwareApplication, Book) and render them with Seo.JsonLd. Outside remix/ui, call seo.jsonLdString() and pass it to dangerouslySetInnerHTML; it escapes every < so no value can close the script element.

Why does my preview deployment show the wrong canonical URL?▼

The preview host is being used as the request origin in the canonical link. createSeo pins all URLs to the configured baseUrl, so seo.canonical(request.url) always emits the site's one production origin regardless of which host served the request.

Does @sdxc/seo work outside Remix or Cloudflare Workers?▼

The URL helpers, schema builders, and jsonLdString are plain functions that run on any runtime. Only the Seo, Seo.Meta, and Seo.JsonLd components require remix/ui; elsewhere you render the tags yourself using the string outputs.

How do I keep a signed-in page out of search indexes?▼

Use the robotsTag output from createSeo to emit a per-page robots directive such as noindex through Seo.Meta. This handles exclusion per page rather than relying on robots.txt, which suits signed-in screens and thin filtered views.