Why most B2B websites underperform on SEO and speed
Two patterns we see repeatedly when we audit existing B2B sites for prospects:
Pattern 1: WordPress + page builder + plugin stack. Page builders (Elementor, Divi, WPBakery) generate enormous DOM trees, ship tens of unused JavaScript bundles, and almost never hit Google's Core Web Vitals thresholds on mobile. SEO plugins (Yoast, RankMath) inject schema correctly but the underlying page is so slow that ranking suffers anyway. Lighthouse Performance scores routinely sit in the 30-50 range, real users on 4G see 5-8 second LCPs, and Google's CrUX data reflects the same.
Pattern 2: Custom React SPA with no SSR. A single-page React app fetches data on the client and renders client-side. Google's crawler now handles JavaScript, but indexing is delayed, structured data is unreliable, and shareable URLs render blank previews on social media. Worse, the initial JavaScript bundle is often 500KB-2MB which destroys mobile load time.
Both patterns are fixable. The fix is Next.js with server-side rendering + selective client hydration, which is what we use on every client website we ship. Pages render to HTML on the server (or at build time), Google sees fully-formed content immediately, social previews work, schema validates. JavaScript hydrates the interactive bits client-side without blocking the initial render.
What "Lighthouse 90+" actually requires
Most agencies promise Lighthouse 90+ scores; few actually deliver them in production against real-world conditions. Here is what it takes (and what we deliver as standard):
Largest Contentful Paint (LCP) under 2.5 seconds. The hero image gets a high-priority fetch hint, fonts use the swap display strategy and preload critical weights, render-blocking JavaScript is deferred or interaction-loaded. These levers consistently move LCP from a typical 3.5-4.5s baseline into the 2.0-2.5s "Good" band, verified per build with the Lighthouse JSON archived as evidence.
Total Blocking Time (TBT) under 200ms. Third-party scripts (Google Analytics, chat widgets, marketing tags) get interaction-deferred — they only load after the user scrolls, clicks, or taps. The pattern routinely cuts TBT from the 1,000-2,000ms range typical of WordPress-and-plugin stacks down under 200ms. Real-user analytics is preserved; Lighthouse measurement window stays clean.
Cumulative Layout Shift (CLS) at zero. Every image, ad slot, and embedded widget reserves its space via explicit width/height attributes or aspect-ratio CSS. No content jumps as the page loads. CLS = 0 is the standard, not the aspiration.
Performance score ≥ 90 on mobile Lighthouse. Mobile Lighthouse simulates Slow 4G + 4× CPU throttling — the most aggressive standard test. Most real-world Indian users on 4G + a CDN see substantially better numbers than Lighthouse reports — typical CrUX field data reads 10-15 points higher than the lab score.
SEO baked into the build, not bolted on
Every page we ship includes:
- Title tag within Google's 50-60 character truncation window, validated at build time
- Meta description within the 120-160 character sweet spot, validated at build time
- Canonical URL explicitly set per page, no leakage from parent layouts
- hreflang for multi-region sites (typical setup spans en-IN, en-NP, en-BD, en-LK, en-KE, en-UG with x-default for global fallback — adapted to your target geographies)
- JSON-LD structured data appropriate to the page type — Organization on the root, BreadcrumbList on every deep page, Article on blog posts, FAQPage on Q&A pages, Product on commerce pages, LocalBusiness with geo coordinates and opening hours on contact pages
- Open Graph + Twitter card images and metadata for shareable social previews
- XML sitemap auto-generated from your route table at build time, submitted to Search Console
- robots.txt configured to permit AI crawlers (GPTBot, PerplexityBot, ClaudeBot, Google-Extended) for GEO visibility
This is the standard built into the framework — every page shipped clears it before it goes live.
Accessibility (WCAG AA) verified, not assumed
Government, enterprise, and procurement-driven buyers screen for accessibility compliance. Every page we ship is audited for:
- Contrast ratios ≥ 4.5:1 for body text, ≥ 3.0:1 for large text (we maintain deep-teal and deep-amber colour tokens specifically for text-on-white scenarios where the brand colour would fail contrast)
- Keyboard navigation through every interactive element without mouse, including modal traps and skip-links
- Screen-reader semantics with proper heading hierarchy, ARIA labels on icon-only buttons, alt text on every image, aria-expanded on accordions
- Focus management — focus rings visible, focus order matches visual order, focus returns to triggering element on modal close
Lighthouse Accessibility audit reports 96+ on every page we ship. The remaining gap is usually decorative elements (step numbers, watermarks) that are intentionally hidden from assistive technology.
What you actually pay
Marketing / corporate sites start at Rs 1.5 Lakh (5-10 pages, 4-6 weeks) and scale to Rs 8 Lakh (50+ pages, multi-language, headless CMS, 10-14 weeks). The mid-range — a 15-25 page B2B marketing site with custom design, full SEO baseline, basic CMS, and 4-6 conversion-optimised landing pages — typically lands at Rs 3-5 Lakh.
Client portals + dashboards start at Rs 5 Lakh for an authenticated portal with role-based access, invoice/order/document access, and a 30-day post-launch optimisation window. Complex multi-tenant portals with custom workflows extend to Rs 15-25 Lakh.
E-commerce sites start at Rs 6 Lakh for a 50-200 SKU storefront with one payment gateway integration, basic inventory APIs, and order management. Custom multi-vendor marketplaces scope separately.
Hosting is typically Vercel (the framework's native platform — fast, simple, and reasonably priced at Rs 1,500-15,000 per month depending on traffic) or AWS Amplify (our standard for clients that need India-region residency). You own the hosting account; we configure it.
Schedule a website scoping call — we will audit your current site (if any) and quote a tight scope within one conversation.
