mirror of
https://github.com/Luchexx/wacrm.git
synced 2026-11-02 09:19:51 +00:00
Brings the site from bare-bones metadata to production-ready SEO. Covers technical crawlability, rich-result eligibility, social sharing, and duplicate-content prevention. Added: - src/lib/seo/site-config.ts — single source of truth for base URL, brand, description, keywords. Referenced by every consumer so a domain / rename is a one-file edit. - src/lib/seo/faq-data.ts — FAQ Q&A extracted from the component so the UI and the FAQPage JSON-LD render the same content. - src/lib/seo/structured-data.ts — builders for WebSite, Organization, SoftwareApplication, and FAQPage JSON-LD nodes. FAQPage is eligible for Google's FAQ rich result; SoftwareApplication with a free Offer can earn a "Free" badge on SERP. - src/components/seo/json-ld.tsx — emits one <script type="application/ld+json"> per node (Google's preferred shape). - src/app/opengraph-image.tsx — Next auto-generates a 1200×630 PNG for the landing page's OG / Twitter previews. - src/app/sitemap.ts — lists only public, indexable pages. - src/app/robots.ts — Allow /, Disallow every app / auth route, references the sitemap. Updated: - src/app/layout.tsx — metadataBase, title template (%s — WaCRM), default OpenGraph + Twitter Cards (inherited everywhere), canonical, icons config, viewport (themeColor + colorScheme=dark for browser chrome on mobile). - src/app/page.tsx — injects the 4 JSON-LD blocks, sets explicit canonical for /, overrides the title. - src/app/(auth)/layout.tsx — noindex+nofollow for login / signup / forgot-password (no SEO value; would compete with landing page). - src/app/(dashboard)/layout.tsx — split into thin server layout (exports noindex metadata) + DashboardShell client component. App routes won't be indexed even if a URL leaks. - src/components/landing/faq.tsx — consumes the shared FAQ data module (no more drift between UI and JSON-LD). Verified end-to-end against the running dev server: - GET / HTML contains: canonical, description, keywords, robots, og:title/url/image/type, twitter:card/title, theme-color, + 4 JSON-LD blocks (WebSite, Organization, SoftwareApplication, FAQPage). - GET /opengraph-image → 200 OK, content-type image/png. - GET /login HTML contains <meta name="robots" content="noindex, nofollow, nocache">. - GET /sitemap.xml serves valid XML with /. - GET /robots.txt serves Allow /, Disallow all app + auth paths, sitemap reference. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
36 lines
883 B
TypeScript
36 lines
883 B
TypeScript
import type { MetadataRoute } from 'next'
|
|
import { SITE_URL } from '@/lib/seo/site-config'
|
|
|
|
/**
|
|
* robots.txt served at /robots.txt. We explicitly disallow every
|
|
* gated area so crawlers don't spend their budget on pages they'll
|
|
* bounce off. Auth pages are closed off too — no SEO value, and
|
|
* we don't want "Sign in to WaCRM" competing with the landing page
|
|
* in SERPs.
|
|
*/
|
|
export default function robots(): MetadataRoute.Robots {
|
|
return {
|
|
rules: [
|
|
{
|
|
userAgent: '*',
|
|
allow: '/',
|
|
disallow: [
|
|
'/api/',
|
|
'/dashboard',
|
|
'/inbox',
|
|
'/contacts',
|
|
'/pipelines',
|
|
'/broadcasts',
|
|
'/automations',
|
|
'/settings',
|
|
'/login',
|
|
'/signup',
|
|
'/forgot-password',
|
|
],
|
|
},
|
|
],
|
|
sitemap: `${SITE_URL}/sitemap.xml`,
|
|
host: SITE_URL,
|
|
}
|
|
}
|