Skip to content

Commit cfb3f6d

Browse files
IEvangelistCopilot
andauthored
Add JSON-LD structured data to docs pages (#726)
* feat: add JSON-LD structured data for docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: remove duplicate site tour flag Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat: extend structured data for FAQ and Aspire Conf Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * perf: simplify structured data page routing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: escape structured data JSON safely Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent df64bc5 commit cfb3f6d

4 files changed

Lines changed: 776 additions & 4 deletions

File tree

src/frontend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,14 @@
2929
"astro": "pnpm git-env && astro",
3030
"test": "pnpm test:unit && pnpm test:e2e",
3131
"test:all": "pnpm lint && pnpm test",
32-
"test:unit": "pnpm test:unit:contracts && pnpm test:unit:components && pnpm test:unit:docs && pnpm test:unit:api-markdown && pnpm test:unit:ts-api && pnpm test:unit:twoslash-types",
32+
"test:unit": "pnpm test:unit:contracts && pnpm test:unit:components && pnpm test:unit:docs && pnpm test:unit:api-markdown && pnpm test:unit:ts-api && pnpm test:unit:twoslash-types && pnpm test:unit:structured-data",
3333
"test:unit:api-markdown": "vitest run --config vitest.config.ts tests/unit/api-markdown.vitest.test.ts",
3434
"test:unit:ts-api": "vitest run --config vitest.config.ts tests/unit/ts-api-routes.vitest.test.ts tests/unit/ts-api-search.vitest.test.ts",
3535
"test:unit:twoslash-types": "vitest run --config vitest.config.ts tests/unit/twoslash-types-generator.vitest.test.ts",
3636
"test:unit:contracts": "vitest run --config vitest.config.ts tests/unit/analytics-script-contracts.vitest.test.ts",
3737
"test:unit:components": "vitest run --config vitest.config.ts tests/unit/custom-components.vitest.test.ts tests/unit/site-tour.vitest.test.ts",
3838
"test:unit:docs": "vitest run --config vitest.config.ts tests/unit/filetree-format.vitest.test.ts",
39+
"test:unit:structured-data": "vitest run --config vitest.config.ts tests/unit/structured-data.vitest.test.ts",
3940
"test:e2e:api-markdown": "playwright test --config playwright.api-markdown.config.mjs",
4041
"test:e2e": "playwright test",
4142
"test:e2e:install": "playwright install chromium",

src/frontend/src/components/starlight/Head.astro

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Tooltips } from 'astro-tooltips';
33
import DefaultHead from '@astrojs/starlight/components/Head.astro';
44
import AccessibleCodeButtons from '../AccessibleCodeButtons.astro';
55
import SiteTour from '../SiteTour.astro';
6+
import { getStructuredData } from '@utils/structured-data';
67
78
const repoUrl = (
89
import.meta.env.PUBLIC_REPO_URL ||
@@ -15,6 +16,7 @@ const route = Astro.locals?.starlightRoute;
1516
const entryId = route?.entry?.id;
1617
const path = route?.entry?.filePath;
1718
const isSiteTourEnabled = import.meta.env.PUBLIC_ENABLE_SITE_TOUR === 'true';
19+
const structuredData = route ? getStructuredData(route, Astro.url, Astro.site) : undefined;
1820
1921
function computeRepoPath() {
2022
if (path) {
@@ -35,6 +37,7 @@ function computeSourceUrl() {
3537
<meta name="git-source-url" content={computeSourceUrl()} />
3638

3739
<DefaultHead {...Astro.props} />
40+
{structuredData && <script type="application/ld+json" is:inline set:html={structuredData} />}
3841

3942
<!-- Restore persisted sidebar state before paint and keep legacy AppHost pages readable -->
4043
<script is:inline>
@@ -62,11 +65,17 @@ function computeSourceUrl() {
6265
document.documentElement.setAttribute('data-apphost-lang', appHostLang);
6366

6467
var path = window.location.pathname.replace(/\/$/, '');
65-
if (localStorage.getItem('api-sidebar-collapsed') === '1' && path.indexOf('/reference/api') !== -1) {
68+
if (
69+
localStorage.getItem('api-sidebar-collapsed') === '1' &&
70+
path.indexOf('/reference/api') !== -1
71+
) {
6672
document.documentElement.setAttribute('data-sidebar-collapsed', '');
6773
}
6874

69-
if (localStorage.getItem('topic-sidebar-collapsed') === '1' && path.indexOf('/reference/api') === -1) {
75+
if (
76+
localStorage.getItem('topic-sidebar-collapsed') === '1' &&
77+
path.indexOf('/reference/api') === -1
78+
) {
7079
document.documentElement.setAttribute('data-topic-sidebar-collapsed', '');
7180
}
7281
} catch (e) {}
@@ -132,7 +141,7 @@ function computeSourceUrl() {
132141
}
133142
}}
134143
/>
135-
144+
136145
<script is:inline>
137146
(function () {
138147
document.addEventListener('keydown', function (event) {

0 commit comments

Comments
 (0)