aeo

Question headings vs. keyword headings

When to phrase a heading as a question, when a keyword label is still the right call, and how to check every heading on a site in one pass.

A heading on an answer surface has two jobs: name the thing the section is about, and state the question the passage underneath answers. Keyword headings usually do the first and skip the second. Question headings usually do the second and drop the first. The heading you want does both, which is why the choice is less either-or than the framing suggests — most of the work is adding what the other kind was missing.

This is how to decide, heading by heading, and how to check a site’s worth of them without reading every page.

Key Takeaways

  • A heading needs two things: its subject named, and a proposition attached — either the question the passage answers or the answer itself. Keyword labels supply the subject and stop there.
  • Ask the question and keep the noun. “How long does international shipping take?” beats both “International shipping” and “How long does it take?”
  • Not every heading should be a question. A declarative heading that states its answer does the same work, and navigation should stay navigation.

What each kind of heading was optimizing for

A keyword heading is a label carrying a query string: “International shipping,” “AEO audit checklist,” “Rate limits.” Its words are the target keyword, and holding them is the whole job — a habit from the period when repeating a query’s words in an <h2> was thought to help the page rank for it.

A question heading is a retrieval handle: “How long does international shipping take?” It doesn’t hold a keyword so much as declare what the next few sentences owe the reader. That matters on answer surfaces because of how the query arrives. Google states that both AI Overviews and AI Mode “may use a ‘query fan-out’ technique — issuing multiple related searches across subtopics and data sources — to develop a response” (Google Search Central, retrieved 2026-07-30). The thing reading your page isn’t matching one typed query against it. It’s matching a set of generated sub-questions, and a heading phrased as a question is the closest thing on your page to one of them.

The keyword in the heading was never the mechanism

Google’s own guidance gives the keyword-heading habit very little to stand on. Its starter guide says that “having your headings in semantic order is fantastic for screen readers, but from Google Search perspective, it doesn’t matter if you’re using them out of order,” and that “excessively repeating the same words over and over (even in variations) is tiring for users, and keyword stuffing is against Google’s spam policies” (Google Search Central, retrieved 2026-07-30). The function it does state is plainer: break long content into sections “to help users navigate your pages.”

The extraction path doesn’t reward the keyword either. Google describes featured-snippet selection as something you can’t request — “Google systems determine whether a page would make a good featured snippet for a user’s search request, and if so, elevates it” (Google Search Central, retrieved 2026-07-30) — and for AI Overviews and AI Mode it says a page needs only to be indexed and eligible for a snippet, with “no additional technical requirements.”

So the keyword was always working indirectly. It described the section accurately, and accurate description is what got matched. That part is worth keeping; the belief that the string itself carried weight is the part to drop.

What a question heading does that a label can’t

A heading is the context a passage carries with it when the passage travels alone. Retrieval systems split pages into chunks and can surface one without its neighbours, and a chunk that has lost its context is a documented failure rather than a hypothetical one. Anthropic’s write-up of contextual retrieval opens on that problem — splitting documents “can lead to problems when individual chunks lack sufficient context” — and reports that attaching chunk-specific context cut top-20 retrieval failures by 35%, and by 49% combined with keyword search (Anthropic, 19 September 2024). That measures one retrieval pipeline rather than Google’s, but it’s the mechanism your headings sit inside.

“International shipping” gives a chunk a topic. “How long does international shipping take?” gives it the question the chunk claims to answer — a far closer match for a generated sub-question, and a test of whether the passage underneath is doing its job. What an answer engine reads walks the splitting in order.

Most headings should not be questions

The question mark isn’t the mechanism, and a page where every heading ends in one reads like an FAQ pasted over an article. Run the check at the end of this post across the ten posts published on this blog before this one: 26 of 99 headings end in a question mark, about a quarter, and that’s a defensible ratio rather than a shortfall.

The property that matters is answerability, and there are two ways to get it. A question heading states the question. A declarative heading states the answer — “Training crawlers and retrieval crawlers extract the same bytes” isn’t a question, and a passage under it inherits both a subject and a claim. Either one beats a bare label. What fails is the third kind: a noun with no proposition attached. That’s the pile worth finding.

Step 1: Sort the page’s headings into three piles

By the end of this step you have every heading on the page split into questions, labels hiding a question, and navigation.

