One of the points of writing on the Internet is our ability to link pages together in a web. We do this in HTML with links, like this:
My friend Ton <a href="https://www.zylstra.org/blog/2018/07/wrapping-my-head-around-webmentions">writes about Webmention</a>.
When that HTML appears here on my website, it looks like this:
My friend Ton writes about Webmention.
And if you click that link, you go to Ton’s blog post.
Wouldn’t it be nice if Ton had way of knowing he was linked to!
That’s what Webmention is for. In addition to the linking, Webmention involves a notification–”hey other website, you got linked to.”
The message is simple; if I want to let Ton’s website know that I’ve linked to it, I send it:
To know where to send it, I need to look at the source of Ton’s page–my target–for something that looks like this:
<link rel="webmention" href="https://www.zylstra.org/blog/wp-json/webmention/1.0/endpoint" />
That tells me “to let this blog post know it was linked to, send the Webmention to this URL.”
(It there’s nothing on the other end of the link that references Webmention, it’s safe to assume it doesn’t receive them, and not send a message; Webmention remains a nascent standard).
Drupal 7, which I use to manage this blog, has no built-in support for Webmentions. The Vinculum module comes tantalizingly close to supporting them, but hasn’t been updated in a long while, and it doesn’t work out of the box.
To work around this limitation, I ripped out the best parts of Vinculum–yeah open source!–and wrote my own Webmention module. Right now it only sends Webmentions, which is okay because, for the time-being, I can use the excellent non-intrusive Webmention.io to handle that part.
As Ton writes in his post, “The webmention itself is simple… What happens next is less simple.”
Here’s the less-simple part that happens once I click “Post”.
First, my module has to look at the body of my post and extract the URLs of all the pages I’ve linked to; for this post, it gets:
https://www.zylstra.org/blog/2018/07/wrapping-my-head-around-webmentions https://indieweb.org/Webmention https://www.drupal.org/project/vinculum https://webmention.io https://ruk.ca/content/digging-webmention https://www.zylstra.org/blog/wp-json/webmention/1.0/endpoint https://aaronparecki.com/2018/06/30/11/your-first-webmention https://indiewebify.me/
Next it has to find out which of those, if any, have the ability to receive Webmentions; it finds these endpoints:
https://www.zylstra.org/blog/wp-json/webmention/1.0/endpoint https://webmention.io/indiewebcamp/webmention https://webmention.io/pingback/webmention https://webmention.io/aaronpk/webmention
And, finally, for each of those it sends the actual Webmention.
If you’re looking at adding Webmention superpowers to your writing on the web, take a look at Sending your First Webmention from Scratch, which is a very clear step-by-step guide to the system, with some helpful pointers to its fiddly bits. And, indeed, because I sent that post a Webmention, you’ll find a link back here:
The IndieWebify.Me tool is also a useful resource for debugging the same fiddly bits.
(By the way, should you send a Webmention to this post, it will be received but not–yet–displayed here; that’s my next step).