You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: schema map endpoint for agent/crawler discovery (v0.7.0)
Adds a new public plugin route `schema/map` that enumerates every
published URL backed by schema markup, returning `{items: [{url,
collection, updatedAt}]}`. Site owners wire it to `/schemamap.xml`
at the site root via a small Astro endpoint (snippet in README).
Per-URL schema endpoints (`/schema/<slug>.json`) are deferred pending
an upstream helper to build PublicPageContext from a plugin route
(emdash-cms/emdash#527) — avoids reimplementing core's page builder
and the drift risk that would come with it.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
+
## [0.7.0] - 2026-04-13
9
+
10
+
### Added
11
+
12
+
-**Schema map (experimental).** New public plugin route `schema/map` returning the list of every published URL backed by schema markup (`{ items: [{ url, collection, updatedAt }] }`). Wire it to `/schemamap.xml` at your site root with the Astro snippet in the README so agents and crawlers can enumerate structured-data URLs without scraping HTML. Per-URL schema endpoints (`/schema/<slug>.json`) are deferred pending an upstream helper for building page contexts from plugin routes.
Copy file name to clipboardExpand all lines: README.md
+64Lines changed: 64 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,6 +27,7 @@ An SEO plugin for [EmDash CMS](https://github.com/emdash-cms/emdash) that genera
27
27
-**Breadcrumbs** — derived from the URL path by default, with segment label overrides (`/blog/` → "Blog") and per-`pageType` rule overrides both editable in the admin UI. `@id` scheme matches [joost.blog](https://joost.blog) via `@jdevalk/seo-graph-core`
28
28
-**hreflang alternates** — for multilingual EmDash sites (Astro `i18n` + `translation_group`), one `<link rel="alternate" hreflang="…">` per published sibling plus an automatic `x-default`, with BCP 47 tag normalization (`fr-ca` → `fr-CA`). Zero cost on single-locale sites
29
29
-**llms.txt***(experimental)* — exposes an index of published content at the plugin's `llms/txt` route, following the small-form [llms.txt spec](https://llmstxt.org). Enabled by default; flip the setting to disable. Only the plain `llms.txt` file is supported; the `llms-full.txt` variant is not implemented
30
+
-**Schema map***(experimental)* — exposes a list of every published URL backed by schema markup at the plugin's `schema/map` route, ready to be wired to a `/schemamap.xml` Astro endpoint for agent/crawler discovery
30
31
-**IndexNow** — on publish/unpublish transitions, submits the affected URL to [IndexNow](https://www.indexnow.org) so Bing, Yandex, Seznam, Naver, and Yep recrawl immediately. Opt-in via a single toggle in the settings UI; the key is generated and persisted automatically on first use
31
32
-**Admin settings UI** — auto-generated from `settingsSchema` for configuring Person/Organization identity, social profiles, title separator, and default description
32
33
@@ -186,6 +187,69 @@ Alternatively, import `buildLlmsTxt` from this plugin and assemble the
186
187
body yourself from `getEmDashCollection()` results if you want full
187
188
control over sectioning, ordering, or filtering.
188
189
190
+
## Schema map (experimental)
191
+
192
+
> **Experimental.** Shape and exposed API may change in a minor
193
+
> release. Per-URL schema endpoints (`/schema/<slug>.json`) are not
194
+
> implemented yet — they depend on a core helper being discussed
195
+
> upstream.
196
+
197
+
Every published page on an EmDash site carries a JSON-LD schema graph
198
+
in its `<head>`. Agents and crawlers that want to enumerate those pages
199
+
without scraping every HTML document need a *schema map* — the same
200
+
idea as `sitemap.xml`, but scoped to "URLs that have structured data."
201
+
202
+
The plugin exposes the raw list at `schema/map` as JSON:
Requires EmDash with support for running `page:metadata` hooks on public pages for anonymous visitors (fixed in [emdash-cms/emdash#119](https://github.com/emdash-cms/emdash/pull/119)).
0 commit comments