Copy each ## and ### into a list without its body, then sort:

  • Questions and claims. Ends in a question mark, or asserts something. Leave them.
  • Labels hiding a question. A noun phrase over a section that answers something — “Rate limits,” “International shipping,” “Pricing.” This is the pile with work in it.
  • Navigation. “Related reading,” “Changelog,” “Frequently asked questions.” These are signposts; rewriting them as questions makes the page worse.

Verification: every heading sits in exactly one pile, and only the middle pile has work attached.

Step 2: Write the answer first, then title the section with its question

By the end of this step each label in the middle pile has become the question its passage answers.

Work backwards: state the section’s answer in one sentence, then phrase the heading as the question that sentence answers. The order matters, because heading-first invites a question the section doesn’t resolve — which is how a page ends up with “What is international shipping?” over a paragraph about delivery times.

If you can’t state the answer in one sentence, stop. The heading isn’t the problem; the section doesn’t answer anything yet, and no rewording fixes that.

Verification: for each rewritten heading you can say the answering sentence aloud, and it’s already the first sentence underneath.

Step 3: Put the keyword back into the question

By the end of this step every question heading names its own subject.

This is where the two kinds of heading stop competing. “How long does it take?” is a question and a bad heading, because “it” resolves to nothing once the passage is read alone. “How long does international shipping take?” is the same question with the noun the keyword heading had. Keep the noun.

The reason is structural rather than stylistic. Titles, navigation, and headers are among the first elements discarded when a page is reduced to the text a model reads — what AI crawlers extract has the full inventory — so a heading can’t borrow its subject from the page furniture around it. If the entity appears only in the <title>, every passage on the page is anonymous.

Verification: no heading needs a pronoun resolved, or a heading above it, to be understood on its own.

Step 4: Change the wording, not the hierarchy

By the end of this step you’ve confirmed that steps 2 and 3 were a copy edit.

An H3 promoted to an H2 because its new question felt important is a structural change dressed as rewording. Headings are the skeleton an extractor hangs passages on, and the nesting is what says which passage belongs to which. Rewording is safe; renesting changes what a chunk contains. The count isn’t a dial to tune either — Google’s only guidance on how many headings to use is that “if you think it’s too much, then it probably is.”

Verification: the heading outline has the same shape it had before step 1, with different words in it.

Before and after

The before is an ordinary passage that answers its own heading in the last sentence:

## International shipping

We ship to most of Europe and North America, and we've worked hard to keep
delivery times predictable. Rates are calculated at checkout based on weight
and destination. Orders to the EU and the UK arrive in three to five business
days.

The rewrite keeps the keyword, adds the question, and moves the answer to the front:

## How long does international shipping take?

Orders to the EU and the UK arrive in three to five business days. Shipping
rates are calculated at checkout from the parcel's weight and its destination.
Delivery outside the EU, the UK, and North America isn't offered.

“International shipping” is still in the heading, so nothing was traded for the question. What changed: the heading states the question the passage resolves, the answer is the first thing under it, and the sentence about working hard is gone.

Checking every heading on a site

One page is a read-through. A site is an inventory: pull every heading, strip the bodies, and read the list on its own. If the list doesn’t tell you which questions the page answers, retrieval has the same problem you just had.

On markdown sources that’s one line:

grep -rhE '^#{2,3} ' --include='*.md' --include='*.mdx' . | sed 's/^#* *//' |
  awk '{ print ($0 ~ /\?$/ ? "Q  " : "L  ") $0 }' | sort

It splits the headings into questions and everything else. The L rows are the ones to read: some are declarative headings that already state their answer, some are navigation, and the rest are step 2’s work. On rendered HTML, extract the h2 and h3 text first and pipe it through the same split.

The split is a proxy, not a verdict. It can’t tell a claim from a label, and it can’t tell you whether the passage under a question actually answers it — a person still reads the L column. For the diagnostic pass across all five common faults, of which this is one, see five checks for a page that ranks but never gets cited. In GEOBee a heading is scored as part of the answer block, the heaviest single signal on the AEO lens, with published weights; a heading with no answerable passage under it becomes a per-URL finding with the fix attached.

One limit is worth restating. A page whose headings each state a question or a claim is a page a machine can read cleanly and lift from. Whether anything lifts from it depends on competition, authority, freshness, and the question asked — none of which live in your headings. Answer Engine Optimization: a page-level guide sets out the seven other signals this one sits alongside.

On this page