<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>ogp &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/ogp/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Sun, 24 Aug 2025 16:26:37 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>ogp &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[WebMentions, Privacy, and DDoS - Oh My!]]></title>
		<link>https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/</link>
					<comments>https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 29 Nov 2022 12:34:15 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[mastodon]]></category>
		<category><![CDATA[MastodonAPI]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[ogp]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44259</guid>

					<description><![CDATA[Mastodon - the distributed social network - has two interesting challenges when it comes to how users share links.  I&#039;d like to discuss those issues and suggest a possible way forward.  When you click on a link on my website which takes you to another website, your browser sends a Referer. This says to the other site &#34;Hey, I came here using a link on shkspr.mobi&#34;.  This is useful because it lets…]]></description>
										<content:encoded><![CDATA[<p>Mastodon - the distributed social network - has two interesting challenges when it comes to how users share links.  I'd like to discuss those issues and suggest a possible way forward.</p>

<p>When you click on a link on my website which takes you to another website, your browser sends a <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer">Referer</a><sup id="fnref:splel"><a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fn:splel" class="footnote-ref" title="This is a spleling mistake which is part of the specification so cannot be changed." role="doc-noteref">0</a></sup>. This says to the other site "Hey, I came here using a link on <code>shkspr.mobi</code>".  This is useful because it lets a site owner know who is linking to them.  I <em>love</em> seeing which weird and wonderful sites have linked to my content.</p>

<p>It is also something of a privacy nightmare as it lets sites see who is clicking and from where they're clicking. So Mastodon sets a <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/noreferrer"><code>noreferrer</code></a><sup id="fnref:spell"><a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fn:spell" class="footnote-ref" title="This one is spelled correctly. Which makes life confusing for all involved." role="doc-noteref">1</a></sup> attribute on all links. This tells the browser not to send the Referer.</p>

<p>This means sites no longer know <em>who</em> is sending them traffic.</p>

<iframe src="https://masto.ai/@stavvers/109420849116336339/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" height="650" allowfullscreen="allowfullscreen"></iframe>

<p>That's either a good thing from a privacy perspective or a disaster from a marketing perspective. Or a little bit of both.</p>

<p>Here's a related issue. When a user posts a link to your website on Mastodon, the server checks your page to see if there are any oEmbed tags for a rich link preview. But, at the moment, it doesn't check your website's <a href="https://developers.google.com/search/docs/crawling-indexing/robots/intro"><code>robots.txt</code></a> file - which lets it know whether it is <em>allowed</em> to scrape your content.</p>

<iframe src="https://mastodon.mit.edu/@jefftk/109416209502343043/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" height="400" allowfullscreen="allowfullscreen"></iframe>

<p>In the case of something like Twitter or Facebook, this is fine. If a million users post a link, the centralised social network checks the link <em>once</em> and caches the result.</p>

<p>With - potentially - thousands of distributed Mastodon sites, this presents a problem. If a popular account posts a link, their instance fetches a rich preview. Then <em>every</em> instance which has users following them also requests that URL.  Essentially, this is a DDoS attack.</p>

<h2 id="i-can-fix-you"><a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#i-can-fix-you">I can fix you</a></h2>

<p>So here's my thoughts on how to fix this.</p>

<p>When a user posts a link to Mastodon, their instance should send a <a href="https://indieweb.org/Webmention">WebMention</a> to the site hosting the link.  This informs the website that someone has shared their content.  Perhaps a user could adjust their privacy settings to allow or deny this.</p>

<p>The instance would check the site's <code>robots.txt</code> and, if allowed, scrape the site to see if there were any <a href="https://shkspr.mobi/blog/2022/11/is-open-graph-protocol-dead/">Open Graph Protocol</a> metadata elements on it.</p>

<p>That metadata should be <em>included</em> in the post as it is shared across the network.</p>

<p>For example, a status could look like this:</p>

<pre><code class="language-json">{
  "id": "123",
  "created_at": "2022-03-16T14:44:31.580Z",
  "in_reply_to_id": null,
  "in_reply_to_account_id": null,
  "visibility": "public",
  "language": "en",
  "uri": "https://mastodon.social/users/Edent/statuses/123",
  "content": "&lt;p&gt;Check out https://example.com/&lt;/p&gt;",
  "ogp_allowed": true,
  "ogp": {
      "og:title": "My amazing site",
      "og:image:url": "https://cdn.mastodon.social/cache/example.com/preview.jpg",
      "og:description": "A long description. Perhaps the first paragraph of the text."
      ...
   }
   ...
}
</code></pre>

<p>When a post is boosted across the network, the instances can see that there is rich metadata associated with the link. If there is an image associate with the post, that will be loaded from the cache on the original Mastodon instance - avoiding overloading the website.</p>

<p>Now, there is a flaw in this idea. A <em>malicious</em> Mastodon server could serve up a fake OGP image and description. So a link to McDonald's might display a fake image promoting Burger King.</p>

<p>To protect against this, a receiving instance could randomly or periodically check the OGP metadata that they receive. If it has been changed, they can update it.</p>

<p>Perhaps a diagram would help?</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/11/Mastodon-OGP-Diagram.png" alt="Crappy line drawing explaining the above." width="787" height="416" class="aligncenter size-full wp-image-44270">

<h2 id="what-other-people-say-about-the-problem"><a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#what-other-people-say-about-the-problem">What other people say about the problem</a></h2>

<div class="activitypub-embed u-in-reply-to h-cite"> <div class="activitypub-embed-header p-author h-card"> <img class="u-photo" src="https://asset.circumstances.run/accounts/avatars/109/330/846/558/995/088/original/9aae78ca8a673cb2.png" alt=""> <div class="activitypub-embed-header-text"> <h2 class="p-name" id="david-gerard"><a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#david-gerard">David Gerard</a></h2> <a href="https://circumstances.run/users/davidgerard" class="ap-account u-url">@davidgerard@circumstances.run</a> </div> </div> <div class="activitypub-embed-content"> <div class="ap-subtitle p-summary e-content"><p>yes, you should put a cache in front of a blog. nginx and wp-supercache do well. but.</p><p>mastodon's auto-DDOS feature is still obnoxious. and in a social network, technically designed in obnoxiousness is incompetent.</p><p>i realise it'd need extension of activitypub, but is anyone working on sending prerendered cards with the URL? just to save 1000 servers hammering the URL to generate their own cards locally.</p></div> </div> <div class="activitypub-embed-meta"> <a href="https://circumstances.run/users/davidgerard/statuses/109421964176048304" class="ap-stat ap-date dt-published u-in-reply-to">2022-11-28, 14:44</a> <span class="ap-stat"> <strong>7</strong> boosts </span> <span class="ap-stat"> <strong>23</strong> favorites </span> </div> </div>

<style>/** * ActivityPub embed styles. */ .activitypub-embed { background: #fff; border: 1px solid #e6e6e6; border-radius: 12px; padding: 0; max-width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } .activitypub-reply-block .activitypub-embed { margin: 1em 0; } .activitypub-embed-header { padding: 15px; display: flex; align-items: center; gap: 10px; } .activitypub-embed-header img { width: 48px; height: 48px; border-radius: 50%; } .activitypub-embed-header-text { flex-grow: 1; } .activitypub-embed-header-text h2 { color: #000; font-size: 15px; font-weight: 600; margin: 0; padding: 0; } .activitypub-embed-header-text .ap-account { color: #687684; font-size: 14px; text-decoration: none; } .activitypub-embed-content { padding: 0 15px 15px; } .activitypub-embed-content .ap-title { font-size: 23px; font-weight: 600; margin: 0 0 10px; padding: 0; color: #000; } .activitypub-embed-content .ap-subtitle { font-size: 15px; color: #000; margin: 0 0 15px; } .activitypub-embed-content .ap-preview { border: 1px solid #e6e6e6; border-radius: 8px; overflow: hidden; } .activitypub-embed-content .ap-preview img { width: 100%; height: auto; display: block; } .activitypub-embed-content .ap-preview { border-radius: 8px; box-sizing: border-box; display: grid; gap: 2px; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; margin: 1em 0 0; min-height: 64px; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview.layout-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; } .activitypub-embed-content .ap-preview.layout-2 { aspect-ratio: auto; grid-template-rows: 1fr; height: auto; } .activitypub-embed-content .ap-preview.layout-3 > img:first-child { grid-row: span 2; } .activitypub-embed-content .ap-preview img { border: 0; box-sizing: border-box; display: inline-block; height: 100%; object-fit: cover; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview video, .activitypub-embed-content .ap-preview audio { max-width: 100%; display: block; grid-column: 1 / span 2; } .activitypub-embed-content .ap-preview audio { width: 100%; } .activitypub-embed-content .ap-preview-text { padding: 15px; } .activitypub-embed-meta { padding: 15px; border-top: 1px solid #e6e6e6; color: #687684; font-size: 13px; display: flex; gap: 15px; } .activitypub-embed-meta .ap-stat { display: flex; align-items: center; gap: 5px; } @media only screen and (max-width: 399px) { .activitypub-embed-meta span.ap-stat { display: none !important; } } .activitypub-embed-meta a.ap-stat { color: inherit; text-decoration: none; } .activitypub-embed-meta strong { font-weight: 600; color: #000; } .activitypub-embed-meta .ap-stat-label { color: #687684; } </style>

<h2 id="feedback"><a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#feedback">Feedback?</a></h2>

<p>Is this a problem? Does this present a viable solution? Have I missed something obvious? Please leave a comment and let me know 😃</p>

<div id="footnotes" role="doc-endnotes">
<hr>
<ol start="0">

<li id="fn:splel">
<p>This is a spleling mistake which is part of the specification so cannot be changed.&nbsp;<a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fnref:splel" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:spell">
<p>This one <em>is</em> spelled correctly. Which makes life confusing for all involved.&nbsp;<a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fnref:spell" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=44259&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Is Open Graph Protocol dead?]]></title>
		<link>https://shkspr.mobi/blog/2022/11/is-open-graph-protocol-dead/</link>
					<comments>https://shkspr.mobi/blog/2022/11/is-open-graph-protocol-dead/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 06 Nov 2022 12:34:49 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[ogp]]></category>
		<category><![CDATA[standards]]></category>
		<category><![CDATA[twitter]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43622</guid>

					<description><![CDATA[Facebook Meta - like many other tech titans - has institutional Shiny Object Syndrome.   It goes something like this:   Launch a product to great fanfare Spend a few years hyping it as ✨the future✨ Stop answering emails and pull requests If you&#039;re lucky, announce that the product is abandoned but, more likely, just forget about it.   Open Graph Protocol (OGP) is one of those products. The val…]]></description>
										<content:encoded><![CDATA[<p><del>Facebook</del> Meta - like many other tech titans - has institutional <a href="https://en.wikipedia.org/wiki/Shiny_object_syndrome">Shiny Object Syndrome</a>.   It goes something like this:</p>

<ol>
<li>Launch a product to great fanfare</li>
<li>Spend a few years hyping it as ✨the future✨</li>
<li>Stop answering emails and pull requests</li>
<li>If you're lucky, announce that the product is abandoned but, more likely, just forget about it.</li>
</ol>

<p>Open Graph Protocol (OGP) is one of those products. The value-proposition is simple.</p>

<ul>
<li>It's <em>hard</em> for computers to pick out the main headline, image, and other data from a complex web page.</li>
<li>Therefore, let's encourage websites to include metadata which tells our services what they should look at!</li>
</ul>

<p>OGP works pretty well! When you share a link on Facebook, or Twitter, or Telegram - those services load the website in the background, look for OGP metadata, and display a friendly snippet.</p>

<p><del>Facebook</del> Meta were the driving force behind OGP - and have now left it to fester.</p>

<ul>
<li>The website - <a href="https://ogp.me/"></a><a href="https://ogp.me/">https://ogp.me/</a> - still works.</li>
<li>But the <a href="https://www.facebook.com/groups/opengraph/">Facebook OGP  Discussion Group</a> is now full of spam.</li>
<li>The <a href="https://groups.google.com/g/open-graph-protocol?pli=1">Developer Mailing List</a> is broken.</li>
<li>The <a href="https://developers.google.com/+/web/+1button/#plus-snippet">Google Documentation</a> links to a dead Google+ page.</li>
<li>And the <a href="https://github.com/facebookarchive/open-graph-protocol">GitHub Page</a> has been archived.</li>
</ul>

<h2 id="is-ogp-finished"><a href="https://shkspr.mobi/blog/2022/11/is-open-graph-protocol-dead/#is-ogp-finished">Is OGP finished?</a></h2>

<p>And, that might be fine. <del>Facebook</del> Meta are a small company with limited resources. They can't afford to fund standards work indefinitely. And, anyway, OGP is complete, right? It has all the tags that anyone could ever possibly want. Why does it need any improving?</p>

<p>Well, that's not the case. We know, for example, that Twitter have created <a href="https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/markup">their own proprietary OGP-like meta tags</a>. Similarly, <a href="https://help.pinterest.com/en-gb/business/article/rich-pins">Pinterest have their own as well</a>. And even <a href="https://search.google.com/test/rich-results">Google are going their own way with Rich Snippets</a>.</p>

<p>This is annoying for developers. Now we have to write <em>multiple</em> different bits of metadata if we want our links to be supported on all platforms.</p>

<p>Standards work is never "finished". Developers <em>want</em> to add new features. Users <em>want</em> to interact with new forms of content.</p>

<p>Tomorrow someone is going to invent a way to share smells over the Internet. How does that get represented in an Open Graph Protocol compliant manner?</p>

<p><code>&lt;meta property="twitter:olfactory" content="C₃H₆S"&gt;</code> or
<code>&lt;meta property="facebook:nose"     content="InChIKey/MWOOGOJBHIARFG-UHFFFAOYSA-N"&gt;</code> or
<code>&lt;meta property="og:smell"          content="pumpkin spice"&gt;</code> or...</p>

<p>We know from bitter experience that having several mutually incompatible ways to implement something is a nightmare for developers and provides a poor user-experience.</p>

<p>So we create standards bodies. They're not perfect, but a group of interested folks can do the hard work to try and satisfy oppositional stakeholders.</p>

<p>This is my plea to <del>Facebook</del> Meta. If you're no longer interested in improving OGP, OK. You do you. But hand it over to people who want to keep this going. Maybe it's the <a href="https://www.w3.org/">W3C</a>, or <a href="https://indieweb.org/The-Open-Graph-protocol">IndieWeb</a>, or <a href="https://schema.org">Schema.org</a> or <em>someone</em>.  Hell, I'm not busy, I'll take it on.</p>

<p>Remember, if you love something, let it go.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43622&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/is-open-graph-protocol-dead/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
	</channel>
</rss>
