Uh oh!
There was an error while loading. Please reload this page.
fix(landing): complete Organization schema, add CollectionPage/BlogPosting JSON-LD, fix TechArticle rich-result eligibility - #5638
Conversation
waleedlatif1
commented
Jul 13, 2026
waleedlatif1
commented
Jul 13, 2026
@cursor review |
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryLow Risk Overview Collection pages now emit a Article schema always includes Site-wide Organization JSON-LD adds Reviewed by Cursor Bugbot for commit 4182dd5. Configure here. |
Greptile SummaryThis PR improves landing-page structured data for the blog, library, and article pages.
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (4): Last reviewed commit: "fix(landing): match CollectionPage ItemL..." | Re-trigger Greptile |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Greptile SummaryThis PR expands landing-page structured data for posts and collection pages. The main changes are:
Confidence Score: 4/5The collection structured data can describe the wrong visible list on filtered and paginated pages.
apps/sim/app/(landing)/blog/page.tsx, apps/sim/app/(landing)/library/page.tsx Important Files Changed
Reviews (2): Last reviewed commit: "fix(landing): complete Organization sche..." | Re-trigger Greptile |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
…sting JSON-LD, fix TechArticle rich-result eligibility - Organization schema (site-structured-data.tsx): add brand and contactPoint.url (verified against the real /contact route); all other fields were already correct and verified against the Footer's sameAs links. foundingDate/legalName/address omitted — not verifiable from anything in this repo. - CollectionPage (blog + library index): buildCollectionPageJsonLd now takes the real posts list (same getAllPostMeta() the index page already renders from) and emits a mainEntity ItemList of BlogPosting stubs instead of omitting mainEntity entirely. - BlogPosting + TechArticle (post detail template): Google's Article rich-result eligibility only recognizes Article/NewsArticle/BlogPosting — a bare TechArticle type isn't in that allowlist. buildArticleJsonLd now emits a multi-type @type array (["BlogPosting","TechArticle"]) for genuinely technical posts, and "BlogPosting" alone for posts that are general announcements, via a new `technical` frontmatter flag (defaults true; set to false on the series-a funding-announcement post, the one post with no technical content). Also fixed a real markup/schema mismatch: the article's `speakable.cssSelector` referenced `[itemprop="description"]`, but no element carried that itemProp — added it to the description paragraph. TechArticle/BlogPosting image URLs are now made absolute (previously relative paths, invalid for crawlers). - FAQPage: audited every LandingFAQ usage (/models, /models/[provider], /models/[provider]/[model], /integrations, /integrations/[slug], /comparison, /comparison/[provider]) — all already emit matching FAQPage JSON-LD sourced from the same data passed to LandingFAQ; no gaps found, no changes needed.
…o visible posts Address Greptile/Cursor review on PR #5638: - itemType now always resolves to BlogPosting (matching Greptile's exact suggested fix), since the JSON-LD graph already carries the richer TechArticle type via a multi-type array and the microdata path doesn't need to duplicate that distinction - buildCollectionPageJsonLd now receives the same tag-filtered/paginated post subset ContentIndexPage actually renders, instead of the full unfiltered catalog, via a new shared selectVisiblePosts/paginateContentPosts helper in lib/content/index-list.ts (also de-duplicates the pagination logic that previously lived only in ContentIndexPage)
01c9a99 to
5a70beaComparewaleedlatif1
commented
Jul 13, 2026
waleedlatif1
commented
Jul 13, 2026
@cursor review |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
…ble filtered/paginated variant Address round-2 Cursor Bugbot findings on PR #5638: - buildCollectionPageJsonLd no longer re-sorts the given posts by date - ordering is now solely owned by the caller (selectVisiblePosts), so featured-row-first render order matches ItemList position order - buildCollectionPageJsonLd now takes an optional {tag, page} filter descriptor and reflects it in the emitted url, instead of always pointing at the bare section index regardless of which filtered/ paginated variant's posts are actually listed in mainEntity
waleedlatif1
commented
Jul 13, 2026
waleedlatif1
commented
Jul 13, 2026
@cursor review |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 4182dd5. Configure here.
Uh oh!
There was an error while loading. Please reload this page.
…te, and address (#5644) Adds the three fields intentionally omitted from #5638 pending real values: - legalName: 'Sim, Inc' - matches the entity named throughout the Terms of Service (apps/sim/app/(landing)/terms) - foundingDate: '2025' - address: real registered office (80 Langton St, San Francisco, CA 94103)
Summary
brandandcontactPoint.url(verifiedsameAsalready matches footer; omittedfoundingDate/legalName/address— nothing in the repo backs those values)mainEntity(realItemListof posts) to/blogand/libraryCollectionPage schemaTechArticle-only posts silently losing Google rich-result eligibility (TechArticleisn't in the allowlist) by emitting a multi-type["BlogPosting", "TechArticle"]for technical posts, driven by a newtechnicalfrontmatter flag (defaultstrue; setfalseonly on the Series A funding post)speakable.cssSelectortarget and relative (invalid)image.urlon article schemaLandingFAQ— already correct everywhere, no changes neededType of Change
Testing
bunx tsc --noEmitcleanbun run lintclean (19/19 packages)/blog,/blog/multiplayer,/blog/series-a,/library,/library/ai-agent-ideas,/models,/integrations/slack— confirmed real JSON-LD data rendering in every caseChecklist