Skip to content

Site IA & Organizations Landing

Status: shipped (2026-07-10) Owner: Bhanu Last updated: 2026-07-13 Related: b2c-landing-and-freemium.md, apps-site-ssg-migration.md, b2c-signup-attribution.md

The marketing site's information architecture after the B2C home promotion: which route owns which audience, how navigation and footer route between them, and what the reworked B2B landing at /organizations looks like.

Why this exists (Product Mindset Gate)

  1. Who asked for it? Owner-driven, executed from a design handoff alongside the B2C home redesign. Self-initiated, flagged as such.
  2. What user pain? The old site made every visitor pick an audience before seeing anything. Learners, who are the growth audience, landed on a page that hedged between institutions and individuals. A visitor from a JEE-prep ad had to find themselves in a picker before reaching relevant content.
  3. Cost of not doing it? Paid learner traffic bounced off an ambiguous home. B2B visitors got a page styled differently from the rest of the brand.
  4. Validated or guess? Weak validation: owner dogfooding, no interviews. Same caveat as the home redesign.
  5. How we know it worked? Signups attributed to home CTAs via internal UTM, bounce on /, and demo-form submissions from /organizations. Counterfactual: reverting restores the audience-picker home, and both funnels re-merge.

IA contract

One audience per page. No mix and match.

Route Audience Content
/ Learners (B2C) Single-track exam-prep landing, the site home
/organizations Institutions and corporates (B2B) Single-track B2B landing with demo form
/individuals (retired) 301 redirect to /

Rules:

  • / owns learners. No audience picker, no persona toggle, no B2B teaser blocks beyond the nav link.
  • /organizations owns B2B. The audience picker and learner tiles were removed; it does not link learners sideways into B2C content beyond the shared nav and footer.
  • A page never serves two audiences. If a new segment needs a landing, it gets its own route, not a toggle on an existing one.

Redirects, canonicals, sitemap

  • /individuals responds with a 301 to /. Existing backlinks and ad destinations keep working.
  • Canonicals moved with the content: the learner landing's canonical is /, the B2B landing's canonical is /organizations.
  • The sitemap and the prerender manifest (apps/site/scripts/prerender.mjs) were updated to match: / and /organizations are listed, /individuals is not.
  • The main nav carries one cross-audience link: "For organizations", which opens /organizations in a new tab. Rationale: the visitor on / is usually a learner mid-evaluation; a curious click on the B2B link should not destroy their place on the learner page. The new tab makes the B2B page a side reference, not a navigation away.
  • The footer solutions column is split by audience:
    • B2B links: four of the six solution pages (handwritten grading, NEP 2020 builder, DPDP proctoring, CO-PO tracker: LandingFooter.tsx:197-214). The two SEO pillar pages are deliberately not in the footer (see below).
    • B2C anchors: /#study-plan, /#practice-hub, /#exam-readiness. These are section anchors on the home page, not standalone pages (a deliberate non-goal for now, owned by the landing doc).

The solutions tree and the SEO pillar pages

