Sometime around 2010–2012, Google invited our team at ThaiVisa.com to try AdSense JS. By then, we had been running AdSense for years. The invitation gave us something unusually valuable for a publisher of a large discussion forum: more control over how Google’s ads looked on our pages.
We could design the ads around the forum’s layout. A standard ad unit came with a set of choices. With the feature we were invited to try, we had considerably more room to decide how the ads should look. That mattered on ThaiVisa, later known as ASEAN NOW, because a single forum template could serve thousands of very different discussions.
What regular AdSense publishers could change
When Google announced the self-service version of AdSense in June 2003, the proposition was simple. Google matched text ads to the content of a page, and publishers earned money when readers clicked. Our team started using AdSense in July 2003. I describe that earlier period in my AdSense publisher journey since 2003.
By 2011, standard AdSense publishers already had some control over appearance. Google’s Ad Styles announcement described reusable combinations of colours, fonts and corner styles. If you edited a saved style, every unit using it could pick up the change. That made it easy to try a different look on a few units before changing the rest of the site.
There was also a clear permission boundary. Google’s June 2011 implementation guidance encouraged publishers to experiment with placements and formats and said that changes to an ad’s appearance, behaviour or targeting generally required explicit approval. That is what made the invitation significant. We had been given room to experiment that a publisher working from the standard controls could not assume they had.
What extra design control was worth
The most useful way to explain the difference is to imagine designing a text ad for a narrow forum sidebar. A change in font size can affect whether a headline wraps into two lines or three. The width determines how much room is left for the discussion alongside it. The colour and typeface determine whether the ad feels like part of a well-designed page while still being recognisable as advertising. With a stock unit, you start with the format and make it fit. With more control, you can start with the space you actually have.
There is contemporary evidence for that wider range of options. In 2007, Digital Inspiration documented AdSense Premium implementations, describing custom dimensions, font sizes, styles and colour schemes, and showing examples from About.com. That account gives a sense of what some publishers could do at the time. The examples describe the market around us. At ThaiVisa, the extra control let us style ads around the forum’s design.
For a forum, that flexibility had practical value beyond making a single page look better. A discussion can be a handful of short replies or a long thread full of quoted text and images. A placement that works next to one thread can feel cramped on another. When the same template is used across a large site, a small design decision gets repeated every time the page loads.
How AdSense JS gave us control over the markup
AdSense JS worked by returning ads as JavaScript data. The telltale setting was google_ad_output = 'js'. With this integration, Google supplied the ad data to a JavaScript callback named google_ad_request_done(google_ads). The publisher’s code took the returned headline, description and links and rendered them in its own HTML. We could work with our own markup and CSS, which gave us control over details such as line wrapping, spacing and the way several ads sat together in a block.
A January 2009 archive entry by Richard Wilson preserves a real example that references a Los Angeles Times article. The code asked for up to three text ads. Its callback looped through the ads Google returned and used their fields to build linked headlines, description paragraphs and display URLs with the publisher’s own CSS classes. It shows the same mechanism we used at ThaiVisa and predates our invitation.
The flow looked like this in simplified JavaScript. The rendering function stands in for the publisher’s own HTML and CSS.
google_ad_output = 'js';
function google_ad_request_done(google_ads) {
for (const ad of google_ads) {
renderTextAd({
headline: ad.line1,
description: [ad.line2, ad.line3].filter(Boolean).join(' '),
clickUrl: ad.url,
displayUrl: ad.visible_url
});
}
}
Regular AdSense also used JavaScript. Its classic tag loaded show_ads.js, and in 2013 Google introduced an asynchronous AdSense tag so the rest of the page could continue rendering while the script loaded. The distinction was who built the ad’s HTML. With JavaScript output and a callback, that part was in the publisher’s hands.
Google was also offering deeper styling in a separate product around the same time. Its March 2011 Custom Search Ads announcement described controls for exact unit width, the number of ads shown, layout, font face and font size. Those ads were designed for a publisher’s own search results and matched to the visitor’s search query. It is a well-documented example of the degree of design control Google was willing to offer in that era. The public announcement does not identify the invitation ThaiVisa received, so I keep the two accounts separate.
Why the Google relationship mattered
For much of my time running ThaiVisa, we had a Google representative we could talk to about placements and how to use AdSense alongside Ad Exchange and other networks. That relationship was valuable because monetising a forum involved decisions that went well beyond pasting a tag into a page. We had to think about what each placement earned, how it affected the experience of reading a thread and what happened when a member posted something that raised a policy issue.
ThaiVisa had an active moderation team, but on a busy forum something could still slip through. Google temporarily interrupted regular AdSense serving over policy issues on several occasions, and we had to fix the problems. That experience made the boundaries around advertising very real. We could have extra flexibility in how an ad looked and still have to pay close attention to the page it appeared on.
The time Google suspended our AdSense JS access
Google’s AdSense policy team oversaw how publishers used the feature. The team had its own view of where the limits were and what we could do with the extra freedom. At one point, it temporarily suspended our access to AdSense JS itself. That suspension applied specifically to the JS feature.
At the time, premium publisher features seemed harder to lose. That made the suspension all the more memorable. We had been invited to try something that gave us unusual control over the ads, and the policy team could still take that access away.
AdSense JS let us treat advertising as part of the forum’s design. On a discussion forum, the thread is what the reader came for. Having more control over the ad gave us a chance to make the space work for both the reader and the business that paid to keep the forum running.
For publishers evaluating modern ad layouts, the same principle still applies: design, demand, policy and reader experience have to work together. See my publisher guide to ad yield optimization, Google Ad Manager, AdX and AdSense consulting, or a structured publisher revenue audit.
Want an experienced review of your publisher advertising setup?
I can assess placements, demand, policy exposure and revenue opportunities as one system.