Generic CTAs treat every visitor the same. A 4-step pathway router asks one question — startup, SMB, agency, or ops — and routes copy, CTAs, and case studies to match. Here's the data, the template, and the build.
The default CTA on most B2B sites is one button. "Book a demo." It sits there equally for a founder doing $0 in revenue, a 14-truck HVAC owner, an agency reselling AI to 30 clients, and an ops manager at a 200-person logistics co.
That's four wildly different buyers reading the same headline, looking at the same case study, clicking the same form. Conversion suffers because the page is talking to nobody specifically.
We rebuilt our home page around a thing we call PathwayRouter — a 4-option qualification step that flips the entire page's copy, CTAs, and proof points to match the visitor in front of it. Conversion to booked call lifted 3.1x in the 30 days after we shipped it. Here's exactly what it does, the data, and the template you can lift.
A landing page averages 8 seconds to communicate fit. In those 8 seconds, the visitor needs to read three things:
A single CTA aimed at "everyone" answers none of those questions cleanly. The headline either over-indexes on one persona (and alienates the other three), or it goes generic ("AI agents for your business") and triggers nobody.
The fix isn't more copy. It's branching copy.
Top of the page, instead of pushing a CTA, we ask one question: "Which one are you?" Four options:
Clicking sets a localStorage flag (tya:pathway) and reloads the page state. The hero copy, social-proof block, CTAs, pricing display, and "next step" all swap to match. The page stays the same physical layout, so it loads fast and indexes cleanly for SEO — but the words inside change.
A tiny banner up top says "You're viewing this through the SMB lane. Reset →" so the visitor always knows what's happening.
Before PathwayRouter:
book a call conversion: 0.9%After PathwayRouter (same traffic mix, same ad spend):
book a call conversion: 2.8% (3.1x lift)The lift wasn't from more traffic. It was from the same traffic finally seeing copy that matched them.
Notable: ~62% of visitors pick a lane within 4 seconds. The remaining 38% scroll past it. Of those, conversion is unchanged from baseline. So we're not penalizing the no-pick visitors — we're amplifying the pickers.
Concrete example. Original headline:
AI agents that actually answer your phone.
That's fine. It survives. But here's what each lane sees:
Startup lane:
Ship your first AI agent in 21 days, not 21 weeks. CTA: Start a $0 trial — bring your own keys
SMB lane:
Stop sending customers to voicemail. We build the agent in 21 days. CTA: Book a 30-min build call
Agency lane:
White-label voice agents for your client portfolio. CTA: Join the agency partner program
Ops lane:
Production AI infrastructure your security team will sign off on. CTA: Book a technical scoping call
Same product. Four different first impressions. Each one is talking to exactly one person.
Steal the template. We open-sourced a pathway-routing landing page kit — drop-in React component, copy presets for 6 verticals, localStorage persistence built in.
The whole component is ~80 lines of React + Tailwind. Skeleton:
const LANES = {
startup: { headline: "Ship your first AI agent in 21 days", cta: "Start a $0 trial" },
smb: { headline: "Stop sending customers to voicemail", cta: "Book a 30-min call" },
agency: { headline: "White-label voice agents at scale", cta: "Join partner program" },
ops: { headline: "Production infra your security team will sign", cta: "Book scoping call" },
};
function PathwayRouter() {
const [lane, setLane] = useState(() =>
typeof window !== "undefined" ? localStorage.getItem("tya:pathway") : null
);
if (lane && LANES[lane]) return <LaneOverlay {...LANES[lane]} />;
return <ChoiceGrid onPick={(k) => { localStorage.setItem("tya:pathway", k); setLane(k); }} />;
}
That's it. Two pieces of state: which lane (in localStorage), and what to render if no lane is picked. The "reset" button just calls localStorage.removeItem("tya:pathway") and sets state to null.
We didn't get this right out of the gate. Three things broke and what fixed them:
1. Too many lanes. First version had 7 options: startup, SMB, agency, enterprise, government, education, nonprofit. Conversion dropped vs baseline because nobody wanted to read seven choices. We cut to four. Conversion recovered, then climbed.
2. No reset. First version locked the lane on first click. Visitors who picked wrong felt trapped. We added a banner with a one-click reset. Bounce rate dropped 18%.
3. Lane affected pricing display. We tried showing different prices per lane (lower for startup, higher for ops). It backfired — visitors who switched lanes saw price changes and lost trust. We reverted to one price page. Lane now changes copy and CTAs only, not numbers.
Wins:
Doesn't help much:
The natural next move: replace the static lane choice with an inline voice or chat agent that asks the same question conversationally. We're prototyping this on the /start page now. Early data: lane selection rate goes from 62% to ~80% when it's a conversation instead of a button row.
But ship the buttons first. The 3x lift is sitting there waiting.
If you want me to wire pathway routing into your site, start a trial and I'll do the first lane setup myself. Or check the /solutions/sites page for the full landing-page build.