@jdevalk/astro-seo-graph 1.1.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -0
- package/dist/components/Seo.astro +17 -0
- package/dist/components/seo-context.d.ts +8 -0
- package/dist/components/seo-context.d.ts.map +1 -1
- package/dist/components/seo-context.js +3 -0
- package/dist/components/seo-context.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integration.d.ts +14 -0
- package/dist/integration.d.ts.map +1 -1
- package/dist/integration.js +15 -2
- package/dist/integration.js.map +1 -1
- package/dist/markdown-alternate.d.ts +69 -0
- package/dist/markdown-alternate.d.ts.map +1 -0
- package/dist/markdown-alternate.js +125 -0
- package/dist/markdown-alternate.js.map +1 -0
- package/dist/markdown-routes.d.ts +62 -0
- package/dist/markdown-routes.d.ts.map +1 -0
- package/dist/markdown-routes.js +75 -0
- package/dist/markdown-routes.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -30,6 +30,8 @@ schema.org best practices — see [AGENTS.md](https://github.com/jdevalk/seo-gra
|
|
|
30
30
|
| **`breadcrumbsFromUrl`** | Derives a breadcrumb trail from an Astro URL. Splits path segments, supports custom display names and segment skipping. Returns `BreadcrumbItem[]` ready to pass to `buildBreadcrumbList`. |
|
|
31
31
|
| **`<FuzzyRedirect>`** | Drop-in 404 component. Fetches your sitemap, fuzzy-matches the current URL against known paths, and suggests or auto-redirects to the closest match. |
|
|
32
32
|
| **`createIndexNowKeyRoute`** | Factory returning an `APIRoute` that serves the IndexNow key-verification file at `/<key>.txt`. Pair with the `indexNow` option on the integration to auto-submit built URLs on `astro:build:done`. |
|
|
33
|
+
| **`createMarkdownEndpoint`** | Factory returning an `APIRoute` that serves a clean markdown version of a content-collection entry (frontmatter + body + token count). Pair with the auto-emitted `<link rel="alternate" type="text/markdown">` on `<Seo>` for AI-agent discovery. |
|
|
34
|
+
| **`renderMarkdownAlternate`** | Pure renderer behind the endpoint. Importable from non-Astro code for the same markdown output. |
|
|
33
35
|
|
|
34
36
|
## Installation
|
|
35
37
|
|
|
@@ -299,6 +301,96 @@ export const GET = createSchemaEndpoint({
|
|
|
299
301
|
});
|
|
300
302
|
```
|
|
301
303
|
|
|
304
|
+
## Markdown alternate
|
|
305
|
+
|
|
306
|
+
Serve a markdown version of every page at a parallel `.md` URL so AI agents (Claude, ChatGPT, Perplexity, Cloudflare's AI crawlers) can consume your content without HTML parsing. `<Seo>` auto-emits `<link rel="alternate" type="text/markdown" href="…">` on every page so agents discover it.
|
|
307
|
+
|
|
308
|
+
### 1. Create the endpoint
|
|
309
|
+
|
|
310
|
+
```ts
|
|
311
|
+
// src/pages/blog/[...slug].md.ts
|
|
312
|
+
import { getCollection } from 'astro:content';
|
|
313
|
+
import { createMarkdownEndpoint } from '@jdevalk/astro-seo-graph';
|
|
314
|
+
|
|
315
|
+
export const getStaticPaths = async () => {
|
|
316
|
+
const posts = await getCollection('blog');
|
|
317
|
+
return posts.map((p) => ({ params: { slug: p.id } }));
|
|
318
|
+
};
|
|
319
|
+
|
|
320
|
+
export const GET = createMarkdownEndpoint({
|
|
321
|
+
entries: () => getCollection('blog'),
|
|
322
|
+
mapper: (post, slug) =>
|
|
323
|
+
post.id !== slug
|
|
324
|
+
? null
|
|
325
|
+
: {
|
|
326
|
+
frontmatter: {
|
|
327
|
+
title: post.data.title,
|
|
328
|
+
canonical: `https://example.com/blog/${post.id}/`,
|
|
329
|
+
pubDate: post.data.publishDate,
|
|
330
|
+
author: post.data.author,
|
|
331
|
+
description: post.data.excerpt,
|
|
332
|
+
tags: post.data.tags,
|
|
333
|
+
},
|
|
334
|
+
body: post.body ?? '',
|
|
335
|
+
},
|
|
336
|
+
});
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
Response headers:
|
|
340
|
+
|
|
341
|
+
- `Content-Type: text/markdown; charset=utf-8`
|
|
342
|
+
- `Cache-Control: max-age=300`
|
|
343
|
+
- `X-Robots-Tag: noindex, follow` — the `.md` is a representation, not a separately indexable page.
|
|
344
|
+
- `X-Markdown-Tokens: <n>` — rough estimate (`chars/4`); swap in a real tokenizer via `estimateTokens` for accuracy.
|
|
345
|
+
- `Link: <canonical>; rel="canonical"` — points crawlers at the HTML.
|
|
346
|
+
|
|
347
|
+
### 2. Discovery link (opt-in)
|
|
348
|
+
|
|
349
|
+
Once the endpoint is in place, enable the discovery link on the integration:
|
|
350
|
+
|
|
351
|
+
```ts
|
|
352
|
+
// astro.config.mjs
|
|
353
|
+
seoGraph({ markdownAlternate: true });
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
`<Seo>` then emits `<link rel="alternate" type="text/markdown" href="…">` on every page, with `href` derived from the canonical URL (e.g. `/blog/post/` → `/blog/post.md`). Default is `false` — enable it only after the endpoint is live, or the link will 404.
|
|
357
|
+
|
|
358
|
+
### 3. `Accept: text/markdown` content negotiation (Cloudflare)
|
|
359
|
+
|
|
360
|
+
Static sites can still honour `Accept: text/markdown` by adding a **Cloudflare Transform Rule** — no SSR, no middleware, dashboard-configured.
|
|
361
|
+
|
|
362
|
+
**Rewrite URL rule:**
|
|
363
|
+
|
|
364
|
+
```
|
|
365
|
+
When incoming requests match:
|
|
366
|
+
(any(lower(http.request.headers["accept"][*]) contains "text/markdown"))
|
|
367
|
+
and (not http.request.uri.path matches "\\.[a-z0-9]+$")
|
|
368
|
+
|
|
369
|
+
Then rewrite:
|
|
370
|
+
URI path → regex_replace(http.request.uri.path, "/?$", ".md")
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**Response Header Modification rule (on HTML responses):**
|
|
374
|
+
|
|
375
|
+
```
|
|
376
|
+
Set static: Vary: Accept
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Without `Vary: Accept`, CF's cache will serve whichever variant it saw first to every subsequent visitor. With it, HTML and markdown are cached as separate variants of the same URL.
|
|
380
|
+
|
|
381
|
+
### Using the renderer directly
|
|
382
|
+
|
|
383
|
+
`renderMarkdownAlternate` is a pure function — importable from non-Astro code (build scripts, EmDash plugins) for the same frontmatter + body + token-count output:
|
|
384
|
+
|
|
385
|
+
```ts
|
|
386
|
+
import { renderMarkdownAlternate } from '@jdevalk/astro-seo-graph';
|
|
387
|
+
|
|
388
|
+
const { markdown, tokenCount, canonicalHref } = renderMarkdownAlternate({
|
|
389
|
+
frontmatter: { title: 'Hello', canonical: 'https://example.com/hello/' },
|
|
390
|
+
body: '# Hello\n\nWorld.',
|
|
391
|
+
});
|
|
392
|
+
```
|
|
393
|
+
|
|
302
394
|
## Schema map discovery
|
|
303
395
|
|
|
304
396
|
```ts
|
|
@@ -26,6 +26,17 @@ import type { SeoProps } from './seo-props.js';
|
|
|
26
26
|
const props = Astro.props as SeoProps;
|
|
27
27
|
const ctx = buildSeoContext(props, Astro.url.href);
|
|
28
28
|
|
|
29
|
+
// Auto-emitted <link rel="alternate" type="text/markdown"> is OFF by
|
|
30
|
+
// default — enable it via `seoGraph({ markdownAlternate: true })` in
|
|
31
|
+
// astro.config once you've wired up `createMarkdownEndpoint`. The flag
|
|
32
|
+
// travels through a Vite `define` that replaces this sentinel at build
|
|
33
|
+
// time. `typeof` keeps this safe when the integration isn't installed
|
|
34
|
+
// — the identifier stays a free variable and `typeof` yields
|
|
35
|
+
// `'undefined'` without throwing.
|
|
36
|
+
declare const __JDV_SEO_GRAPH_MD_ALT__: boolean | undefined;
|
|
37
|
+
const mdAltEnabled =
|
|
38
|
+
typeof __JDV_SEO_GRAPH_MD_ALT__ !== 'undefined' ? __JDV_SEO_GRAPH_MD_ALT__ : false;
|
|
39
|
+
|
|
29
40
|
function robotsContent(r: typeof ctx.robots): string {
|
|
30
41
|
const parts: string[] = [];
|
|
31
42
|
parts.push(r.noindex ? 'noindex' : 'index');
|
|
@@ -117,6 +128,12 @@ function robotsContent(r: typeof ctx.robots): string {
|
|
|
117
128
|
|
|
118
129
|
{ctx.hreflangs.map((entry) => <link rel="alternate" hreflang={entry.hreflang} href={entry.href} />)}
|
|
119
130
|
|
|
131
|
+
{
|
|
132
|
+
mdAltEnabled && ctx.markdownAlternateHref && (
|
|
133
|
+
<link rel="alternate" type="text/markdown" href={ctx.markdownAlternateHref} />
|
|
134
|
+
)
|
|
135
|
+
}
|
|
136
|
+
|
|
120
137
|
{ctx.authorName && <meta name="author" content={ctx.authorName} />}
|
|
121
138
|
|
|
122
139
|
{ctx.extraLinks.map((entry) => <link {...entry} />)}
|
|
@@ -79,6 +79,14 @@ export interface SeoContext {
|
|
|
79
79
|
hreflangs: readonly AlternateLink[];
|
|
80
80
|
/** Resolved author name for `<meta name="author">`. */
|
|
81
81
|
authorName?: string;
|
|
82
|
+
/**
|
|
83
|
+
* Derived href for the auto-emitted `<link rel="alternate"
|
|
84
|
+
* type="text/markdown">`. Empty string when no canonical is available
|
|
85
|
+
* or when canonical can't be parsed — callers must not emit a link in
|
|
86
|
+
* that case. The build-time disable flag is checked in the template,
|
|
87
|
+
* not here (pure TS can't see the Vite define).
|
|
88
|
+
*/
|
|
89
|
+
markdownAlternateHref: string;
|
|
82
90
|
/** Passthrough extras. Empty arrays when not provided. */
|
|
83
91
|
extraLinks: ReadonlyArray<Record<string, string>>;
|
|
84
92
|
extraMeta: ReadonlyArray<Record<string, string>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo-context.d.ts","sourceRoot":"","sources":["../../src/components/seo-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"seo-context.d.ts","sourceRoot":"","sources":["../../src/components/seo-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,aAAa,kEAAkE,CAAC;AAE7F;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACvB,kEAAkE;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE;QACJ,OAAO,EAAE,OAAO,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,sEAAsE;QACtE,MAAM,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,EAAE,EAAE;QACA,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE;YACN,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE,MAAM,CAAC;SACtB,CAAC;KACL,CAAC;IACF,gFAAgF;IAChF,OAAO,CAAC,EAAE;QACN,IAAI,EAAE,SAAS,GAAG,qBAAqB,GAAG,KAAK,GAAG,QAAQ,CAAC;QAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;;;OAIG;IACH,SAAS,EAAE,SAAS,aAAa,EAAE,CAAC;IACpC,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAC9B,0DAA0D;IAC1D,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjD,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAsI5E"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* Astro's renderer.
|
|
7
7
|
*/
|
|
8
8
|
import { buildAlternateLinks } from '../alternates.js';
|
|
9
|
+
import { deriveMdUrl } from '../markdown-alternate.js';
|
|
9
10
|
/**
|
|
10
11
|
* Opted-in robots directives for maximum snippet and preview sizes in
|
|
11
12
|
* search results. Appended after any `noindex`/`nofollow` prefix.
|
|
@@ -162,6 +163,7 @@ export function buildSeoContext(props, pageUrl) {
|
|
|
162
163
|
}
|
|
163
164
|
const hreflangs = props.alternates !== undefined ? buildAlternateLinks(props.alternates) : [];
|
|
164
165
|
const authorName = props.author ?? props.article?.authors?.[0];
|
|
166
|
+
const markdownAlternateHref = deriveMdUrl(canonical ?? ogUrl);
|
|
165
167
|
const ctx = {
|
|
166
168
|
title: fullTitle,
|
|
167
169
|
robots: {
|
|
@@ -171,6 +173,7 @@ export function buildSeoContext(props, pageUrl) {
|
|
|
171
173
|
},
|
|
172
174
|
og,
|
|
173
175
|
hreflangs,
|
|
176
|
+
markdownAlternateHref,
|
|
174
177
|
extraLinks: props.extraLinks ?? [],
|
|
175
178
|
extraMeta: props.extraMeta ?? [],
|
|
176
179
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seo-context.js","sourceRoot":"","sources":["../../src/components/seo-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAsB,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"seo-context.js","sourceRoot":"","sources":["../../src/components/seo-context.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,4 +14,8 @@ export { createIndexNowKeyRoute, submitToIndexNow, validateIndexNowKey } from '.
|
|
|
14
14
|
export type { IndexNowKeyRouteOptions, IndexNowSubmitResult } from './indexnow.js';
|
|
15
15
|
export { renderLlmsTxt } from './llms-txt.js';
|
|
16
16
|
export type { LlmsTxtInput, LlmsTxtSection, LlmsTxtLink } from './llms-txt.js';
|
|
17
|
+
export { renderMarkdownAlternate, deriveMdUrl } from './markdown-alternate.js';
|
|
18
|
+
export type { MarkdownAlternateFrontmatter, RenderMarkdownAlternateOptions, RenderedMarkdownAlternate, } from './markdown-alternate.js';
|
|
19
|
+
export { createMarkdownEndpoint } from './markdown-routes.js';
|
|
20
|
+
export type { MarkdownEndpointOptions } from './markdown-routes.js';
|
|
17
21
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE9D,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7E,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC9F,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAE9D,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC7E,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC9F,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC/E,YAAY,EACR,4BAA4B,EAC5B,8BAA8B,EAC9B,yBAAyB,GAC5B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,4 +11,6 @@ export { buildAlternateLinks } from './alternates.js';
|
|
|
11
11
|
export { breadcrumbsFromUrl } from './breadcrumbs.js';
|
|
12
12
|
export { createIndexNowKeyRoute, submitToIndexNow, validateIndexNowKey } from './indexnow.js';
|
|
13
13
|
export { renderLlmsTxt } from './llms-txt.js';
|
|
14
|
+
export { renderMarkdownAlternate, deriveMdUrl } from './markdown-alternate.js';
|
|
15
|
+
export { createMarkdownEndpoint } from './markdown-routes.js';
|
|
14
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,wEAAwE;AACxE,8EAA8E;AAC9E,sDAAsD;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,wEAAwE;AACxE,8EAA8E;AAC9E,sDAAsD;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAG9F,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAO/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/integration.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ interface ConfigSetupHook {
|
|
|
21
21
|
destination: string;
|
|
22
22
|
} | undefined>;
|
|
23
23
|
};
|
|
24
|
+
updateConfig: (patch: Record<string, any>) => void;
|
|
24
25
|
}
|
|
25
26
|
interface AstroIntegrationLike {
|
|
26
27
|
name: string;
|
|
@@ -240,6 +241,19 @@ export interface SeoGraphIntegrationOptions {
|
|
|
240
241
|
* to disable.
|
|
241
242
|
*/
|
|
242
243
|
llmsTxt?: LlmsTxtIntegrationOptions;
|
|
244
|
+
/**
|
|
245
|
+
* Auto-emit `<link rel="alternate" type="text/markdown">` from `<Seo>`
|
|
246
|
+
* on every page, with `href` derived from the canonical URL (e.g.
|
|
247
|
+
* `/blog/post/` → `/blog/post.md`). Pair with `createMarkdownEndpoint`
|
|
248
|
+
* to actually serve the markdown — this flag only controls the
|
|
249
|
+
* discovery link, not whether the endpoint exists.
|
|
250
|
+
*
|
|
251
|
+
* Default: `false`. Enable explicitly once you've added
|
|
252
|
+
* `createMarkdownEndpoint` at the matching path — otherwise the link
|
|
253
|
+
* will point at a 404. Implemented via a Vite `define` that replaces
|
|
254
|
+
* a sentinel token in the compiled `<Seo>` component at build time.
|
|
255
|
+
*/
|
|
256
|
+
markdownAlternate?: boolean;
|
|
243
257
|
}
|
|
244
258
|
/**
|
|
245
259
|
* Turn a built HTML file path (relative to the outDir, e.g.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAKnE,UAAU,aAAa;IACnB,GAAG,EAAE,GAAG,CAAC;IAET,MAAM,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC5F;AAED;;;;GAIG;AACH,UAAU,eAAe;IACrB,MAAM,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;QACpB,aAAa,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;QAC9C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC,CAAC;KAC7F,CAAC;
|
|
1
|
+
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"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"}
|
package/dist/integration.js
CHANGED
|
@@ -356,7 +356,7 @@ async function collectBuildFiles(dir, base = dir) {
|
|
|
356
356
|
* ```
|
|
357
357
|
*/
|
|
358
358
|
export default function seoGraph(options = {}) {
|
|
359
|
-
const { validateH1 = true, validateUniqueMetadata = true, validateImageAlt = true, validateMetadataLength = true, validateInternalLinks = true, indexNow, llmsTxt, } = options;
|
|
359
|
+
const { validateH1 = true, validateUniqueMetadata = true, validateImageAlt = true, validateMetadataLength = true, validateInternalLinks = true, indexNow, llmsTxt, markdownAlternate = false, } = options;
|
|
360
360
|
const autoLlmsTxt = llmsTxt && !llmsTxt.sections;
|
|
361
361
|
const lengthBounds = resolveMetadataLengthBounds(validateMetadataLength);
|
|
362
362
|
const internalLinksEnabled = validateInternalLinks !== false;
|
|
@@ -372,7 +372,20 @@ export default function seoGraph(options = {}) {
|
|
|
372
372
|
return {
|
|
373
373
|
name: '@jdevalk/astro-seo-graph',
|
|
374
374
|
hooks: {
|
|
375
|
-
'astro:config:setup': ({ config }) => {
|
|
375
|
+
'astro:config:setup': ({ config, updateConfig }) => {
|
|
376
|
+
// Vite `define` controls the auto-emitted
|
|
377
|
+
// <link rel="alternate" type="text/markdown"> in <Seo>.
|
|
378
|
+
// The sentinel is replaced token-by-token at build time;
|
|
379
|
+
// when the integration isn't installed, the identifier
|
|
380
|
+
// stays free and <Seo>'s `typeof` check falls back to
|
|
381
|
+
// the default (enabled).
|
|
382
|
+
updateConfig({
|
|
383
|
+
vite: {
|
|
384
|
+
define: {
|
|
385
|
+
__JDV_SEO_GRAPH_MD_ALT__: JSON.stringify(markdownAlternate),
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
});
|
|
376
389
|
if (config.site) {
|
|
377
390
|
try {
|
|
378
391
|
siteOrigin = new URL(config.site.toString()).origin;
|
package/dist/integration.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integration.js","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integration.js","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown alternate rendering.
|
|
3
|
+
*
|
|
4
|
+
* Turns a content entry + metadata into a markdown string with YAML
|
|
5
|
+
* frontmatter, suitable for serving at an `.md` URL so that AI agents
|
|
6
|
+
* (Claude, Perplexity, ChatGPT) can consume a clean, machine-readable
|
|
7
|
+
* version of the page. Pair with `createMarkdownEndpoint` to serve it,
|
|
8
|
+
* and with the auto-emitted `<link rel="alternate" type="text/markdown">`
|
|
9
|
+
* in `<Seo>` for discovery.
|
|
10
|
+
*
|
|
11
|
+
* Pure; no Astro runtime required. Safe to import from non-Astro TS.
|
|
12
|
+
*/
|
|
13
|
+
export interface MarkdownAlternateFrontmatter {
|
|
14
|
+
title: string;
|
|
15
|
+
canonical: string | URL;
|
|
16
|
+
pubDate?: Date | string;
|
|
17
|
+
updatedDate?: Date | string;
|
|
18
|
+
author?: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
tags?: readonly string[];
|
|
21
|
+
categories?: readonly string[];
|
|
22
|
+
}
|
|
23
|
+
export interface RenderMarkdownAlternateOptions {
|
|
24
|
+
frontmatter: MarkdownAlternateFrontmatter;
|
|
25
|
+
/** Raw markdown body (entry.body from Astro content collections). */
|
|
26
|
+
body: string;
|
|
27
|
+
/**
|
|
28
|
+
* Token estimator. Defaults to `Math.ceil(text.length / 4)` — crude,
|
|
29
|
+
* dependency-free. Callers that need accuracy can pass in
|
|
30
|
+
* `gpt-tokenizer` or `@anthropic-ai/tokenizer`. Called once with the
|
|
31
|
+
* final rendered string so the returned `tokenCount` matches the
|
|
32
|
+
* `X-Markdown-Tokens` header.
|
|
33
|
+
*/
|
|
34
|
+
estimateTokens?: (text: string) => number;
|
|
35
|
+
/**
|
|
36
|
+
* Pre-render transform applied to `body`. Useful for stripping MDX
|
|
37
|
+
* imports/components. Pure.
|
|
38
|
+
*/
|
|
39
|
+
transformBody?: (body: string) => string;
|
|
40
|
+
}
|
|
41
|
+
export interface RenderedMarkdownAlternate {
|
|
42
|
+
markdown: string;
|
|
43
|
+
tokenCount: number;
|
|
44
|
+
/**
|
|
45
|
+
* The stringified canonical URL from `frontmatter.canonical`. Exposed
|
|
46
|
+
* so the endpoint can echo it in a `Link: <…>; rel="canonical"`
|
|
47
|
+
* header — tells crawlers the `.md` is an alternate representation,
|
|
48
|
+
* not a separately indexable resource.
|
|
49
|
+
*/
|
|
50
|
+
canonicalHref: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Render a `MarkdownAlternateFrontmatter` + body into a markdown string
|
|
54
|
+
* with YAML frontmatter and a token count. Pure.
|
|
55
|
+
*/
|
|
56
|
+
export declare function renderMarkdownAlternate(options: RenderMarkdownAlternateOptions): RenderedMarkdownAlternate;
|
|
57
|
+
/**
|
|
58
|
+
* Derive the `.md` URL from a canonical URL. Internal helper — exported
|
|
59
|
+
* for testing and so `<Seo>` can reuse the same algorithm.
|
|
60
|
+
*
|
|
61
|
+
* Rules:
|
|
62
|
+
* - Trailing `/` → `.md` (e.g. `/blog/post/` → `/blog/post.md`).
|
|
63
|
+
* - Existing extension → replaced with `.md`.
|
|
64
|
+
* - No trailing slash, no extension → `.md` appended.
|
|
65
|
+
* - Query string and hash preserved.
|
|
66
|
+
* - Malformed URL → empty string (caller should emit nothing).
|
|
67
|
+
*/
|
|
68
|
+
export declare function deriveMdUrl(canonical: string | URL): string;
|
|
69
|
+
//# sourceMappingURL=markdown-alternate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-alternate.d.ts","sourceRoot":"","sources":["../src/markdown-alternate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,4BAA4B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,8BAA8B;IAC3C,WAAW,EAAE,4BAA4B,CAAC;IAC1C,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,yBAAyB;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,aAAa,EAAE,MAAM,CAAC;CACzB;AAoED;;;GAGG;AACH,wBAAgB,uBAAuB,CACnC,OAAO,EAAE,8BAA8B,GACxC,yBAAyB,CAU3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,GAAG,MAAM,CAkB3D"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown alternate rendering.
|
|
3
|
+
*
|
|
4
|
+
* Turns a content entry + metadata into a markdown string with YAML
|
|
5
|
+
* frontmatter, suitable for serving at an `.md` URL so that AI agents
|
|
6
|
+
* (Claude, Perplexity, ChatGPT) can consume a clean, machine-readable
|
|
7
|
+
* version of the page. Pair with `createMarkdownEndpoint` to serve it,
|
|
8
|
+
* and with the auto-emitted `<link rel="alternate" type="text/markdown">`
|
|
9
|
+
* in `<Seo>` for discovery.
|
|
10
|
+
*
|
|
11
|
+
* Pure; no Astro runtime required. Safe to import from non-Astro TS.
|
|
12
|
+
*/
|
|
13
|
+
const FRONTMATTER_KEYS = [
|
|
14
|
+
'title',
|
|
15
|
+
'canonical',
|
|
16
|
+
'pubDate',
|
|
17
|
+
'updatedDate',
|
|
18
|
+
'author',
|
|
19
|
+
'description',
|
|
20
|
+
'tags',
|
|
21
|
+
'categories',
|
|
22
|
+
];
|
|
23
|
+
function needsQuoting(value) {
|
|
24
|
+
if (value === '')
|
|
25
|
+
return true;
|
|
26
|
+
if (/^\s|\s$/.test(value))
|
|
27
|
+
return true;
|
|
28
|
+
return /[:#[\]{}"'`,&*!|>%@]/.test(value);
|
|
29
|
+
}
|
|
30
|
+
function yamlString(value) {
|
|
31
|
+
if (!needsQuoting(value))
|
|
32
|
+
return value;
|
|
33
|
+
const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
34
|
+
return `"${escaped}"`;
|
|
35
|
+
}
|
|
36
|
+
function yamlList(values) {
|
|
37
|
+
return `[${values.map(yamlString).join(', ')}]`;
|
|
38
|
+
}
|
|
39
|
+
function toIso(value) {
|
|
40
|
+
return value instanceof Date ? value.toISOString() : value;
|
|
41
|
+
}
|
|
42
|
+
function renderFrontmatter(fm) {
|
|
43
|
+
const lines = ['---'];
|
|
44
|
+
for (const key of FRONTMATTER_KEYS) {
|
|
45
|
+
const raw = fm[key];
|
|
46
|
+
if (raw === undefined || raw === null)
|
|
47
|
+
continue;
|
|
48
|
+
switch (key) {
|
|
49
|
+
case 'title':
|
|
50
|
+
case 'author':
|
|
51
|
+
case 'description':
|
|
52
|
+
lines.push(`${key}: ${yamlString(String(raw))}`);
|
|
53
|
+
break;
|
|
54
|
+
case 'canonical':
|
|
55
|
+
lines.push(`canonical: ${yamlString(raw.toString())}`);
|
|
56
|
+
break;
|
|
57
|
+
case 'pubDate':
|
|
58
|
+
case 'updatedDate':
|
|
59
|
+
lines.push(`${key}: ${yamlString(toIso(raw))}`);
|
|
60
|
+
break;
|
|
61
|
+
case 'tags':
|
|
62
|
+
case 'categories': {
|
|
63
|
+
const arr = raw;
|
|
64
|
+
if (arr.length === 0)
|
|
65
|
+
continue;
|
|
66
|
+
lines.push(`${key}: ${yamlList(arr)}`);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
lines.push('---');
|
|
72
|
+
return lines.join('\n');
|
|
73
|
+
}
|
|
74
|
+
function defaultEstimate(text) {
|
|
75
|
+
return Math.ceil(text.length / 4);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Render a `MarkdownAlternateFrontmatter` + body into a markdown string
|
|
79
|
+
* with YAML frontmatter and a token count. Pure.
|
|
80
|
+
*/
|
|
81
|
+
export function renderMarkdownAlternate(options) {
|
|
82
|
+
const { frontmatter, body, estimateTokens = defaultEstimate, transformBody } = options;
|
|
83
|
+
const rawBody = transformBody ? transformBody(body) : body;
|
|
84
|
+
const trimmedBody = rawBody.replace(/\s+$/, '');
|
|
85
|
+
const markdown = `${renderFrontmatter(frontmatter)}\n\n${trimmedBody}\n`;
|
|
86
|
+
return {
|
|
87
|
+
markdown,
|
|
88
|
+
tokenCount: estimateTokens(markdown),
|
|
89
|
+
canonicalHref: frontmatter.canonical.toString(),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Derive the `.md` URL from a canonical URL. Internal helper — exported
|
|
94
|
+
* for testing and so `<Seo>` can reuse the same algorithm.
|
|
95
|
+
*
|
|
96
|
+
* Rules:
|
|
97
|
+
* - Trailing `/` → `.md` (e.g. `/blog/post/` → `/blog/post.md`).
|
|
98
|
+
* - Existing extension → replaced with `.md`.
|
|
99
|
+
* - No trailing slash, no extension → `.md` appended.
|
|
100
|
+
* - Query string and hash preserved.
|
|
101
|
+
* - Malformed URL → empty string (caller should emit nothing).
|
|
102
|
+
*/
|
|
103
|
+
export function deriveMdUrl(canonical) {
|
|
104
|
+
let url;
|
|
105
|
+
try {
|
|
106
|
+
url = typeof canonical === 'string' ? new URL(canonical) : new URL(canonical.toString());
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return '';
|
|
110
|
+
}
|
|
111
|
+
const { pathname } = url;
|
|
112
|
+
let newPath;
|
|
113
|
+
if (pathname.endsWith('/')) {
|
|
114
|
+
newPath = `${pathname.slice(0, -1)}.md`;
|
|
115
|
+
}
|
|
116
|
+
else if (/\.[a-z0-9]+$/i.test(pathname)) {
|
|
117
|
+
newPath = pathname.replace(/\.[a-z0-9]+$/i, '.md');
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
newPath = `${pathname}.md`;
|
|
121
|
+
}
|
|
122
|
+
url.pathname = newPath;
|
|
123
|
+
return url.toString();
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=markdown-alternate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-alternate.js","sourceRoot":"","sources":["../src/markdown-alternate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { APIRoute } from 'astro';
|
|
2
|
+
import { type RenderMarkdownAlternateOptions } from './markdown-alternate.js';
|
|
3
|
+
export interface MarkdownEndpointOptions<Entry> {
|
|
4
|
+
/**
|
|
5
|
+
* Async source of content entries. Usually a thin wrapper around
|
|
6
|
+
* Astro's `getCollection`, e.g. `() => getCollection('blog')`.
|
|
7
|
+
*/
|
|
8
|
+
entries: () => Promise<readonly Entry[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Match an entry against the route param (e.g. `Astro.params.slug`).
|
|
11
|
+
* Return the renderer input for a match, or `null` to skip this entry.
|
|
12
|
+
* The first non-null mapping wins.
|
|
13
|
+
*/
|
|
14
|
+
mapper: (entry: Entry, slug: string) => RenderMarkdownAlternateOptions | null;
|
|
15
|
+
/**
|
|
16
|
+
* Name of the URL param to read. Defaults to `'slug'`, matching the
|
|
17
|
+
* common `[...slug].md.ts` filename pattern.
|
|
18
|
+
*/
|
|
19
|
+
paramName?: string;
|
|
20
|
+
/** `Cache-Control`. Defaults to `max-age=300`. `null` to omit. */
|
|
21
|
+
cacheControl?: string | null;
|
|
22
|
+
/** `Content-Type`. Defaults to `text/markdown; charset=utf-8`. */
|
|
23
|
+
contentType?: string;
|
|
24
|
+
/** Emit `X-Markdown-Tokens`. Defaults to `true`. */
|
|
25
|
+
emitTokenHeader?: boolean;
|
|
26
|
+
/** Extra response headers. Caller wins on key conflicts. */
|
|
27
|
+
extraHeaders?: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns an Astro `APIRoute` that serves a markdown version of a
|
|
31
|
+
* content collection entry, one `.md` URL per entry. Drop into an
|
|
32
|
+
* `.ts` file under `src/pages/`, e.g. `src/pages/blog/[...slug].md.ts`.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* // src/pages/blog/[...slug].md.ts
|
|
37
|
+
* import { getCollection } from 'astro:content';
|
|
38
|
+
* import { createMarkdownEndpoint } from '@jdevalk/astro-seo-graph';
|
|
39
|
+
*
|
|
40
|
+
* export const getStaticPaths = async () => {
|
|
41
|
+
* const posts = await getCollection('blog');
|
|
42
|
+
* return posts.map((p) => ({ params: { slug: p.id } }));
|
|
43
|
+
* };
|
|
44
|
+
*
|
|
45
|
+
* export const GET = createMarkdownEndpoint({
|
|
46
|
+
* entries: () => getCollection('blog'),
|
|
47
|
+
* mapper: (post, slug) => post.id !== slug ? null : ({
|
|
48
|
+
* frontmatter: {
|
|
49
|
+
* title: post.data.title,
|
|
50
|
+
* canonical: `https://example.com/blog/${post.id}/`,
|
|
51
|
+
* pubDate: post.data.pubDate,
|
|
52
|
+
* author: post.data.author,
|
|
53
|
+
* description: post.data.description,
|
|
54
|
+
* tags: post.data.tags,
|
|
55
|
+
* },
|
|
56
|
+
* body: post.body ?? '',
|
|
57
|
+
* }),
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export declare function createMarkdownEndpoint<Entry>(options: MarkdownEndpointOptions<Entry>): APIRoute;
|
|
62
|
+
//# sourceMappingURL=markdown-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-routes.d.ts","sourceRoot":"","sources":["../src/markdown-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAEH,KAAK,8BAA8B,EACtC,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,uBAAuB,CAAC,KAAK;IAC1C;;;OAGG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;IACzC;;;;OAIG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,8BAA8B,GAAG,IAAI,CAAC;IAC9E;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,uBAAuB,CAAC,KAAK,CAAC,GAAG,QAAQ,CAoC/F"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { renderMarkdownAlternate, } from './markdown-alternate.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns an Astro `APIRoute` that serves a markdown version of a
|
|
4
|
+
* content collection entry, one `.md` URL per entry. Drop into an
|
|
5
|
+
* `.ts` file under `src/pages/`, e.g. `src/pages/blog/[...slug].md.ts`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // src/pages/blog/[...slug].md.ts
|
|
10
|
+
* import { getCollection } from 'astro:content';
|
|
11
|
+
* import { createMarkdownEndpoint } from '@jdevalk/astro-seo-graph';
|
|
12
|
+
*
|
|
13
|
+
* export const getStaticPaths = async () => {
|
|
14
|
+
* const posts = await getCollection('blog');
|
|
15
|
+
* return posts.map((p) => ({ params: { slug: p.id } }));
|
|
16
|
+
* };
|
|
17
|
+
*
|
|
18
|
+
* export const GET = createMarkdownEndpoint({
|
|
19
|
+
* entries: () => getCollection('blog'),
|
|
20
|
+
* mapper: (post, slug) => post.id !== slug ? null : ({
|
|
21
|
+
* frontmatter: {
|
|
22
|
+
* title: post.data.title,
|
|
23
|
+
* canonical: `https://example.com/blog/${post.id}/`,
|
|
24
|
+
* pubDate: post.data.pubDate,
|
|
25
|
+
* author: post.data.author,
|
|
26
|
+
* description: post.data.description,
|
|
27
|
+
* tags: post.data.tags,
|
|
28
|
+
* },
|
|
29
|
+
* body: post.body ?? '',
|
|
30
|
+
* }),
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function createMarkdownEndpoint(options) {
|
|
35
|
+
const paramName = options.paramName ?? 'slug';
|
|
36
|
+
const cacheControl = options.cacheControl === undefined ? 'max-age=300' : options.cacheControl;
|
|
37
|
+
const contentType = options.contentType ?? 'text/markdown; charset=utf-8';
|
|
38
|
+
const emitTokenHeader = options.emitTokenHeader !== false;
|
|
39
|
+
return async ({ params }) => {
|
|
40
|
+
const raw = params?.[paramName];
|
|
41
|
+
const slug = Array.isArray(raw) ? raw.join('/') : (raw ?? '');
|
|
42
|
+
if (!slug)
|
|
43
|
+
return new Response('Not found', { status: 404 });
|
|
44
|
+
const entries = await options.entries();
|
|
45
|
+
let rendered = null;
|
|
46
|
+
for (const entry of entries) {
|
|
47
|
+
const input = options.mapper(entry, slug);
|
|
48
|
+
if (input === null)
|
|
49
|
+
continue;
|
|
50
|
+
rendered = renderMarkdownAlternate(input);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
if (!rendered)
|
|
54
|
+
return new Response('Not found', { status: 404 });
|
|
55
|
+
const headers = {
|
|
56
|
+
'Content-Type': contentType,
|
|
57
|
+
'X-Robots-Tag': 'noindex, follow',
|
|
58
|
+
};
|
|
59
|
+
if (cacheControl !== null)
|
|
60
|
+
headers['Cache-Control'] = cacheControl;
|
|
61
|
+
if (emitTokenHeader)
|
|
62
|
+
headers['X-Markdown-Tokens'] = String(rendered.tokenCount);
|
|
63
|
+
// Point crawlers at the HTML canonical — the .md URL is a
|
|
64
|
+
// machine-readable alternate, not a separately indexable resource.
|
|
65
|
+
const canonical = rendered.canonicalHref;
|
|
66
|
+
if (canonical)
|
|
67
|
+
headers['Link'] = `<${canonical}>; rel="canonical"`;
|
|
68
|
+
if (options.extraHeaders) {
|
|
69
|
+
for (const [k, v] of Object.entries(options.extraHeaders))
|
|
70
|
+
headers[k] = v;
|
|
71
|
+
}
|
|
72
|
+
return new Response(rendered.markdown, { headers });
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=markdown-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-routes.js","sourceRoot":"","sources":["../src/markdown-routes.ts"],"names":[],"mappings":"AACA,OAAO,EACH,uBAAuB,GAE1B,MAAM,yBAAyB,CAAC;AA6BjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,sBAAsB,CAAQ,OAAuC;IACjF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC/F,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,8BAA8B,CAAC;IAC1E,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAC;IAE1D,OAAO,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAE7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACxC,IAAI,QAAQ,GAAsD,IAAI,CAAC;QACvE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,KAAK,KAAK,IAAI;gBAAE,SAAS;YAC7B,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM;QACV,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEjE,MAAM,OAAO,GAA2B;YACpC,cAAc,EAAE,WAAW;YAC3B,cAAc,EAAE,iBAAiB;SACpC,CAAC;QACF,IAAI,YAAY,KAAK,IAAI;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,YAAY,CAAC;QACnE,IAAI,eAAe;YAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAChF,0DAA0D;QAC1D,mEAAmE;QACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC;QACzC,IAAI,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS,oBAAoB,CAAC;QACnE,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC;AACN,CAAC"}
|
package/package.json
CHANGED