How (and Why) We Broke Through Facebook's Ban on Blockers

When Facebook “blocked the blockers” last week, it likely knew that it would kick off a cat-and-mouse chase. Facebook’s engineers are smart enough to know how most adblockers work, and to figure out the their initial changes would be overcome quickly. It then took Facebook just a few more hours to circumvent Adblock Plus’s workaround.

It’s worth remembering that desktop ads are also only 20% of their revenue, and even if 20% of users blocked ads (and we don’t have stats for FB ad blocking though our own STANDS numbers seem to be much lower than the average), this move will not have a significant impact on Facebook’s bottom line in the short term.

Why bother, then? Because Facebook is thinking ahead. Facebook is engaged in a long-term effort to ensure advertising remains a sustainable growth engine. Witnessing the meteoric rise of ad blocking on desktop, Facebook rightly assumes the same could happen on mobile in the coming few years. That’s where Facebook makes its money, and that’s why they are concerned about that prospect.

They know they can’t win with a long term strategy of blocking blockers, but they still get a lot from the fight. They appear as the good guy, especially with their other steps who support more user choice around ad preferences. They show adaptability by being able to circumvent the ABP workaround in a matter of hours. And they position the blockers as the bad guys. This is important since in the next round they will probably get more aggressive.

The Cat and Mouse Game

Ads on FB are an integral part of the site. This makes identifying them harder than say, ads that originate at a third party ad server like adserver.com - because ad blockers can’t just block the https calls to adserver.com.

Instead, blocking FB ads was based on the actual HTML code that comprises the ad. More accurately, it was based on keywords, or specific text strings, that ONLY existed in ads, or sponsored stories, and not in regular posts. So, for example, if a certain post was inside an HTML container with a name like “advertisement” - ad blockers could identify it as an ad and block it.

What Facebook did initially was to just change the keyword designating ads to code that’s a little more ambiguous and harder to identify as an advertisement. But it really takes 5 minutes to figure out what’s the new “code” or keyword is: all you had to do was go into FB, right click on a sponsored post and choose “Inspect.” This will bring up a view that shows you the underlying HTML code the page. Do this on several sponsored stories, and quickly you’ll find what the new keyword is.

Here’s the new keyword. Ready? It’s “data-xt”. Any HTML container with certain properties that also contained this keyword, was an ad (obviously I’m over-simplifying, but that’s the gist of it). Adblock added this change to their filter list and voila, Facebook ads are gone again.

Or maybe not.

You see, Adblockers are pretty ancient tools as far as internet technology goes, invented over 15 years ago, designed to combat the ad technology of that time. The leading ad block products have changed little of their basic architecture throughout the years. The way they work is simple: they have a filter list, which is essentially a long list of keywords and rules about how to use them.

When you have such an adblocker installed on your browser, it runs the filter list against the HTML code of the every page you visit and every HTTP call your browser generates, and if there’s a match - an ad is blocked.

As you can see, it’s not a super-smart technology, or a technology that “understands” how a web page is built and what the user is seeing. So if the the code used inside an ad’s HTML container, such as the aforementioned “data-xt”, is also used in regular posts - those posts will be blocked as well. And that’s exactly what Facebook claimed was happening after ABP released their workaround.

So essentially, if you were using the new workaround you might be blocking ads, but you were also blocking actual content you probably want to see. That was one of the major issues with Ad Block plus’ workaround for Facebook - that it blocked non-advertising content as well.

And as if that’s not “bad” enough, Facebook pulled the obvious move and complicated matters even further: they removed even those “data-xt” keywords from most ads. Now, regular posts from your friends and sponsored posts from advertisers essentially looked the same at the HTML level.

Several days have now passed, and ABP has still not released an update that “fixes” this. So Facebook wins? Not exactly. At the end of the day, Facebook has one gaping hole in their effort against adblockers: it has to tell user that an ad is an ad - and not a regular post.

This means that the sponsored post will always have a special “mark” on them, not in the HTML, but in the actual view that we the users see, saying they are “sponsored” in a nice light grey font. Sponsored posts will also allow you to “report this ad”, and other properties that only ads have. It’s not a choice for Facebook; the FTC mandates that native ads be disclosed clearly for all users to see, and has shown a willingness to enforce that mandate. So, just by looking at the HTML containers you can’t tell it’s an ad. But a human will always be able to tell the difference - that’s what the FTC requires.

How We Beat Facebook’s Ban

So what we did was build a tool “sees” the page like a human would. Fair Adblocker can literally “see” that a post says it’s “sponsored”, or that it has other human-accessible properties that distinguish it from regular posts. Only after the determination a post is sponsored has been made do we traverse back to the HTML container that surrounds the post - and block it.

By behaving like a human, we can ensure that as long as humans can tell the difference between ads and real content - so too can the blocker.

The reason this is important is simple: users deserve more control than they have today, and just as this latest shenanigans was strategically important for Facebook, it is strategically important for users as well.

In most of the web, the use of ads has gone too far. There are too many ads, working in ways that are too intrusive, collecting too much data, and leaving too little control in the hands of users. This is why ad blocking exist - to help users achieve greater control.

Unfortunately, most ad blocking is not control - it’s just blacks out everything, indiscriminately blocking ads, and, as this case demonstrates, sometimes blocks non-advertising content as well. But in a world where ad blocking actually means control, users can choose more precisely how many ads they can handle before going nuts, what types of formats they find most annoying and would rather avoid, and sometimes even what’s relevant or irrelevant to them.

That’s why, despite being an ad blocker on the ‘wrong side’ of Facebook’s moves, we think Facebook is moving in the right direction. Giving users more control over the relevancy of the ads is a very promising first step. But Facebook can’t win the war against ad blockers outright, only the war on the concept of ad blocking. And to do that, Facebook needs to continue and give more control to user, about how many and what type of ads they are willing to see. Once they do - ad blocking will no longer be needed, at least not as we know it now.

It’s all about the balance of power. Give users more control, and end the war with ad blockers for good.