# Section Engagement Analytics: See What Parts of a Page Convert

> Plaintext version for LLMs and agents. Canonical HTML: https://askbowtie.com/learn/new-analytics/
> Product: askbowtie (askbowtie.com), site analytics queried over an MCP server.

## Bottom line

Add two HTML attributes to your site. `data-askbowtie-tag` labels a page's ROLE (editorial, commercial, conversion). `data-askbowtie-section` labels the PARTS of a page visitors click (nav, hero, cta). Then askbowtie measures, per page, which sections visitors engage and which drive conversions, and lets you query analytics by page role. You can also classify a site's EXISTING clicks retroactively with rules, with no code changes. The result is source-of-truth answers to questions that pageviews leave as guesswork.

## The problem

Analytics reports tell you WHAT happened (pageviews, sessions, bounce rate), rarely WHY or HOW. You cannot look at a pageviews chart and say "312 people engaged with this page." You stitch data together and guess from which page a visitor hit next. That guesswork is fragile because nothing underneath it is a source of truth.

Real example (vpn.com): a visitor gets a "use case" assigned only when they click a homepage hero button. Site-wide that is about 4% of traffic. Among visitors who landed on the homepage and did not bounce, it is 30%+. The gap: how do the other 70% engage? Today the only signal is which page they visited next, which is a coin flip.

## The idea: declare, don't infer

Traditional analytics infers meaning from behavior. askbowtie flips it: you DECLARE what a page is and which parts matter, with two HTML attributes. Every metric about "editorial pages" or "the hero" is then grounded in your declaration, not a heuristic that breaks on redesign. You tag the pages that are clearly one kind and the few sections that matter; the rest stays untyped and visible.

## Page roles: analytics by kind, not slug

Set a role on the page body:

    <body data-askbowtie-tag="editorial">

Common roles: editorial, commercial, conversion, lander. Any lowercase slug works. Read on crawl (so zero-traffic pages self-classify) AND on every pageview. Query the whole role at once instead of scanning hundreds of URLs.

## Section engagement: how visitors use a page

Mark the containers that matter:

    <header data-askbowtie-section="nav:header"> ... </header>
    <section data-askbowtie-section="hero"> ... </section>
    <a data-askbowtie-section="cta:start-quiz" href="/quiz">Start the quiz</a>

Value is a slug with an optional `:sublabel` (hero, nav:header, cta:start-quiz). A click is attributed to its NEAREST marked ancestor, so mark the container, not each child. For any page you then see viewers split by which section they engaged, each with its share of viewers and its downstream conversion rate.

- Silent killers: high share of clicks, low downstream conversion. Eats attention, pays nothing.
- Underexposed winners: low share, high downstream conversion. Few find it, those who do convert.

The report also reports how many viewers clicked nothing. On vpn.com's homepage over 30 days that is 49.7%; of the half that click, the primary button (btn-solid) drew 2,586 sessions at 23.6% downstream conversion. Pulled from click data that was already collected.

## The retroactive shortcut: no code changes

askbowtie already records the CSS class and link of every click. So you can map an existing click signature to a section with a RULE, and it classifies your historical clicks instantly. The loop: ask for a page's engagement, and untagged clicks appear in a suggestions list grouped by class/link; confirm the ones that matter by adding a rule; re-run to see them named. Nothing is auto-applied. Rules are revertible. A page's own marker always wins over a rule.

## Questions you can now answer

- Which KIND of page converts best? -> the role rollup: every role with its conversion rate.
- How are all my commercial pages doing? -> filter the page table to that role, one call.
- What percentage of this page's traffic uses the navigation? -> the section breakdown: nav's share of viewers.
- Which section is a silent killer? -> sort sections by share against downstream conversion (high share, low conversion).
- How do visitors who ignore the hero proceed? -> the other sections, the unknown bucket, the "clicked nothing" share.
- Is my most-clicked button earning its place? -> its section's downstream conversion rate, not its click count.

## Why this is trustworthy

- Declaration over inference: a section is the one you named, not a guessed pattern. Meaning is stable when numbers move.
- Suggestions never own the truth: auto-detection only proposes; a human or agent confirms before anything is stored.
- Everything is revertible: remove a marker or delete a rule and the classification is gone. No migration, no lock-in.

## Getting started

1. Add `data-askbowtie-tag` to page templates for roles you know (editorial, commercial, conversion).
2. On your most important page, add `data-askbowtie-section` to the hero, the primary nav, and the main CTA.
3. Ask for that page's engagement; read the suggestions list of real clicks.
4. Confirm meaningful untagged clicks with a rule (also classifies history).
5. Ask questions in plain language.

## MCP reference (for agents)

Markers (declared on the site, source of truth):
- Page role: `<body data-askbowtie-tag="ROLE">` (ROLE = lowercase slug). Fallback `<meta name="askbowtie:tag" content="ROLE">`; SPA/JS `bowtie.tag('ROLE')`. Read on crawl AND pageview.
- Section: `<… data-askbowtie-section="SECTION[:SUBLABEL]">` on a section container. Attributed to a click's nearest such ancestor (meta.section). Wins over any rule.

Tools:
- `get_page_types { domain, period?, limit? }` -> tags[{tag, pages, sessions, conversions, conversion_rate}], untyped, suggestions[{page, suggested_tag, why, confidence}], tagged_pages, warnings.
- `tag_pages { domain, tag, pages[]?, match?, clear? }` -> manual page-role assign (wins over declared).
- `get_top_pages { domain, type?(role) }` -> each row carries its tag.
- `get_engagement { domain, page, period? }` -> viewed_sessions, non_bounce_sessions, no_interaction_share_pct, sections[{section, sessions_engaged, share_pct, conversion_rate}], unknown, suggestions[{signature, field(class|href|selector), sessions, share_pct, conversion_rate}], warnings.
- `manage_sections { domain, action:list_rules|add_rule|clear_rule, match_type?(class|href|selector), pattern?, section?, priority?, id? }` -> add_rule maps an existing click signature to a section (retroactive).

Precedence:
- Section of a click: marker (meta.section) > first matching section rule by priority > (unknown).
- Page role on write: manual > declared (marker) > suggested. A manual tag is never overwritten.
- Suggestions are proposals only; confirm with tag_pages or manage_sections add_rule.

Question to tool:
- "which kind of page converts best" -> get_page_types (compare tags[].conversion_rate).
- "tackle all commercial pages" -> get_top_pages { type: "commercial" }.
- "what % of page X uses the nav" -> get_engagement { page: X } (sections[nav].share_pct).
- "which section is a silent killer" -> get_engagement (high share_pct, low conversion_rate).
- "how do non-clickers of the hero proceed" -> get_engagement (other sections + unknown + no_interaction).

Recommended agent loop: get_engagement a key page, read suggestions, add_rule the meaningful ones, re-run to confirm names, then report silent killers (high share, low conversion) and underexposed winners (low share, high conversion).

Docs: https://askbowtie.com/docs/ · Connect a site: https://askbowtie.com/
