import { JsonLd } from '@/components/json-ld'; import { SEO_KEYWORDS, SITE_DESCRIPTION, SITE_NAME, SITE_TAGLINE, SITE_URL, siteJsonLd, } from '@/lib/seo'; import { GeistMono } from 'geist/font/mono'; import { GeistSans } from 'geist/font/sans'; import type { Metadata } from 'next'; import './globals.css'; const TITLE = `${SITE_NAME} — ${SITE_TAGLINE}`; export const metadata: Metadata = { metadataBase: new URL(SITE_URL), title: { default: TITLE, template: `%s | ${SITE_NAME}`, }, description: SITE_DESCRIPTION, applicationName: SITE_NAME, keywords: SEO_KEYWORDS, authors: [{ name: SITE_NAME }], creator: SITE_NAME, publisher: SITE_NAME, alternates: { canonical: '/', types: { 'application/rss+xml': [{ url: '/feed.xml', title: `${SITE_NAME} — MCP guides` }] }, }, // Google Search Console ownership token. Unset in dev; set in production so // the sitemap can be submitted and indexing monitored. ...(process.env.NEXT_PUBLIC_GSC_VERIFICATION ? { verification: { google: process.env.NEXT_PUBLIC_GSC_VERIFICATION } } : {}), openGraph: { type: 'website', locale: 'en_US', url: SITE_URL, siteName: SITE_NAME, title: TITLE, description: SITE_DESCRIPTION, }, twitter: { card: 'summary_large_image', title: TITLE, description: SITE_DESCRIPTION, }, robots: { index: true, follow: true, googleBot: { index: true, follow: true, 'max-image-preview': 'large', 'max-snippet': -1, 'max-video-preview': -1, }, }, }; export default function RootLayout({ children }: { children: React.ReactNode }) { return (