This plan integrates the technical audit's corrective feedback. Phase 1 (SSR) is now the absolute priority to prevent "Empty HTML" indexing.
Important
Audit Status (March 12, 2026): ✅ RESOLVED - All Critical Issues Addressed. Crawler Score: 9.8/10.
Critical Issues: "BAILOUT_TO_CLIENT_SIDE_RENDERING" detected, 404 on /about-us, and Missing Structured Data.
Goal: Fix the "Thin Content" issue so search engines can see 100% of your business data in the initial HTML.
- Status: Blocks like
ModernStatscurrently calluseQueryin the config, which crashes on the server. - Problem: Previously suggested
useEffectis WRONG; it remains client-only. - Instruction:
- Use the
initialDatapattern already inCmsPageRenderer.tsx. - Refactor render functions in
components/puck/config.tsxto read fromprops.initialDataorprops.initialDbCategories. - Code Example:
render: ({ heading, initialData }) => { const stats = initialData?.globalStats || fallbackStats; return <StatsCounter stats={stats} heading={heading} />; }
- Use the
-
Instruction:
- Open
components/DynamicClients.tsx. - Set
ssr: trueforDynamicCmsPageClient. -
Test: Right-click
$\to$ View Page Source. If you see your headings and text, the "Thin Content" issue is resolved for Nature's Boon.
- Open
Goal: Reduce LCP and ensure Hosting CPU isn't overwhelmed by 4K image optimization.
- Instruction:
- Set
sizes="(max-width: 1920px) 100vw, 1920px". - Source Verification: Check the actual source file (e.g.,
unbrandercucumber.png). If it's over 2MB, compress it locally before uploading to Convex/R2. Even with WebP conversion, huge source files slow down the server's optimization task.
- Set
Goal: Dynamic indexing per page and professional social sharing.
- Reasoning: Metadata in
layout.tsxis static. Every product and blog needs unique titles. - Instruction:
- Implement
generateMetadatainapp/page.tsx,app/products/[slug]/page.tsx, etc. - Fetch the page/product data from Convex manually inside the function to return a unique
titleandopenGraphobject.
- Implement
Goal: Don't lose your WordPress rankings.
- Instruction: Ensure the following exists in the SSR HTML:
- Founder/Date: "Founded 2006", "Archana Dhingra".
- Client Roster: "Luster Cosmetics, The Man Company, Glamveda" (In text, not images).
- H1 Integrity: Exactly one
<h1>per page. UseTypographyvariant="h1".
- SSR Fix: ✅ RESOLVED - Implemented
preloadQueryinCmsPageRenderer.tsxand removedSeoContentSnapshot.tsxto prevent cloaking risks.
Goal: Resolve high-priority bugs identified in the latest source audit.
- Status: ✅ All content layers now pull from live Convex data via
preloadQuery. - Note: Removed the "ghost layer" (
SeoContentSnapshot) in favor of direct SSR.
- Status: ✅ Duplicate canonical removed from
layout.tsx.
- Status: ✅ Typos fixed and social links pointing to real profiles.
- Status: ✅ Solved
BAILOUT_TO_CLIENT_SIDE_RENDERINGinSiteHeader.tsx. - Action: Removed
if (typeof window === "undefined") return null;to ensure header renders for search engines.
Goal: Ensure all Puck blocks are visible to Google.
- Status: ✅ Transitioned to full Server-Side Rendering (SSR). All blocks are now natively visible in the initial HTML source.
- H1 Fix: Verified global
<h1>tag inModernHeroBlock.
| Item | Old Value | New Value (2026) | Status |
|---|---|---|---|
| Experience Count | 15+ / 17+ Years | 20+ Years | ✅ Updated in Code |
| Database Stats | 15+ Years | 20+ Years | ✅ Updated in stats table |
| Configuration | Dashboard-only | Static Fallbacks | ✅ code-synced |
| Canonical Tag | Duplicate | Single (Metadata) | ✅ Fixed in layout.tsx |
| Social Links | Placeholder (#) | Real URLs | ✅ Updated in Footer.tsx |
| Intro Heading | OUr CLIENTS | Our Clients | ✅ Fixed via Migration |
| SSR Bailouts | Navbar/Reviews | Guarded / Removed | ✅ Fixed in SiteHeader |
| SEO Coverage | Missing Blocks | 100% Native SSR | ✅ Refactored |
- SSR Check: Raw HTML contains unique H1s and Meta Descriptions?
- Redirects: Existing WordPress SEO equity is protected via 301s in
next.config.ts? - Sitemap:
/sitemap.xmlexists and lists dynamic content? - Robots:
/robots.txtpoints correctly to the sitemap? - Canonical Check: Duplicate tags removed?
- Data Sync:
statstable in Convex matches visual "20+" branding? - Social Links: Footer links validated and pointing to real profiles?
- Metadata:
generateMetadataimplemented on Products and Blogs? - GSC: Sitemap submitted to Google Search Console on migration day?