Skip to content

Latest commit

 

History

History
115 lines (89 loc) · 5.55 KB

File metadata and controls

115 lines (89 loc) · 5.55 KB

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.


🟢 Phase 1: SEO & SSR Architecture (CRITICAL) [DONE]

Goal: Fix the "Thin Content" issue so search engines can see 100% of your business data in the initial HTML.

1.1 Puck Config Sanitization (initialData Pattern)

  • Status: Blocks like ModernStats currently call useQuery in the config, which crashes on the server.
  • Problem: Previously suggested useEffect is WRONG; it remains client-only.
  • Instruction:
    • Use the initialData pattern already in CmsPageRenderer.tsx.
    • Refactor render functions in components/puck/config.tsx to read from props.initialData or props.initialDbCategories.
    • Code Example:
      render: ({ heading, initialData }) => {
        const stats = initialData?.globalStats || fallbackStats;
        return <StatsCounter stats={stats} heading={heading} />;
      }

1.2 Re-enabling SSR

  • Instruction:
    • Open components/DynamicClients.tsx.
    • Set ssr: true for DynamicCmsPageClient.
    • Test: Right-click $\to$ View Page Source. If you see your headings and text, the "Thin Content" issue is resolved for Nature's Boon.

🔵 Phase 2: Performance & Image Optimization [DONE/VERIFIED]

Goal: Reduce LCP and ensure Hosting CPU isn't overwhelmed by 4K image optimization.

2.1 Hero Carousel Sizing Fix

  • 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.

🟡 Phase 3: Advanced Metadata & Schema [DONE]

Goal: Dynamic indexing per page and professional social sharing.

3.1 Per-Page Dynamic Metadata

  • Reasoning: Metadata in layout.tsx is static. Every product and blog needs unique titles.
  • Instruction:
    • Implement generateMetadata in app/page.tsx, app/products/[slug]/page.tsx, etc.
    • Fetch the page/product data from Convex manually inside the function to return a unique title and openGraph object.

🟣 Phase 4: SEO Content Parity [DONE]

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. Use Typography variant="h1".
  • SSR Fix: ✅ RESOLVED - Implemented preloadQuery in CmsPageRenderer.tsx and removed SeoContentSnapshot.tsx to prevent cloaking risks.

🔴 Phase 13: Audit Remediation (March 13, 2026) [DONE]

Goal: Resolve high-priority bugs identified in the latest source audit.

13.1 Ghost Layer Sync (The "15+ vs 20+" Bug)

  • Status: ✅ All content layers now pull from live Convex data via preloadQuery.
  • Note: Removed the "ghost layer" (SeoContentSnapshot) in favor of direct SSR.

13.2 Canonical Tag Collision

  • Status: ✅ Duplicate canonical removed from layout.tsx.

13.3 Header/Footer Polish

  • Status: ✅ Typos fixed and social links pointing to real profiles.

13.4 SSR Health & LCP

  • Status: ✅ Solved BAILOUT_TO_CLIENT_SIDE_RENDERING in SiteHeader.tsx.
  • Action: Removed if (typeof window === "undefined") return null; to ensure header renders for search engines.

🟢 Phase 14: SEO Content Parity (Fixed Block Mappings) [DONE]

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 in ModernHeroBlock.

📄 Logic Report: March 13 Audit

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

🏁 Final Launch Readiness Checklist (Updated)

  • 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.xml exists and lists dynamic content?
  • Robots: /robots.txt points correctly to the sitemap?
  • Canonical Check: Duplicate tags removed?
  • Data Sync: stats table in Convex matches visual "20+" branding?
  • Social Links: Footer links validated and pointing to real profiles?
  • Metadata: generateMetadata implemented on Products and Blogs?
  • GSC: Sitemap submitted to Google Search Console on migration day?