/solutions/* is the site's organic-search surface. Six pages today, all rendered by one component (apps/site/src/pages/solutions/SolutionLayout.tsx) and all prerendered with the same schema stack.

Route Shape Copy source
/solutions/handwritten-answer-sheet-grading feature page i18n/locales/en/solutions.json
/solutions/nep-2020-curriculum-builder feature page solutions.json
/solutions/dpdp-compliant-proctoring feature page solutions.json
/solutions/co-po-attainment-tracker feature page solutions.json
/solutions/higher-education-ai-platform pillar page i18n/locales/en/solutionsExtra.json
/solutions/naac-nba-accreditation-ai pillar page solutionsExtra.json

Feature page vs pillar page. The four feature pages each answer one capability query ("how do I grade handwritten answer sheets"). The two pillar pages answer the broad category queries an institutional buyer actually types ("AI learning platform for colleges in India", "NAAC accreditation software") and hand the visitor down to the feature pages through their Related links. Traffic direction is deliberate: the pillars link out to the four feature pages, the feature pages do not link back up.

Consequence, recorded honestly: the two pillar pages currently have no inbound internal link anywhere on the site. They are not in the nav, not in the footer's B2B column, and not in any other page's Related list. They are reachable from search, the sitemap, and the pillars' own canonical URLs only. That is a live gap, not a design decision.

Page anatomy (SolutionLayout)

Breadcrumb, H1, subtitle, N copy sections, a demo/pricing CTA block, an FAQ accordion, and a Related-solutions list. Meta comes from <Helmet>: title, description, canonical, og:*, twitter:*. Copy is entirely i18n-keyed, so a page component is a list of section keys plus a routeKey. No copy lives in TSX.

Schema and prerendering

The pages are React at runtime but static HTML in production. apps/site/scripts/prerender.mjs renders every route through the server bundle and writes dist/client/<route>/index.html; Cloudflare Pages serves those files. There is no SSR server in production, so the JSON-LD has to be injected at build time, not by React.

buildFullHead (prerender.mjs:569-621) appends the schema blocks Helmet does not own. A solution route gets four:

Schema Builder Source
BreadcrumbList buildBreadcrumbJsonLd (prerender.mjs:237) the route's breadcrumbs array: Home → Solutions → page H1
FAQPage buildFaqJsonLd (prerender.mjs:250) the page's own faqItems from its i18n file
Service buildSolutionServiceJsonLd (prerender.mjs:409-424) meta.title as name, meta.description as description, h1 as serviceType, areaServed: India, EducationalAudience
Organization buildOrganizationJsonLd (prerender.mjs:426) site-wide, emitted on every route

The two pillar pages are wired into that machinery exactly like the four originals: registered in routes.json (solutionsHigherEdPlatform, solutionsNaacNbaAccreditation), routed in App.tsx:108-112, given prerender entries with breadcrumbs + FAQ + solutionKey (prerender.mjs:167-194), listed in sitemap.xml at monthly / priority 0.8 (prerender.mjs:722-723), and given Cache-Control lines in public/_headers. Their copy lives in a second i18n file (solutionsExtra.json) that the prerender script merges with solutions.json into one ALL_SOLUTIONS lookup (prerender.mjs:33); the key namespaces do not collide.

Their FAQ items are also folded into the aggregate /faq page's FAQPage schema (prerender.mjs:224-225), so each question is marked up twice: once on its own page, once on /faq.

Two more gaps worth naming. The IndexNow ping script (apps/site/scripts/indexnow-ping.mjs:24-33) still lists only the four original solution routes, so the pillars are not pushed to Bing on deploy. And every solution breadcrumb points at a /solutions hub URL that has no route, so it 404s.

The organizations landing (/organizations)

The B2B landing moved from the old home to /organizations and was restyled to the B2C design language so the two pages read as one brand: neutral extrabold display type, warm canvas background, no leftover legacy styling.

Section order:

  1. Hero. Faculty photo, single-track B2B headline, demo CTA. No audience picker or learner tiles.
  2. Dark trust band. Stats on a dark surface.
  3. Agents loop and sticky assistants stack. The AI assistants are presented as a sticky scroll-stack: each assistant card pins while the next scrolls in.
  4. Demo form. The conversion action for B2B is a demo request, not self-serve signup.

Design language and fonts

Both landings share the same primitives from @kwilo/ui: SmartSurface, SmartBadge, Heading with display-2xl size and extrabold weight, and Text with the lead variant.

Manrope is now self-hosted via @fontsource in both apps/site and apps/web. Before this change the font was declared in CSS but never loaded, so every page rendered in a system-font fallback. apps/web also dropped its consent-gated Google Fonts loading in the process; self-hosting removes the third-party request entirely.

Non-goals

  • A /solutions hub page. The six pages are entered from search, not browsed from an index. (The breadcrumbs assume a hub that does not exist; see the gap above.)
  • Pillar pages in the main nav. They are search entry points for buyers, not navigation for visitors already on the site. Footer placement is still an open question.
  • Standalone B2C solution pages. Footer B2C entries stay as home-page anchors until the sections earn their own pages.
  • A shared audience switcher. There is no component that flips a page between audiences; routing is the switch.
  • B2B self-serve signup. The organizations funnel ends at the demo form.

Rejected alternatives

  • Audience switcher on the B2B page. Would reintroduce the mixed-audience page this change removes. Rejected: / owns learners, /organizations owns B2B.
  • Keeping /individuals alive as a duplicate. Two URLs with the same learner content splits SEO equity and confuses attribution. Rejected for the 301.
  • Same-tab "For organizations" link. Cheaper default, but it navigates the learner away from the page they were evaluating. Rejected for the new tab.

Where it lives

  • Routes and redirects: apps/site router (src/App.tsx, paths in src/constants/routes.json) plus public/_redirects (Cloudflare Pages) for the /individuals 301.
  • Solution pages: apps/site/src/pages/solutions/ (SolutionLayout.tsx plus one folder per route); copy in src/i18n/locales/en/solutions.json and solutionsExtra.json.
  • JSON-LD, robots, sitemap: apps/site/scripts/prerender.mjs. Search-engine ping: apps/site/scripts/indexnow-ping.mjs.
  • B2B page: apps/site/src/pages/Organizations/ (hero, trust band, assistants stack, demo form).
  • Prerender and sitemap: apps/site/scripts/prerender.mjs.
  • Attribution: every site to app CTA carries internal UTM (see b2c-signup-attribution.md); home CTAs use source=individuals.

Changelog

  • 2026-07-13: Documented the solutions tree and the two SEO pillar pages (/solutions/higher-education-ai-platform, /solutions/naac-nba-accreditation-ai, commits b57f61d5 / a17ba5dd): schema stack (BreadcrumbList, FAQPage, Service, Organization), build-time injection, sitemap entries. Corrected the footer claim (it links four solution pages, not six) and recorded three gaps: no inbound internal links to the pillars, IndexNow list not updated, /solutions breadcrumb hub 404s.
  • 2026-07-10: Doc created. B2C home promotion, /organizations B2B landing, /individuals 301, nav and footer contract, one-audience-per-page principle recorded.