Audit my site →

Blog

Semantic HTML and Why Crawlers Prefer It

Semantic HTML is how you tell machines what your page means, and machines reward you for it.

There are two ways to build a web page. One is to describe what things look like. The other is to describe what things are. A page built the first way is a pile of divs with classes like box-3 and text-lg, styled until it resembles a page. A page built the second way says: this is the header, this is the navigation, this is the main article, this is a heading, this is a paragraph. Both can look identical in a browser. But only one of them can be understood by something that isn’t a person.

This matters more than most site owners realize, because most of the readers of your HTML are not people. They’re crawlers. Googlebot fetches your page and has to figure out, from markup alone, what it’s about, which part is the actual content, and which parts are chrome. A browser rendering for a human gets to cheat: the human’s eyes do the work of figuring out what’s important. A crawler has no eyes. It has your tags.

Semantic HTML is simply using the tags that mean something. An h1 means “this is the main topic of the page.” A nav element means “these links are navigation, not content.” A main element means “the actual substance starts here.” An article means “this is a self-contained piece.” When you use these tags, you’re not decorating; you’re annotating. You’re telling every machine that reads your page which parts matter.

Consider what happens when you don’t. If your page’s visual title is a div with a large font size, a crawler sees no heading at all. It sees text that happens to be styled big, and styling is something crawlers largely ignore, because styling is about appearance and they’re after meaning. When GazeSite scans a page and reports “No H1 heading found,” this is usually what happened: there’s a perfectly good title on the screen, but it’s semantically invisible. The page is shouting its topic at humans and whispering nothing at machines.

The word “prefer” in my title is doing honest work. Crawlers don’t refuse to index div soup. Google has spent twenty years getting good at extracting meaning from badly structured pages, because most pages are badly structured. But there’s a difference between a crawler being able to guess your structure and a crawler being told your structure. Guessing has error bars. If Google has to infer which text is your heading, sometimes it will infer wrong, and the search snippet for your page will feature some odd fragment instead of your actual title. When you use real headings and real landmarks, there’s nothing to infer. You’ve removed a source of error, and removing sources of error is most of what technical SEO is.

There’s a compounding benefit that’s easy to miss: semantic HTML is cheap insurance against futures you can’t predict. When Google started showing featured snippets, pages with clean heading hierarchies and real lists were the ones that got extracted cleanly. When screen readers became a legal consideration, semantic pages mostly already worked. Now the machines reading your page increasingly include AI systems building answers from web content, and they face the same problem crawlers always have: figuring out what your page means from its markup. Every one of these shifts rewarded the same boring practice. Nobody who wrote semantic HTML in 2010 knew what it would be good for in 2026. They just knew that describing meaning is more durable than describing appearance, because appearance is fashion and meaning isn’t.

Why, then, is so much of the web div soup? Partly because the tools push that way. Component frameworks make it effortless to nest divs and effortful to think about document outline. Partly because the cost is invisible. A missing main element never throws an error. The page renders. The demo goes well. The costs show up months later, diffusely, as slightly worse rankings and slightly odd snippets, and nobody traces them back to markup decisions made in a hurry.

The fix costs almost nothing, which is what makes the neglect strange. Converting a page from divs to semantic elements is mostly renaming: the outermost wrapper becomes main, the top bar becomes header, the link cluster becomes nav, the big styled div becomes h1. An afternoon of work on most sites. You don’t need to learn schema markup or structured data first; those are refinements on top of a foundation, and the foundation is just using tags for what they mean.

I built GazeSite to catch exactly this class of problem, and the pattern in scan after scan is consistent: sites that look polished and read, to a machine, like static. The screenshot is beautiful. The HTML is mute. If I could get site owners to internalize one idea, it would be this: your page has two audiences, and only one of them can see. Write for both. The blind one decides whether the sighted one ever finds you.

More articles

← All posts