« Identity surfing, pseudonymity, reputation | Main | Reminder! »

Opinionated linking: Adding opinion metadata to hyperlinks

No, I'm not putting in a link to Orlowski's piece. You can get there through Jonathan. I don't want to reward Orlowski by pushing him up the blog rank. (This is why we need Kevin Marks'"vote" attribute that lets us specify that although we're linking to something, we don't like it.)
Stating disagreement could be done via several methods; I think a combination of two of these methods is the best route, and I'll state that route below. Following the policy of "practice what you preach", I'll be implementing these gradually here as well.

Two notes. First, I'm not focusing on disagreement; being able to say "i+agree" and "i+disagree" is the goal. Second, non-opinionated links should be interpreted as indicating interest, without opinion; if desired, we can explicitly state "neutrality".

Here's a link to the article in question, with the disagreement indicated in the URI and CSS.

Non-standard "opinion" attribute for A tags
<a href="..." opinion="negative">

This allows us to mark any link with an opinion; using a limited set of keywords ("negative", "positive"), we can indicate our opinion of a given link.

This method has critical flaws: "opinion" is not a valid (X)HTML attribute, ranking systems (like Daypop) discard the attribute, and the "opinion" is not presented to the either the user or the linked-to site (more on this below) -- they have to dig into HTTP referrers and into the HTML source to find out the opinions of a given link.

CSS "opinion" classes for A tags
A.negative { color: red; }
<a href="..." class="negative">

This allows us to mark any link with an opinion; using a set of keywords defined in CSS ("negative", "positive"), we can indicate our opinion of a given link.

This method resolves one of the above flaws -- the visibility of the opinion to the person clicking the link. Using CSS, we can indicate positive links with a blue solid underline, negative links with a red dashed underline, neutral links with a black solid underline. Whatever.

Unfortunately, it doesn't solve any of the previously listed problems of the "opinion" attribute; it's still not indexed by engines, and the linked-to site has to do context discovery.

Locations that aren't in the page
<a href="...#opinion=positive">
<a href="...#opinion=negative?...&...">

This allows us to mark any link that doesn't already have a #location defined with an opinion.

There's a couple disadvantages: the opinion won't show up in the server logs, and the user might not see the opinion in the address bar. One strong advantage comes to mind, though; I'm reasonably certain Google's rankings treat in-page links as distinct weights, given the advent of single-page blogger archives.

Extra CGI parameters
<a href="...?opinion=positive">
<a href="...?...&opinion=negative">

This allows us to mark any link with an opinion; using a CGI parameter, we can indicate our opinion of the link.

This method resolves one of the above flaws -- the visibility of the opinion to the linked-to site. Properly configured, they can break down the statistics of incoming links by opinion -- and perhaps The Register would understand more clearly that Orlowski isn't popular -- to the contrary, he's reviled. That he's on Daypop because we're angry with him, not because what he writes is well-liked.

A note about ranking engines is in order. I presume herein that ranking engines will not strip the CGI parameters from the link, as doing so might break perfectly valid links that require other parameters. As almost every link I've seen has no CGI parameters, I don't have much real-world data to evidence this one way or the other, but if the popularity of this idea rises enough, perhaps they'll be influenced!

Putting it all together
<a href="...?i+disagree" class="positive">

Combining the CSS method with the CGI parameter method, we can implement a solution for opinionated linking, in a form that evidences the opinion of the link to Daypop, the person clicking the link, and the linked-to site. The CGI parameter serves to distinguish the link from other links to the same page, with differing opinions. As an opinionated link passes from blog to blog, its index on ranking sites such as Technorati will rise independent from the same link with a different opinion (or none at all).

Supporting XHTML: my:opinion
<a class="positive" ... xmlns:my="http://semantic.web/link/opinions" my:opinion="positive" >

torstens provided a nice way to add XHTML support to this; a namespace for opinion. I've integrated it into the master example up top, and I recommend its use highly in conjunction with the CSS and CGI query.

Linkback: xmlns, +1, one week.

Changelog: Improved the abstract slightly. Corrected and reformatted the xmlns:my example.

Link: Kevin mentions a teaser about "vote links".

Revised: Heavily reformatted, added #opinion links.


I like this a lot. If you do more with it, please keep me in mind -- its hard to keep track of everything that I'd like to support but this one seems particularly cool.

Nice idea! I will get it a chance as I modify my blog layout in the next days.

This is a great idea. I'd also be willing to set this up.

what if the url you're linking to already has a query string... adding the ?... this would break the link on a number of larger sites using content management systems and a number of homebrew systems.

Perhaps; changing the ? to an & (http://foo/bar?baz&i+disagree, for instance); it's definitely worth noting that the stricture of the remote system may lead it do get annoyed when finding the CGI parameter named "i disagree", too -- but most seem to take the extraneous data and ignore it, which is nice. As long as you don't double up on the question mark, things seem to work out mostly okay. I'll try to integrate some suggestions regarding that situation into the document; thanks :)

The namespaced example is really the only compatible and useful way to do this. The CSS stuff is a hack and likewise so it attempting to butcher the URLs. If anything the class style would belong on the contents of the element and not within the link itself. Or wrapped as a span tag.

I'm really liking the namespace example as well; the CSS stuff is very definitely a hack, and so is butchering the URLs.

That said, I'm okay with useful hacks, when they serve a purpose; the CSS hack serves to indicate something to the user, which is certainly optional. The CGI GET query hack serves to indicate something to the linked-to-site, something the namespaces don't provide.

I'll use hacks when they're mostly harmless; so far, these are. Any way to turn namespaces into something in the remote site's server logs?

Why can't you just use a rel="opinion-negative" or a rev="opinion-positive" or some combination? The rel and rev attributes can take whatever you want and still be valid.

Why are we turning this into a mob of Amazon washups modding opinions up or down?

Also, shouldn't we more finely filter opinions than into simply "positive" and "negative"?

Hm, the rel/rev attributes look interesting; it's a nice way to solve it without using the XHTML stuff, but still doesn't help with sharing the information with either the clicker or the clicked-to parties.

I chose to start with "positive" and "negative", knowing that there'd be a whole spectrum of possible opinions that could be chosen from. Sometimes adding in complexity from the start can still-birth an idea; having done so a few times, I didn't feel it necessary to note this -- as you've demonstrated, people can be creative on their own :)

However, I'll say it here: Yes, you can use this for your own opinions. I just limited the example set to two of them, because I was addressing a specific problem (as described by the link quoted at the top of the article).

Positive, Neutral, Negative Votes
Visibility and Classification

The comments to this entry are closed.

My Photo

Recent Posts

Powered by TypePad




  • Antispam
  • Cloudmark
  • Shadows
  • Styles
  • You were here
  • floating atoll


  • Search


  • Ads