From e5c73c647dcd95f8f2b0c158004693fa10182d14 Mon Sep 17 00:00:00 2001 From: Hare Date: Fri, 14 Aug 2026 21:10:52 +0900 Subject: [PATCH] Add SEO and agent-readable documentation --- .gitignore | 1 + doc/develop/README.md | 12 ++ site/decodal-site/astro.config.mjs | 40 ++++++ site/decodal-site/package-lock.json | 82 +++++++++++ site/decodal-site/package.json | 1 + site/decodal-site/public/_headers | 19 +++ site/decodal-site/public/_redirects | 37 +++++ site/decodal-site/public/favicon.svg | 4 + site/decodal-site/public/og-source.svg | 11 ++ site/decodal-site/public/og.png | Bin 0 -> 35122 bytes .../src/layouts/ManualLayout.astro | 100 ++++++++++++- site/decodal-site/src/lib/agent-content.js | 134 ++++++++++++++++++ site/decodal-site/src/lib/docs.js | 54 ++++++- site/decodal-site/src/pages/404.astro | 15 ++ .../src/pages/docs/en/[...slug].astro | 5 +- .../src/pages/docs/en/[...slug]/index.md.ts | 10 ++ .../src/pages/docs/en/index.md.ts | 6 + .../src/pages/docs/ja/[...slug].astro | 5 +- .../src/pages/docs/ja/[...slug]/index.md.ts | 10 ++ .../src/pages/docs/ja/index.md.ts | 6 + site/decodal-site/src/pages/index.md.ts | 5 + site/decodal-site/src/pages/ja/index.md.ts | 5 + .../src/pages/ja/llms-full.txt.ts | 5 + site/decodal-site/src/pages/llms-full.txt.ts | 5 + site/decodal-site/src/pages/llms.txt.ts | 5 + site/decodal-site/src/pages/robots.txt.ts | 12 ++ 26 files changed, 576 insertions(+), 13 deletions(-) create mode 100644 site/decodal-site/public/_headers create mode 100644 site/decodal-site/public/_redirects create mode 100644 site/decodal-site/public/favicon.svg create mode 100644 site/decodal-site/public/og-source.svg create mode 100644 site/decodal-site/public/og.png create mode 100644 site/decodal-site/src/lib/agent-content.js create mode 100644 site/decodal-site/src/pages/404.astro create mode 100644 site/decodal-site/src/pages/docs/en/[...slug]/index.md.ts create mode 100644 site/decodal-site/src/pages/docs/en/index.md.ts create mode 100644 site/decodal-site/src/pages/docs/ja/[...slug]/index.md.ts create mode 100644 site/decodal-site/src/pages/docs/ja/index.md.ts create mode 100644 site/decodal-site/src/pages/index.md.ts create mode 100644 site/decodal-site/src/pages/ja/index.md.ts create mode 100644 site/decodal-site/src/pages/ja/llms-full.txt.ts create mode 100644 site/decodal-site/src/pages/llms-full.txt.ts create mode 100644 site/decodal-site/src/pages/llms.txt.ts create mode 100644 site/decodal-site/src/pages/robots.txt.ts diff --git a/.gitignore b/.gitignore index c2b3453..5333ebe 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ site/decodal-site/dist # Astro site/decodal-site/.astro +site/decodal-site/.wrangler diff --git a/doc/develop/README.md b/doc/develop/README.md index 6d93cbd..8d3950e 100644 --- a/doc/develop/README.md +++ b/doc/develop/README.md @@ -40,6 +40,18 @@ npm --prefix site/decodal-site run build Use `npm --prefix site/decodal-site run build:wasm` when Rust bindings or formatter behavior changed. +## Documentation site delivery + +The canonical site origin is `https://decodal.hareworks.net`, configured through Astro's `site` option. A normal site build generates the sitemap, robots policy, social metadata, structured data, 404 page, and source-backed Markdown endpoints. `/llms.txt` indexes the individual English and Japanese Markdown pages; `/llms-full.txt` and `/ja/llms-full.txt` provide complete manuals. These resources are built directly from `doc/manual/source` and do not use Cloudflare's HTML-to-Markdown conversion. + +Deploy the already prepared site with: + +```sh +npm --prefix site/decodal-site run deploy +``` + +Cloudflare Pages `_redirects` handles legacy paths within the site, but not hostname redirects. In the Cloudflare account, configure a Bulk Redirect from `https://decodal-site.pages.dev/` to `https://decodal.hareworks.net/` with status `301`, subpath matching, path-suffix preservation, and query-string preservation enabled. This prevents the Pages project hostname from becoming a second public origin. + ## Syntax changes When syntax changes: diff --git a/site/decodal-site/astro.config.mjs b/site/decodal-site/astro.config.mjs index bae8db5..de20f9f 100644 --- a/site/decodal-site/astro.config.mjs +++ b/site/decodal-site/astro.config.mjs @@ -1,7 +1,47 @@ import { defineConfig } from 'astro/config'; +import sitemap from '@astrojs/sitemap'; + +const site = 'https://decodal.hareworks.net'; + +function alternateLinks(url) { + const pathname = new URL(url).pathname; + if (pathname === '/' || pathname === '/ja/') { + return [ + { url: `${site}/`, lang: 'en' }, + { url: `${site}/ja/`, lang: 'ja' }, + { url: `${site}/`, lang: 'x-default' }, + ]; + } + + const match = pathname.match(/^\/docs\/(en|ja)\/(.*)$/); + if (!match) return undefined; + const localizedPath = match[2]; + return [ + { url: `${site}/docs/en/${localizedPath}`, lang: 'en' }, + { url: `${site}/docs/ja/${localizedPath}`, lang: 'ja' }, + { url: `${site}/docs/en/${localizedPath}`, lang: 'x-default' }, + ]; +} export default defineConfig({ + site, output: 'static', + integrations: [ + sitemap({ + filter: (page) => { + const pathname = new URL(page).pathname; + return pathname !== '/docs/' + && pathname !== '/404.html' + && pathname !== '/404/' + && !pathname.endsWith('.md') + && !pathname.endsWith('.txt'); + }, + serialize(item) { + const links = alternateLinks(item.url); + return links ? { ...item, links } : item; + }, + }), + ], build: { assets: 'assets', }, diff --git a/site/decodal-site/package-lock.json b/site/decodal-site/package-lock.json index 6980613..7faeb03 100644 --- a/site/decodal-site/package-lock.json +++ b/site/decodal-site/package-lock.json @@ -9,6 +9,7 @@ "version": "0.1.0", "dependencies": { "@astrojs/check": "^0.9.4", + "@astrojs/sitemap": "3.2.1", "@codemirror/language": "^6.12.4", "@codemirror/view": "^6.43.6", "@fontsource/ibm-plex-mono": "^5.3.0", @@ -156,6 +157,17 @@ "node": "^18.17.1 || ^20.3.0 || >=21.0.0" } }, + "node_modules/@astrojs/sitemap": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@astrojs/sitemap/-/sitemap-3.2.1.tgz", + "integrity": "sha512-uxMfO8f7pALq0ADL6Lk68UV6dNYjJ2xGUzyjjVj60JLBs5a6smtlkBYv3tQ0DzoqwS7c9n4FUx5lgv0yPo/fgA==", + "license": "MIT", + "dependencies": { + "sitemap": "^8.0.0", + "stream-replace-string": "^2.0.0", + "zod": "^3.23.8" + } + }, "node_modules/@astrojs/telemetry": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.1.0.tgz", @@ -2452,6 +2464,24 @@ "@types/unist": "*" } }, + "node_modules/@types/node": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -2670,6 +2700,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -6422,6 +6458,15 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/sax": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", @@ -6531,6 +6576,31 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "license": "MIT" }, + "node_modules/sitemap": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-8.0.3.tgz", + "integrity": "sha512-9Ew1tR2WYw8RGE2XLy7GjkusvYXy8Rg6y8TYuBuQMfIEdGcWoJpY2Wr5DzsEiL/TKCw56+YKTCCUHglorEYK+A==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.4.1" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -6568,6 +6638,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stream-replace-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-replace-string/-/stream-replace-string-2.0.0.tgz", + "integrity": "sha512-TlnjJ1C0QrmxRNrON00JvaFFlNh5TTG00APw23j74ET7gkQpTASi6/L2fuiav8pzK715HXtUeClpBTw2NPSn6w==", + "license": "MIT" + }, "node_modules/string-width": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", @@ -6784,6 +6860,12 @@ "node": ">=20.18.1" } }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, "node_modules/unenv": { "version": "2.0.0-rc.24", "resolved": "https://registry.npmjs.org/unenv/-/unenv-2.0.0-rc.24.tgz", diff --git a/site/decodal-site/package.json b/site/decodal-site/package.json index 4de28d2..6ed0677 100644 --- a/site/decodal-site/package.json +++ b/site/decodal-site/package.json @@ -17,6 +17,7 @@ }, "dependencies": { "@astrojs/check": "^0.9.4", + "@astrojs/sitemap": "3.2.1", "@codemirror/language": "^6.12.4", "@codemirror/view": "^6.43.6", "@fontsource/ibm-plex-mono": "^5.3.0", diff --git a/site/decodal-site/public/_headers b/site/decodal-site/public/_headers new file mode 100644 index 0000000..3ad6394 --- /dev/null +++ b/site/decodal-site/public/_headers @@ -0,0 +1,19 @@ +/* + Content-Signal: search=yes, ai-input=yes, ai-train=no + X-Content-Type-Options: nosniff + +/*.md + Content-Type: text/markdown; charset=utf-8 + X-Robots-Tag: noindex + +/llms.txt + Content-Type: text/plain; charset=utf-8 + X-Robots-Tag: noindex + +/llms-full.txt + Content-Type: text/plain; charset=utf-8 + X-Robots-Tag: noindex + +/ja/llms-full.txt + Content-Type: text/plain; charset=utf-8 + X-Robots-Tag: noindex diff --git a/site/decodal-site/public/_redirects b/site/decodal-site/public/_redirects new file mode 100644 index 0000000..419613e --- /dev/null +++ b/site/decodal-site/public/_redirects @@ -0,0 +1,37 @@ +/docs /docs/en/ 301 +/docs/ /docs/en/ 301 +/docs/components/ /docs/en/components/ 301 +/docs/embedding/ /docs/en/embedding/ 301 +/docs/introduction/ /docs/en/introduction/ 301 +/docs/language/ /docs/en/language/ 301 +/docs/language/constraints-and-defaults/ /docs/en/language/constraints-and-defaults/ 301 +/docs/language/evaluation/ /docs/en/language/evaluation/ 301 +/docs/language/examples/ /docs/en/language/examples/ 301 +/docs/language/expression/ /docs/en/language/expression/ 301 +/docs/language/expression/arithmetic/ /docs/en/language/expression/arithmetic/ 301 +/docs/language/expression/array/ /docs/en/language/expression/array/ 301 +/docs/language/expression/ascription/ /docs/en/language/expression/ascription/ 301 +/docs/language/expression/composition/ /docs/en/language/expression/composition/ 301 +/docs/language/expression/default/ /docs/en/language/expression/default/ 301 +/docs/language/expression/function/ /docs/en/language/expression/function/ 301 +/docs/language/expression/function-call/ /docs/en/language/expression/function-call/ 301 +/docs/language/expression/identifier/ /docs/en/language/expression/identifier/ 301 +/docs/language/expression/import/ /docs/en/language/expression/import/ 301 +/docs/language/expression/let/ /docs/en/language/expression/let/ 301 +/docs/language/expression/literal/ /docs/en/language/expression/literal/ 301 +/docs/language/expression/logical-and-comparison/ /docs/en/language/expression/logical-and-comparison/ 301 +/docs/language/expression/match/ /docs/en/language/expression/match/ 301 +/docs/language/expression/object/ /docs/en/language/expression/object/ 301 +/docs/language/expression/path-reference/ /docs/en/language/expression/path-reference/ 301 +/docs/language/functions/ /docs/en/language/functions/ 301 +/docs/language/grammar/ /docs/en/language/grammar/ 301 +/docs/language/materialization-and-errors/ /docs/en/language/materialization-and-errors/ 301 +/docs/language/modules-and-imports/ /docs/en/language/modules-and-imports/ 301 +/docs/language/naming/ /docs/en/language/naming/ 301 +/docs/language/operators/ /docs/en/language/operators/ 301 +/docs/language/syntax/ /docs/en/language/syntax/ 301 +/docs/language/value/ /docs/en/language/value/ 301 +/docs/language/value/bool/ /docs/en/language/value/bool/ 301 +/docs/language/value/float/ /docs/en/language/value/float/ 301 +/docs/language/value/int/ /docs/en/language/value/int/ 301 +/docs/language/value/string/ /docs/en/language/value/string/ 301 diff --git a/site/decodal-site/public/favicon.svg b/site/decodal-site/public/favicon.svg new file mode 100644 index 0000000..bf6c737 --- /dev/null +++ b/site/decodal-site/public/favicon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/site/decodal-site/public/og-source.svg b/site/decodal-site/public/og-source.svg new file mode 100644 index 0000000..447019b --- /dev/null +++ b/site/decodal-site/public/og-source.svg @@ -0,0 +1,11 @@ + + + + + + Decodal + Deferred Constraint + Data Language + configuration · constraints · defaults + + diff --git a/site/decodal-site/public/og.png b/site/decodal-site/public/og.png new file mode 100644 index 0000000000000000000000000000000000000000..751793a15e295d1b39c361a3470f208a7f635b40 GIT binary patch literal 35122 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 z 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 - {(frontpage || isDocsPage) && } - {(frontpage || isDocsPage) && } - {(frontpage || isDocsPage) && } + {noindex && } + {!noindex && } + + + + {markdownUrl && } + {localizedPage && } + {localizedPage && } + {localizedPage && } + + + + + + + {localizedPage && } + + + + + + + + + + + {!noindex &&