Skip to content

seo: make the structured data match the pages, and publish the privacy link - #14

Merged
JasonColapietro merged 1 commit into
mainfrom
seo/e2e-audit-20260905
Sep 5, 2026
Merged

seo: make the structured data match the pages, and publish the privacy link#14
JasonColapietro merged 1 commit into
mainfrom
seo/e2e-audit-20260905

Conversation

@JasonColapietro

Copy link
Copy Markdown
Collaborator

Three verified findings from the 2026-09-05 estate SEO audit of dna.suedeai.ai.

  • dna.suedeai.ai#1 — Home page CollectionPage.mainEntity was an ItemList declaring numberOfItems: 409 with no itemListElement. Dropped the sub-type; the count stays in the description prose. The grid is filtered and sorted client side, so a fixed enumeration would stop matching the page.
  • dna.suedeai.ai#2 — All five /articles/* pages shipped no Article schema. Added articleJsonLd() in src/lib/seo.ts and rendered it through the existing JsonLd component on each page. Every field mirrors what the page renders; author and publisher resolve by @id into the sitewide graph.
  • dna.suedeai.ai#3 — No privacy policy resolved on this host. Suede DNA is published by Suede Labs AI and covered by the estate policy at suedeai.ai/privacy, so the footer (root layout, therefore every page) now links to it. No new policy text was written.

Guards in tests/lib/seo.test.ts cover the first two and were checked in the failing direction: reintroducing an ItemList fails the first, retyping the Article fails the second.

Local: pnpm typecheck, pnpm lint, pnpm test (111 passed), pnpm validate-manifest, pnpm build all green. Built HTML confirms zero ItemList on the home page, "@type":"Article" on all five essays, and the privacy link in the footer.

…y link

Three defects from the 2026-09-05 estate audit, all on this host.

Schema that promises a structure it does not carry: the home page's
CollectionPage set mainEntity to an ItemList with numberOfItems 409 and
no itemListElement. A consumer reading that expects to enumerate 409
members out of the markup. The grid is filtered and sorted in the
browser, so any fixed list baked into the page stops matching the screen
as soon as a filter runs. The count stays where it was already true, in
the description prose.

Schema that was missing: each of the five essays renders a headline and
a dateline and is an Article by every reading, but the only JSON-LD on
those pages was the sitewide WebSite/Organization/Person graph. They now
emit an Article block whose headline, description and dates are the same
values the page renders, with author and publisher resolving by @id into
that graph.

Trust signal that was absent: no privacy policy resolved anywhere on the
host. Suede DNA is published by Suede Labs AI and is covered by the
estate policy, so the footer links to it rather than restating it here.

Guards added to tests/lib/seo.test.ts for the first two, both checked in
the mutated direction: reintroducing the ItemList fails the first, and
retyping the Article fails the second.
@JasonColapietro
JasonColapietro merged commit 2cc8145 into main Sep 5, 2026
1 check passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-05T20:26:52.880293Z 209d751 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant