From 3e99e3e8b1647e27bb5cfa49db38593df9d26da9 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 22 Sep 2026 16:54:00 +0100 Subject: [PATCH] Set og:type to article so Pinterest's Rich Pin validator finds one Pinterest only recognises og:type "article" or "blog" as Rich-Pin eligible; the preview page was sending "website", which Pinterest never treats as a Rich Pin regardless of what other og:/twitter: tags are present -- every other unfurler (Slack, Facebook, Discord, Bluesky) was already unaffected since they don't gate on og:type the same way. Also adds article:section (the term kind -- class/individual/template/ term) since it's free to provide and Pinterest lists it as optional- but-useful; og:site_name was already present and is Pinterest's other strongly-recommended tag. --- src/test/test_link_preview.py | 14 ++++++++++++++ src/vfbquery/link_preview.py | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/test/test_link_preview.py b/src/test/test_link_preview.py index 7703d7e..ec48c37 100644 --- a/src/test/test_link_preview.py +++ b/src/test/test_link_preview.py @@ -156,6 +156,20 @@ def test_page_carries_every_tag_an_unfurler_reads(): assert 'http-equiv="refresh" content="0; url=https://v2.virtualflybrain.org/org.geppetto.frontend/geppetto?id=VFB_jrchjrch"' in page +def test_page_qualifies_for_pinterest_article_rich_pin(): + # Pinterest's Rich Pin validator requires og:type to be exactly "article" + # or "blog" -- "website" (what this used to send) is never eligible, so + # every VFB term page silently failed Pinterest's Rich Pin check even + # though the ordinary og:/twitter: preview worked fine everywhere else. + # og:site_name is "strongly suggested" by the same docs and was already + # present; article:section is optional but free to provide here. + page = link_preview.render_preview_html(_neuron()) + tags = _tags(page) + assert tags["og:type"] == "article" + assert tags["og:site_name"] == link_preview.SITE_NAME + assert "article:section" in tags + + def test_page_escapes_hostile_ontology_text(): info = _class_with_example() info["Name"] = 'x">' diff --git a/src/vfbquery/link_preview.py b/src/vfbquery/link_preview.py index 6e139f2..68a511c 100644 --- a/src/vfbquery/link_preview.py +++ b/src/vfbquery/link_preview.py @@ -139,12 +139,13 @@ def render_preview_html(info): {m['title']} - + +