---
title: "Discussion on \"HTML is the new Markdown. Your agent reads a different page\" | Hashnode"
description: "Discussion on \"HTML is the new Markdown. Your agent reads a different page\". AI-written HTML pages can hide text that people never see but agents read."
url: "https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933"
---

[Feed](https://hashnode.com/feed) /

Discussion

# [HTML is the new Markdown. Your agent reads a different page](https://blog.filtercoffeeway.com/the-page-your-agent-reads?utm_source=hashnode&utm_medium=feed)

AI-written HTML pages can hide text that people never see but agents read.

Oct 17 · 12 min read · blog.filtercoffeeway.com  
Read the article

-   [#ai](https://hashnode.com/tag/ai)
-   [#security](https://hashnode.com/tag/security)
-   [#llm](https://hashnode.com/tag/llm)
-   [#prompt-injection](https://hashnode.com/tag/prompt-injection)
-   [#html](https://hashnode.com/tag/html)

## Written by

[Mahesh](https://hashnode.com/@filtercoffeeway)

@filtercoffeeway · San Francisco, USA

  
[View profile](https://hashnode.com/@filtercoffeeway)

Ground fresh. Think deep. Build strong.

I'm Mahesh — an engineer from Madras who thinks about systems for a living and keeps coming back to the same observation: the best builders aren't the ones who reach for the framework fastest, they're the ones who slow down, understand the raw problem, and make decisions with intention. Filter Coffee Way is where I write about that - system design, engineering culture, and seven principles borrowed from the way a good cup of South Indian filter coffee is made. Ground fresh. Think deep. Build strong.

## Responses 10

Markdown supported · ⌘↵ to post

[Julian Neagu](https://hashnode.com/@julianneagulab)

[Oct 20](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad73b27c3c5259838da586e)

I’ve seen similar issues when building small HTML tools. The page can look totally fine while the raw output tells a different story. Checking what the agent actually reads feels like a step we’ve been missing.

[nexgrow](https://hashnode.com/@nexgrow69)

[Oct 19](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad5b112312d0702b2b097f5)

This is an interesting topic! HTML can provide structured information that helps AI agents understand a webpage, but I don't think Markdown is becoming useless. HTML is useful for page structure, metadata, and interactive elements, while Markdown is simpler for writing and sharing content. The best format depends on how the content is delivered and how the agent accesses it. Do you think websites should provide a separate, AI-friendly version of their content to make it easier for agents to understand?

[netproxy](https://hashnode.com/@argumentmoney8117)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad547dcd75f37b1b40b4578)

Interesting finding that 10 of 16 HTML-to-text tools ignore CSS entirely — a good reminder that 'extracted text' and 'visible text' were never the same thing. The headless-Chromium render comparison is a clever detection approach; it sidesteps the arms race of parsing every new hiding trick. Would be interesting to see the same test run against Markdown renderers.

[Damiano Bianda](https://hashnode.com/@damianobianda)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad48ae9d9816a5ed9d4aa06)

The two-readers framing is the part people underrate. I ran into a small version of this from the other direction: I built a local tool that explains official letters, and the design rule ended up being that the model only ever sees the fields the code extracted, never a number it could invent. Your tests are the same gap in reverse - what the agent "read" is whatever the converter decided to keep. Did any of the converters you tried handle display:none differently from aria-hidden? That seems like the first place a checker would disagree with a human reviewer.

[Yunus Emre Vurgun](https://hashnode.com/@yunusemrevurgun)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad458b2071e17eeebe46fc2)

The point that the agent and the human can read different versions of the same page is the part people underrate. A cheap check is to log a hash of the exact text the agent received next to its answer, so when it says something odd you can see right away whether it was fed hidden content or just reasoned badly. Treating fetched page text as data in its own clearly marked block, never mixed into the instructions, also cuts down how often hidden lines get followed.

[Mahesh](https://hashnode.com/@filtercoffeeway)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad458b2071e17eeebe46fc2#reply-6ad46d079a9b6ceb9a90147e)

Thank you, Yunus. The hash log is easy to add, and I will use it in my next test. I will also test how often a model follows hidden lines inside a "data only" block.

[Yunus Emre Vurgun](https://hashnode.com/@yunusemrevurgun)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad458b2071e17eeebe46fc2#reply-6ad4817d475c526f7e215e3e)

Glad it's useful. One tip for the data-only test: run each hidden line in two places, inside the marked block and inline in the prompt, with the same seed and temperature 0. Then the gap between the two follow rates shows what the block itself is worth, not just the model's baseline.

[BomToBe](https://hashnode.com/@bomtobe-orke)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad423898bdbbc8157d27a40)

The 0/132 result after rendering and keeping only visible text is a useful boundary: it prevents this specific hidden-line path, while your caveat about visible prompt injection still matters. For a practical pipeline, I’d preserve both views in a review artifact—rendered text plus a source-vs-rendered diff with the source URL and capture time—so reviewers can investigate rather than silently trust a sanitizer. I work on Orke at BOMTOBE, where we build a desktop workspace for AI agents, so this agent-facing boundary is directly relevant to my work.

[Mahesh](https://hashnode.com/@filtercoffeeway)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad423898bdbbc8157d27a40#reply-6ad46d2f338d7af64db76d1f)

The source-versus-rendered diff, with the URL and capture time, is a good way to avoid blind trust in the sanitizer. I will add it to my pipeline and test whether it helps a reviewer find problems.

[BomToBe](https://hashnode.com/@bomtobe-orke)

[Oct 18](https://hashnode.com/posts/the-page-your-agent-reads/6ad3f83669a965c237b00933/comment/6ad423898bdbbc8157d27a40#reply-6ad4dcad02681145e9508e4c)

One extra edge case is state-specific visibility: media queries, opened accordions, and client-side hydration can change what a person sees. I would record viewport and interaction state with each rendered-text snapshot, then compare extraction against that state; keep accessibility-only labels distinguishable so they are not mistaken for deceptive hidden copy. I work on Orke at BOMTOBE, a desktop workspace for Claude Code and Codex, so I am interested in what context agents should trust.
