Add full SEO optimization for Spanglish social and language events

- Add comprehensive metadata to root layout with Open Graph, Twitter cards
- Create dynamic sitemap.ts for all pages and events
- Create robots.ts with proper allow/disallow rules
- Add JSON-LD Event structured data to event detail pages
- Add page-specific metadata to events, community, contact, FAQ pages
- Add FAQ structured data schema
- Update footer with local SEO text for Asunción, Paraguay
- Add web manifest for mobile SEO
- Create 404 page with proper noindex
- Optimize image alt text and add lazy loading
- Add NEXT_PUBLIC_SITE_URL env variable
- Add about/ folder to gitignore
This commit is contained in:
root
2026-01-30 21:05:25 +00:00
parent d0ea55dc5b
commit 47ba754f05
40 changed files with 2659 additions and 420 deletions

View File

@@ -1,6 +1,41 @@
import type { Metadata } from 'next';
import Header from '@/components/layout/Header';
import Footer from '@/components/layout/Footer';
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://spanglish.com.py';
export const metadata: Metadata = {
openGraph: {
siteName: 'Spanglish',
type: 'website',
locale: 'en_US',
alternateLocale: 'es_PY',
},
twitter: {
card: 'summary_large_image',
},
};
// JSON-LD Organization schema for all public pages
const organizationSchema = {
'@context': 'https://schema.org',
'@type': 'Organization',
name: 'Spanglish',
url: siteUrl,
logo: `${siteUrl}/images/logo.png`,
description: 'Language exchange community organizing English and Spanish meetups in Asunción, Paraguay.',
address: {
'@type': 'PostalAddress',
addressLocality: 'Asunción',
addressCountry: 'PY',
},
sameAs: [
process.env.NEXT_PUBLIC_INSTAGRAM_URL,
process.env.NEXT_PUBLIC_WHATSAPP_URL,
process.env.NEXT_PUBLIC_TELEGRAM_URL,
].filter(Boolean),
};
export default function PublicLayout({
children,
}: {
@@ -8,6 +43,10 @@ export default function PublicLayout({
}) {
return (
<div className="min-h-screen flex flex-col">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(organizationSchema) }}
/>
<Header />
<main className="flex-1">{children}</main>
<Footer />