seo: make the structured data match the pages, and publish the privacy link - #14
Merged
Conversation
…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.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three verified findings from the 2026-09-05 estate SEO audit of dna.suedeai.ai.
dna.suedeai.ai#1— Home pageCollectionPage.mainEntitywas anItemListdeclaringnumberOfItems: 409with noitemListElement. 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 noArticleschema. AddedarticleJsonLd()insrc/lib/seo.tsand rendered it through the existingJsonLdcomponent on each page. Every field mirrors what the page renders; author and publisher resolve by@idinto 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.tscover the first two and were checked in the failing direction: reintroducing anItemListfails the first, retyping theArticlefails the second.Local:
pnpm typecheck,pnpm lint,pnpm test(111 passed),pnpm validate-manifest,pnpm buildall green. Built HTML confirms zeroItemListon the home page,"@type":"Article"on all five essays, and the privacy link in the footer.