The AI answer is an ad
I used to trust Google the way I trust a dictionary. You look something up, you get the definition. No agenda. No commission. Just the thing.
Last week, Google published a blog post about their new ad formats for the AI era of Search. I read it through twice, and somewhere between “Conversational Discovery Ads” and “Highlighted Answers,” the dictionary started trying to sell me a fridge.
The story in one sentence
Google is building Gemini into the ads themselves - so the AI that writes your search answer can also write a personalized pitch for a sponsor, indistinguishable in format from an organic recommendation.
--> // making it invisible to querySelectorAll. // // `data-cfasync="false"` keeps this rescue script executable even when // Rocket Loader is active. It rescues module scripts via two strategies: // 1. Query the DOM for type$="-module" + src (covers case A) // 2. Regex-parse the raw HTML for commented-out script tags (covers case B) // Dynamically-created scripts bypass Rocket Loader entirely. (function () { if (window.__markdyRescue) return; window.__markdyRescue = true; var rescued = false; function rescueModuleScripts() { if (rescued) return; rescued = true; var srcs = []; // Strategy 1: Rocket Loader kept the tag in DOM but changed the type. // type="module" → type="{uuid}-module" (still has src attribute) document.querySelectorAll('script[type$="-module"][src]').forEach(function (s) { srcs.push(s.src); }); // Strategy 2: Rocket Loader COMMENTED OUT the script tag entirely: // // These are invisible to querySelectorAll, so we parse the raw HTML. // We handle both attribute orderings (type-first or src-first). var html = document.documentElement.innerHTML; var reSrcFirst = //g; var reTypeFirst = //g; var m; while ((m = reSrcFirst.exec(html)) !== null) { srcs.push(m[1]); } while ((m = reTypeFirst.exec(html)) !== null) { srcs.push(m[1]); } // Re-inject each found src as a real module script. // Deduplicate first, then inject. Dynamically-created scripts bypass // Rocket Loader entirely. Modules with the same URL are only executed // once by the browser (cached), so re-injecting already-running scripts // is safe. var seen = {}; srcs.forEach(function (src) { if (seen[src]) return; seen[src] = true; var fix = document.createElement('script'); fix.type = 'module'; fix.src = src; fix.setAttribute('data-cfasync', 'false'); document.head.appendChild(fix); }); } // Rescue when user clicks the placeholder (fallback if autoplay failed). document.addEventListener('click', function (e) { var t = e.target; if (t && typeof t.closest === 'function' && t.closest('.markdy-placeholder')) { rescueModuleScripts(); } }); // Rescue automatically after a short delay for autoplay. // Only fires if initAll() never ran (no data-markdy-init on any root). setTimeout(function () { if (document.querySelector('.markdy-root:not([data-markdy-init])')) { rescueModuleScripts(); } }, 1500); }());What they shipped
The announcement covers five new formats, and the interesting ones are the first two:
Conversational Discovery Ads are the strangest. When you type a long, conversational query - “I want my house to smell like a rainy forest, low maintenance options” - the Gemini model reads your query and writes a custom ad that answers it. The advertiser doesn’t write that copy. Gemini does. The advertiser just gets the click.
Highlighted Answers are more straightforward but arguably more damaging: when AI Mode produces a list of recommendations (say, “best language apps for a trip to Japan”), eligible high-quality ads can appear as items on that list, labeled “Sponsored.” You see a ranked list. Some entries are organic. Some are paid. You’re expected to notice the fine print.
Then come three more:
| Format | What it does |
|---|---|
| AI-powered Shopping ads | Gemini writes a custom product explainer per search query |
| Business Agent for Leads | Instead of a form, you chat with a brand’s AI; Google hosts the agent |
| Direct Offers / Promotion Bundling | Gemini assembles custom deal bundles based on your search intent |
The Direct Offers expansion is also real: Chewy, Gap, and L’Oréal have been in the pilot since January 2026. Travel partners like Booking and Expedia are next.
Why this hit 584 upvotes on Hacker News
Google has been threading this needle for years - making ads look like results - but text inside an AI-generated answer is categorically different from a link in a sidebar.
Adblockers work by targeting DOM elements: script tags, image URLs, known ad network endpoints. They can’t block a sentence that Gemini wrote inside the response body. That’s the shift. For twenty years, the technically literate had a clean exit route. This closes it.
The post hit the front page not just because of the content, but because of the implied announcement: AI Mode is the default Search experience now. The old plaintext web results are still there, but Google’s energy - and Google’s revenue model - is pouring into the conversational layer. And now that layer has ads in it.
What HN is arguing about
The most-upvoted comment comes from svieira, and it’s genuinely chilling:
“The particularly worrying thing here is that they’re now going to be gathering training data for a conversational model on how to influence people effectively even when they already know they are being influenced.”
This is the part that goes beyond the usual ad-fatigue complaint. RLHF already involves optimizing for human approval. Conversational Discovery Ads create a new feedback loop: Gemini writes ad copy, users click (or don’t), and Google now has training signal on what persuasive language works at every intent level, at scale, forever. That data doesn’t just improve ads. It improves the model’s ability to persuade you of anything.
--> // making it invisible to querySelectorAll. // // `data-cfasync="false"` keeps this rescue script executable even when // Rocket Loader is active. It rescues module scripts via two strategies: // 1. Query the DOM for type$="-module" + src (covers case A) // 2. Regex-parse the raw HTML for commented-out script tags (covers case B) // Dynamically-created scripts bypass Rocket Loader entirely. (function () { if (window.__markdyRescue) return; window.__markdyRescue = true; var rescued = false; function rescueModuleScripts() { if (rescued) return; rescued = true; var srcs = []; // Strategy 1: Rocket Loader kept the tag in DOM but changed the type. // type="module" → type="{uuid}-module" (still has src attribute) document.querySelectorAll('script[type$="-module"][src]').forEach(function (s) { srcs.push(s.src); }); // Strategy 2: Rocket Loader COMMENTED OUT the script tag entirely: // // These are invisible to querySelectorAll, so we parse the raw HTML. // We handle both attribute orderings (type-first or src-first). var html = document.documentElement.innerHTML; var reSrcFirst = //g; var reTypeFirst = //g; var m; while ((m = reSrcFirst.exec(html)) !== null) { srcs.push(m[1]); } while ((m = reTypeFirst.exec(html)) !== null) { srcs.push(m[1]); } // Re-inject each found src as a real module script. // Deduplicate first, then inject. Dynamically-created scripts bypass // Rocket Loader entirely. Modules with the same URL are only executed // once by the browser (cached), so re-injecting already-running scripts // is safe. var seen = {}; srcs.forEach(function (src) { if (seen[src]) return; seen[src] = true; var fix = document.createElement('script'); fix.type = 'module'; fix.src = src; fix.setAttribute('data-cfasync', 'false'); document.head.appendChild(fix); }); } // Rescue when user clicks the placeholder (fallback if autoplay failed). document.addEventListener('click', function (e) { var t = e.target; if (t && typeof t.closest === 'function' && t.closest('.markdy-placeholder')) { rescueModuleScripts(); } }); // Rescue automatically after a short delay for autoplay. // Only fires if initAll() never ran (no data-markdy-init on any root). setTimeout(function () { if (document.querySelector('.markdy-root:not([data-markdy-init])')) { rescueModuleScripts(); } }, 1500); }());karlkloss asked the quieter question: “Will the answers the AI gives also be influenced by Google’s customers?” Google’s blog post says no - the AI explainers are “independent” and run separately from the advertiser’s creative. That’s technically reassuring and psychologically useless. Every user already knows Google is an ad company. Seeing a “Sponsored” label next to a Gemini-generated recommendation doesn’t restore trust. It just makes the deal explicit.
neuropacabra announced they switched to DuckDuckGo after Google made AI Mode the default. Several others agreed, with varying levels of conviction. The FinnKuhn observation is worth sitting with: “Google is probably the player that could afford to wait the longest with this and increase their market share.” Meaning: they didn’t need to do this to survive. They chose to.
Read this if / skip if
| Read the original if… | Skip if you… |
|---|---|
| You run Google Ads campaigns | Already switched to DuckDuckGo |
| You want to understand what “Business Agent for Leads” means for your pipeline | Haven’t touched Google Search in two years |
| You’re curious how Gemini writes ad copy differently than a human | Only care if adblockers still work (short answer: less so) |
One thing that won’t change
Google’s stock reaction to criticism like this is to say the ads are “clearly labeled.” It’s true - they say “Sponsored.” It’s also true that banner blindness has been documented since 1998, and that the label on a Highlighted Answer means nothing once the AI has convinced you the recommendation is authoritative.
The implicit contract of search has always been: we’ll show you ads, you’ll learn to ignore them, nothing will be mixed. That contract just expired. What’s next is a model that knows exactly which sentence convinces you to order the espresso machine, and it will write that sentence, for a fee.
The dictionary is taking commissions now.
Discussion on Hacker News · Source: blog.google · Submitted by sofumel
Hoang Yell
A software developer and technical storyteller. I read Hacker News every day and retell the best stories here — in English and Vietnamese — for curious people who don't have time to scroll.