Revenue analysis for the ScamCheck/TrustSeal growth engine: highest-RPM scam topics, best ad placements (desktop + mobile), paid-user ad removal, and estimated Google Discover CTR uplift from dynamic OG images, verdict badges, and freshness signals. Lightweight, CLS-safe, Vercel-hobby-friendly implementation.
This phase adds revenue (AdSense) and click-through (Discover/social) to the programmatic scam pages, without harming UX or Core Web Vitals, and removes ads for paid users automatically.
components/ads/*): lazy (IntersectionObserver), responsive, CLS-safe reserved height, single-init, auto-hidden for paid users, graceful no-op when unconfigured.usePaidUser reads a shared cookie/localStorage flag; ads + the AdSense script never load for paid users. Hydration-safe (decision happens post-mount; server HTML matches first client render)./api/og?template=scam): severity-coloured, bilingual (EN + हिन्दी), with the 1930 helpline — CDN-cached for a year.Advertiser demand (and thus RPM) is highest where the reader has financial/commercial intent adjacent to the topic:
Strategy: route the highest-RPM topics to the below-verdict slot (best viewability), and lean on volume topics for Discover-driven sessions.
Desktop / tablet:
Mobile (majority of India traffic):
Active paid plans (sc_plan cookie/localStorage matching paid|pro|basic|premium|active) → zero ads, script not even downloaded. No hydration mismatch (post-mount decision), graceful fallback (free users with blocked storage simply see ads).
Discover CTR is driven by image quality + headline + freshness + trust. The combined changes target a meaningful lift over a bare SPA card:
max-image-preview:large.Planning estimate: pages with a strong dedicated image + honest headline typically see roughly +15–40% CTR versus text-only/generic-image cards in Discover and social. Combined with eligibility from freshness + schema, expect Discover to become a material traffic source for trending scam pages within weeks of indexing. Estimate, not a guarantee — actual lift depends on topic, competition, and Discover's per-user ranking.
Set in Vercel: NEXT_PUBLIC_ADSENSE_CLIENT (ca-pub-…), NEXT_PUBLIC_ADSENSE_SLOT_BELOW_VERDICT, NEXT_PUBLIC_ADSENSE_SLOT_IN_CONTENT. Ensure the consumer apps set the shared sc_plan flag for paid users (override key via NEXT_PUBLIC_PAID_FLAG_KEY). Until slots are set, pages render cleanly with no ad boxes (no CLS, no empty space).