A reply (or comment) is a kind of post that is a text (typically, though photos are possible too) response to some other post, that makes little or no sense without reading or at least knowing the context of the source post.
Replies rarely have names/titles, though they sometimes have other structure like multiple paragraphs, or blockquotes from the source that are being specifically responded too.
Why reply on your own site
You should post replies on your own site so you can own your replies, regardless of what happens to the page or site you were commenting about.
Why send webmentions for replies
You should automatically send webmentions to links you're replying to, to participate in federated indieweb commenting on others' sites! (this is a big milestone for any indieweb implementation)
- To demo real-time comments showing up, e.g. on aaronparecki.com
Why fallback to pingback
If the thing you're replying to lacks a webmention endpoint, you should automatically look for a pingback endpoint and send that instead (e.g. in HEAD/GET results), to support posting comments on indieweb community member's sites that receive pingbacks but not webmentions, e.g. Laurent's Testing #indieweb federation.
Post a reply
an indieweb reply in response to an original post
- Write a post (e.g. note) on your own site
- Link to the original
rel="in-reply-to" to the link only on the post's permalink page.
- If you are using the h-entry microformat to mark up your comment (you should be), add
class="u-in-reply-to" to that link as well
- Send a webmention from your server to the original's server
Ideally your server/software should automatically do the (3) webmention for all links in your post.
Send Webmentions From Reply
Do proper webmention discovery:
- in particular do a HEAD request first, then GET if no endpoints found and type is text/html or application/xhtml+xml.
- simplest way to both minimize bytes requested by my server and avoid GETting non-HTML links (which I do link to plenty often in my posts)
- if no webmention endpoints found, do fallback discovery for pingback inside same HEAD/GET results and send pingback, using an approach like https://gist.github.com/aaronpk/5744879
POSSE a reply
- Set proprietary reply-to on POSSE copies. E.g. when POSSEing notes to Twitter that are themselves @-replies (or you can find a POSSE'd copy on Twitter of the post that you're commenting on), set the
in_reply_to_status_id to the id of tweet the @-reply is a response to. This too should be automatically handled by your server/software. For details see:
- Add rel-syndication link from original reply to POSSE copy
- Send a webmention from original reply to the post it is in reply to. If you already sent a webmention before adding the rel-syndication link, send another webmention so the target has a better chance of deduplicating with any POSSE replies they've received, and preferring your original reply post.
Setting the proprietary reply-to on POSSE copies helps silo readers better understand/follow what you're replying to When B posts a reply to A's post and sends a webmention, and both A and B POSSE their posts, wherever they happen to both POSSE to (e.g. on Twitter), their POSSE'd copies link-up there as well. That way those on the silo (e.g. Twitter), will be able to follow the conversation, even when A and B are replying/linking directly peer-to-peer between their indieweb posts.
Indieweb examples of a reply post that was automatically POSSE'd to Twitter with the in-reply-to-status-id set to the POSSE Twitter copy of the original post being replied to.
As an implementer, consider this in question form:
- When you post a reply regarding an indieweb post, do you also when POSSEing your reply to Twitter give it the in_reply_to_status_id of the Twitter copy of the original indieweb post (that you're commenting on)?
Auto-discovery of the POSSE'd copy on Twitter of the post that you're commenting on:
- How do I find POSSE'd copies of the post that I'm replying to? (e.g. in "To POSSE replies" above, to be able to "find a POSSE'd copy on Twitter of the post that you're replying to")
- Proposed answer: at the permalink of the original post that you're replying to, look for
rel~=syndication links, or if not found, then look for
class~=u-syndication links inside the h-entry. See posts-elsewhere which describes how links to syndicated copies of posts are published today and suggests markup for doing so.
- If no rel-syndication or u-syndication links are found (thus not finding a POSSE'd copy to Twitter of the post that you're commenting), consider providing a UI (e.g. an input field) for the author of the reply to manually enter in the URL of the POSSE'd copy on Twitter of the post that they're commenting on.
- See: posse-post-discovery for an algorithm and more details.
Auto-discovery of an original post from its POSSE'd copy that you're replying to:
- How do I find an original post of a POSSE'd copy that I'm replying to?
- e.g. in "Link to the original" in the "Make a comment" section above, it would be better if your implementation automatically detected when you're trying to reply to a POSSE'd copy (e.g. a tweet), auto-discovered the original, and linked to the original post instead (much more indieweb-friendly).
- in short:
- look for a rel=canonical link in the POSSE'd copy that links back to an original - use that
- otherwise if a parenthetical permashortlink is the last thing in the POSSE'd copy, convert that to a URL, and do the next step that URL as the last thing
- otherwise if a URL is the last thing in the POSSE'd copy, go retrieve that URL and see if it links back to the POSSE'd copy with rel=syndication then use that URL
- See: original-post-discovery for more details.
Display a reply post
How to display your own replies / comment posts on your own site.
(This section could use expansion, details)
- First, show the context of what you're replying to, whether you're replying to single original post, or posting a multiple-reply
- Consider unwrapping shortened URLs in that context, e.g. URLs of shortener domains t.co, bit.ly, j.mp, etc. both in display and in href.
- The rest of your presentation should be consistent with whatever kind of reply you've posted, e.g. a note or an article
Update a reply
When you update a reply post on your site:
- explicitly note the datetime updated with a
dt-updated property in the h-entry of the reply
- "Updated: <time class="dt-updated">YYYY-MM-DD HH:MM:SS</time>" presentation up to you
- send another webmention to the original post with your updated reply's permalink.
If a server receives a webmention for an existing comment, the server should:
- re-request the reply permalink that it was sent
- if it returns a 410 GONE, the server should deleted it. See handling deleted posts.
- otherwise re-retrieve the reply h-entry and
- make sure it's still in-reply-to the original (if not, but still links back, downgrade it to a mention. if neither, then treat it as deleted and remove/tombstone accordingly per handling deleted posts).
- update the content of the comment on your site
- perhaps note the dt-updated for display purposes
- Apart from the content, converspace has also been updating h-card info (author name, url, photo) and reply type (mention, reply, like, repost) which has been useful when the source URL does not have proper markup when making the initial webmention and then fixes it for subsequent webmentions — Www.sandeep.io 03:43, 26 June 2013 (PDT)
- The time-period to update a comment should be limited (f.e. 5 min) so that none could destroy the context of a result discussion, by editing the whole comment. --Matthias Pfefferle
- This should be dependent on the target. Targets could employ different strategies like storing versions of comments (like Facebook does) or just mark a comments as being edited with a list of edit timestamps. — Www.sandeep.io 04:03, 26 June 2013 (PDT)
- If you are moderating new comments, don't forget to also moderate updates. -Www.sandeep.io 20:22, 7 July 2013 (PDT)
Delete a reply
When you delete a reply post on your site, you server should send webmentions to all the links you mentioned in your post.
When your server gets a request for the permalink of the reply that was deleted, it should return the 410 GONE HTTP status code.
For more details see: handling deleted posts.
How to receive an indieweb comment replying to an original post
- Listen for pingback/webmention on your server (have your server software support)
- Link to it if it refers to a permalink on your site, and display it (or a summary) under your original post at that permalink.
- let any comments pop up automatically at some URL, e.g.
- only show comments under posts with authors that pass an intelligent whitelist/manual approval
- commenter is mentioned in the note they're replying to
- commenter is in your contacts list
- commenter is 1, 2, etc degrees of separation from you
Even better would be if original post(s) had a "Reply" webaction button which upon clicking, took the reader/commenter to their own blog's posting interface, with a (2) Link to the original (to make a comment) already pre-filled-in to which the commenter could simply add text commentary and then post.
So you've implemented accepting webmentions, now how do you display them on your site?
- Parse the source of the webmention for (the first) h-entry.
- If the hyperlink in the h-entry to the webmention target has in-reply-to markup, display the h-entry (summary/content abbreviated as necessary) in a "Comments" section, perhaps in the post footer. See comments-presentation for details.
- Otherwise if the hyperlink to the original post lacks in-reply-to markup, then add it to a "Related Articles" or "Mentions" section, again in the post footer.
Beware if you receive and display comments, apparently spammers are now attacking indieweb-like blogging solutions:
tl;dr: reply is the post type, a comment is a reply syndicated into the context of the original.
Is a "reply" (or are replies) just a special case of a comment?
Replies on Twitter typically start with a name reference (@-name, indieweb URL).
Whereas comments only sometimes start with an explicit name reference.
Another distinction (perhaps useful for indieweb discussions) is context:
- A reply is the permalink to a reply post - (part) of the post that is being replied to might be displayed (typically abbreviated, simplified, or de-styled) in a reply-context
- A comment is the syndicated copy of a reply shown below (or otherwise adjacent to) the original post (that the reply is in-reply-to), likely copied there via a webmention notification and parsing microformats2 h-entry markup at the reply permalink.
More evidence/distinctions/use-cases welcome.
Examples of Replies
IndieWeb community members's replies (comments) on their own site in reference to a post on some other site:
Best practice - threaded POSSEd tweets - replies posted on the indieweb site and POSSE'd to Twitter such that the syndicated tweet links back to tweet that is being replied to - thus threading the tweets together on Twitter and providing a good experience there.
Adhoc / prose replies - prose and inline links being used to indicate what's being replied to:
- tantek.com - using "in-reply-to: URL" prose in the post itself.
Whilst most commenting implementations allow comments on the post level, an increasing number of silos are allowing granular comments on, for example, words, sentences or paragraphs:
- Medium allows per paragraph comments, using Twitter as commenter sign-in/identifier. Select text in a paragraph also brings up a plus (+) and a tweet button. The (+) button simply enables/adds to the comments for the paragraphs, whereas the tweet button quotes the selected text in a Twitter-specific Tweet web action that pops up a window to complete the action on Twitter. Very similar interaction as the select-to-quote webaction with post verb in the web action toolbelt.
- Branch discussions can be forked on sentence level
- The “Real World Haskell” online book has per-paragraph comments (example)
- TheyWorkForYou have annotations for each statement in Hansard (the official record of what is said in the British Parliament). These are shown inline. Examples: 1, 2
- SoundCloud accepts comments in specific moments (seconds? microseconds?) of any published song or audio.
examples of displaying a reply post to a single original post (that original itself shown (partially) as context on the reply permalink) :
Aaron Parecki has been using p3k to post replies to aaronparecki.com since ????-??-??. E.g.
Content hosting / blogging software:
- There are open source libraries for pingback and webmention that you can use to add this functionality to your own blogging software.
Silo Examples of comment UIs/UX on posts.
Some silos have a comments embed which is used by various sites to host comments elsewhere:
Open source commenting embed:
- Juvia - a commenting system you can install on your own server similar to Disqus and Intense Debate
What is the difference between
rel attributes are scoped to the entire page, microformats u-* classnames are scoped to the closest ancestor with class=h-*. Therefore on a page listing replies it would make little sense to have rel=in-reply-to links for all the replies on the page as they’d all be scoped to the list page, whereas it’d be completely appropriate to have u-in-reply-to properties on each of the h-entries.
tl;dr: use u-in-reply-to everywhere, and rel=in-reply-to on post permalink pages.