@zoyth/simple-site-framework 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +572 -0
- package/bin/create-simple-site.js +390 -0
- package/bin/simple-site.js +664 -0
- package/dist/client.js +135 -0
- package/dist/client.js.map +1 -0
- package/dist/client.mjs +107 -0
- package/dist/client.mjs.map +1 -0
- package/dist/components/index.d.mts +3936 -0
- package/dist/components/index.d.ts +3936 -0
- package/dist/components/index.js +38265 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/index.mjs +38173 -0
- package/dist/components/index.mjs.map +1 -0
- package/dist/config/index.d.mts +298 -0
- package/dist/config/index.d.ts +298 -0
- package/dist/config/index.js +19 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/index.mjs +1 -0
- package/dist/config/index.mjs.map +1 -0
- package/dist/index.d.mts +2184 -0
- package/dist/index.d.ts +2184 -0
- package/dist/index.js +1713 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1605 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/i18n/index.js +665 -0
- package/dist/lib/i18n/index.js.map +1 -0
- package/dist/lib/i18n/index.mjs +621 -0
- package/dist/lib/i18n/index.mjs.map +1 -0
- package/docs/DOCUMENTATION-STRUCTURE.md +1156 -0
- package/docs/EXPORTS.md +125 -0
- package/docs/PERFORMANCE.md +757 -0
- package/docs/POLICY-PAGES.md +867 -0
- package/docs/ROADMAP.md +334 -0
- package/docs/SEO.md +455 -0
- package/docs/SITEMAP.md +708 -0
- package/docs/STRUCTURED-DATA.md +671 -0
- package/docs/accessibility/common-patterns.md +529 -0
- package/docs/accessibility/keyboard-navigation.md +263 -0
- package/docs/accessibility/overview.md +122 -0
- package/docs/accessibility/screen-readers.md +311 -0
- package/docs/accessibility/wcag-compliance.md +159 -0
- package/docs/api/README.md +164 -0
- package/docs/api/components/Accessibility.md +356 -0
- package/docs/api/components/Button.md +240 -0
- package/docs/api/components/HeroSection.md +306 -0
- package/docs/architecture/decisions.md +449 -0
- package/docs/components/AnalyticsTracker.md +58 -0
- package/docs/components/AnimatedCounter.md +48 -0
- package/docs/components/AnimatedSection.md +56 -0
- package/docs/components/BlogCard.md +42 -0
- package/docs/components/Checkbox.md +56 -0
- package/docs/components/CodeBlock.md +52 -0
- package/docs/components/ComparisonTable.md +40 -0
- package/docs/components/ComponentDemo.md +38 -0
- package/docs/components/CountdownTimer.md +51 -0
- package/docs/components/ExitIntentModal.md +56 -0
- package/docs/components/FAQAccordion.md +66 -0
- package/docs/components/FeaturesGrid.md +55 -0
- package/docs/components/FileUpload.md +54 -0
- package/docs/components/I18nMetaTags.md +55 -0
- package/docs/components/Icon.md +53 -0
- package/docs/components/LazySection.md +46 -0
- package/docs/components/LiveProof.md +53 -0
- package/docs/components/LoadingSpinner.md +46 -0
- package/docs/components/MultiStepForm.md +48 -0
- package/docs/components/PolicyLayout.md +55 -0
- package/docs/components/PricingTable.md +49 -0
- package/docs/components/Radio.md +59 -0
- package/docs/components/SEOMetaTags.md +58 -0
- package/docs/components/ScriptInjector.md +50 -0
- package/docs/components/Select.md +72 -0
- package/docs/components/Skeleton.md +47 -0
- package/docs/components/StatsSection.md +48 -0
- package/docs/components/StickyBar.md +62 -0
- package/docs/components/StructuredData.md +99 -0
- package/docs/components/StyleGuide.md +46 -0
- package/docs/components/TableOfContents.md +47 -0
- package/docs/components/TestimonialCarousel.md +42 -0
- package/docs/components/Timeline.md +51 -0
- package/docs/components/Toast.md +59 -0
- package/docs/components/TrackedLink.md +62 -0
- package/docs/components/TrustBadges.md +44 -0
- package/docs/components/conversion/MobileCTA.md +363 -0
- package/docs/components/forms/ContactForm.md +75 -0
- package/docs/components/forms/FormField.md +74 -0
- package/docs/components/layout/Footer.md +601 -0
- package/docs/components/layout/Header.md +549 -0
- package/docs/components/layout/LanguageSelector.md +54 -0
- package/docs/components/layout/LanguageSwitcher.md +24 -0
- package/docs/components/overview.md +447 -0
- package/docs/components/sections/AboutSection.md +48 -0
- package/docs/components/sections/CTASection.md +596 -0
- package/docs/components/sections/CaseStudySection.md +47 -0
- package/docs/components/sections/ContactSection.md +599 -0
- package/docs/components/sections/FeatureSection.md +44 -0
- package/docs/components/sections/HeroSection.md +404 -0
- package/docs/components/sections/LogosSection.md +47 -0
- package/docs/components/sections/PersonalTaxesSection.md +23 -0
- package/docs/components/sections/RecruitingSection.md +23 -0
- package/docs/components/sections/SecurePortalSection.md +23 -0
- package/docs/components/sections/ServicePageLayout.md +52 -0
- package/docs/components/sections/ServicesSection.md +49 -0
- package/docs/components/sections/TestimonialSection.md +44 -0
- package/docs/components/sections/WhyChooseUsSection.md +54 -0
- package/docs/components/ui/Breadcrumb.md +70 -0
- package/docs/components/ui/Button.md +514 -0
- package/docs/components/ui/Card.md +501 -0
- package/docs/components/ui/Input.md +54 -0
- package/docs/components/ui/MobileLinks.md +43 -0
- package/docs/components/ui/Modal.md +60 -0
- package/docs/components/ui/Tabs.md +62 -0
- package/docs/components/ui/Textarea.md +52 -0
- package/docs/core-concepts/configuration-driven.md +552 -0
- package/docs/core-concepts/overview.md +351 -0
- package/docs/features/accessibility/README.md +73 -0
- package/docs/features/accessibility/aria-support.md +177 -0
- package/docs/features/accessibility/color-contrast.md +155 -0
- package/docs/features/accessibility/focus-management.md +187 -0
- package/docs/features/accessibility/testing.md +196 -0
- package/docs/features/analytics/README.md +51 -0
- package/docs/features/analytics/ab-testing.md +171 -0
- package/docs/features/analytics/conversion-tracking.md +207 -0
- package/docs/features/analytics/custom-events.md +219 -0
- package/docs/features/analytics/privacy.md +198 -0
- package/docs/features/analytics/setup.md +114 -0
- package/docs/features/analytics/tracking-events.md +224 -0
- package/docs/features/i18n/README.md +51 -0
- package/docs/features/i18n/best-practices.md +273 -0
- package/docs/features/i18n/configuration.md +84 -0
- package/docs/features/i18n/formatting.md +133 -0
- package/docs/features/i18n/locale-detection.md +122 -0
- package/docs/features/i18n/routing.md +99 -0
- package/docs/features/i18n/rtl-support.md +191 -0
- package/docs/features/i18n/translations.md +129 -0
- package/docs/features/internationalization.md +595 -0
- package/docs/features/performance/README.md +77 -0
- package/docs/features/performance/bundle-size.md +134 -0
- package/docs/features/performance/caching.md +131 -0
- package/docs/features/performance/code-splitting.md +121 -0
- package/docs/features/performance/image-optimization.md +110 -0
- package/docs/features/performance/lazy-loading.md +92 -0
- package/docs/features/performance/monitoring.md +148 -0
- package/docs/features/seo/README.md +51 -0
- package/docs/features/seo/best-practices.md +184 -0
- package/docs/features/seo/canonical-urls.md +182 -0
- package/docs/features/seo/meta-tags.md +126 -0
- package/docs/features/seo/open-graph.md +166 -0
- package/docs/features/seo/robots-txt.md +146 -0
- package/docs/features/seo/sitemaps.md +162 -0
- package/docs/features/seo/structured-data.md +166 -0
- package/docs/getting-started/installation.md +292 -0
- package/docs/getting-started/introduction.md +195 -0
- package/docs/getting-started/quick-start.md +460 -0
- package/docs/guides/analytics-setup.md +616 -0
- package/docs/i18n/CONFIGURATION.md +353 -0
- package/docs/i18n/EXAMPLES.md +402 -0
- package/docs/i18n/MIGRATION.md +260 -0
- package/docs/i18n/SEO.md +392 -0
- package/docs/i18n/STATIC-GENERATION-FIX.md +71 -0
- package/docs/migration/changelog.md +136 -0
- package/docs/migration/overview.md +233 -0
- package/docs/recipes/adding-animations.md +475 -0
- package/docs/recipes/forms-with-validation.md +393 -0
- package/package.json +152 -0
package/docs/SEO.md
ADDED
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
# SEO Optimization Guide
|
|
2
|
+
|
|
3
|
+
Complete guide to implementing SEO best practices with the Simple Site Framework.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Overview](#overview)
|
|
8
|
+
- [SEOMetaTags Component](#seometatags-component)
|
|
9
|
+
- [Open Graph Protocol](#open-graph-protocol)
|
|
10
|
+
- [Twitter Cards](#twitter-cards)
|
|
11
|
+
- [Best Practices](#best-practices)
|
|
12
|
+
- [Common Patterns](#common-patterns)
|
|
13
|
+
- [Integration with I18n](#integration-with-i18n)
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
The framework provides comprehensive SEO utilities to help your site rank well in search engines and look great when shared on social media:
|
|
18
|
+
|
|
19
|
+
- **SEOMetaTags**: Page-level metadata component
|
|
20
|
+
- **I18nMetaTags**: Multi-language SEO tags with hreflang
|
|
21
|
+
- **Structured Data**: JSON-LD helpers for rich snippets (see [STRUCTURED-DATA.md](./STRUCTURED-DATA.md))
|
|
22
|
+
- **Sitemap Generation**: Automatic sitemap creation (see [SITEMAP.md](./SITEMAP.md))
|
|
23
|
+
|
|
24
|
+
## SEOMetaTags Component
|
|
25
|
+
|
|
26
|
+
The `<SEOMetaTags>` component generates all essential meta tags for a page.
|
|
27
|
+
|
|
28
|
+
### Basic Usage
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import { SEOMetaTags } from 'simple-site-framework/components';
|
|
32
|
+
|
|
33
|
+
export default function Page() {
|
|
34
|
+
return (
|
|
35
|
+
<>
|
|
36
|
+
<SEOMetaTags
|
|
37
|
+
title="Best Email Marketing Platform | Acme"
|
|
38
|
+
description="Send beautiful email campaigns that convert. Start free today."
|
|
39
|
+
/>
|
|
40
|
+
<main>
|
|
41
|
+
{/* Page content */}
|
|
42
|
+
</main>
|
|
43
|
+
</>
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
This generates:
|
|
49
|
+
|
|
50
|
+
```html
|
|
51
|
+
<title>Best Email Marketing Platform | Acme</title>
|
|
52
|
+
<meta name="description" content="Send beautiful email campaigns that convert. Start free today." />
|
|
53
|
+
<meta property="og:title" content="Best Email Marketing Platform | Acme" />
|
|
54
|
+
<meta property="og:description" content="Send beautiful email campaigns that convert. Start free today." />
|
|
55
|
+
<meta name="twitter:title" content="Best Email Marketing Platform | Acme" />
|
|
56
|
+
<meta name="twitter:description" content="Send beautiful email campaigns that convert. Start free today." />
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Full Example with All Options
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
<SEOMetaTags
|
|
63
|
+
// Basic meta tags
|
|
64
|
+
title="How to Build High-Converting Landing Pages"
|
|
65
|
+
description="Learn proven strategies to create landing pages that convert visitors into customers. Includes examples and templates."
|
|
66
|
+
keywords={['landing pages', 'conversion optimization', 'marketing']}
|
|
67
|
+
|
|
68
|
+
// Canonical URL (prevents duplicate content issues)
|
|
69
|
+
canonical="https://example.com/blog/landing-pages"
|
|
70
|
+
|
|
71
|
+
// Robots directives
|
|
72
|
+
noIndex={false}
|
|
73
|
+
noFollow={false}
|
|
74
|
+
|
|
75
|
+
// Open Graph (Facebook, LinkedIn)
|
|
76
|
+
openGraph={{
|
|
77
|
+
title: "How to Build High-Converting Landing Pages",
|
|
78
|
+
description: "Learn proven strategies to create landing pages that convert.",
|
|
79
|
+
image: "https://example.com/images/blog/landing-pages-og.jpg",
|
|
80
|
+
imageAlt: "Landing page design mockup",
|
|
81
|
+
type: "article",
|
|
82
|
+
url: "https://example.com/blog/landing-pages",
|
|
83
|
+
siteName: "Acme Blog",
|
|
84
|
+
locale: "en_US",
|
|
85
|
+
alternateLocales: ["fr_FR", "es_ES"],
|
|
86
|
+
// Article-specific fields
|
|
87
|
+
publishedTime: "2024-01-15T10:00:00Z",
|
|
88
|
+
modifiedTime: "2024-01-20T14:30:00Z",
|
|
89
|
+
authors: ["https://example.com/authors/jane-doe"],
|
|
90
|
+
section: "Marketing",
|
|
91
|
+
tags: ["conversion", "landing pages", "optimization"]
|
|
92
|
+
}}
|
|
93
|
+
|
|
94
|
+
// Twitter Card
|
|
95
|
+
twitter={{
|
|
96
|
+
card: "summary_large_image",
|
|
97
|
+
site: "@acme",
|
|
98
|
+
creator: "@janedoe",
|
|
99
|
+
image: "https://example.com/images/blog/landing-pages-twitter.jpg",
|
|
100
|
+
imageAlt: "Landing page design mockup"
|
|
101
|
+
}}
|
|
102
|
+
|
|
103
|
+
// Additional custom meta tags
|
|
104
|
+
additionalMetaTags={[
|
|
105
|
+
{ name: "author", content: "Jane Doe" },
|
|
106
|
+
{ property: "fb:app_id", content: "123456789" }
|
|
107
|
+
]}
|
|
108
|
+
|
|
109
|
+
// Additional link tags
|
|
110
|
+
additionalLinkTags={[
|
|
111
|
+
{ rel: "alternate", href: "https://example.com/fr/blog/landing-pages", hreflang: "fr" }
|
|
112
|
+
]}
|
|
113
|
+
/>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Open Graph Protocol
|
|
117
|
+
|
|
118
|
+
Open Graph tags control how your pages appear when shared on Facebook, LinkedIn, and other social platforms.
|
|
119
|
+
|
|
120
|
+
### Page Types
|
|
121
|
+
|
|
122
|
+
```tsx
|
|
123
|
+
// Website (default)
|
|
124
|
+
<SEOMetaTags
|
|
125
|
+
title="Acme - Email Marketing Platform"
|
|
126
|
+
description="..."
|
|
127
|
+
openGraph={{
|
|
128
|
+
type: "website",
|
|
129
|
+
siteName: "Acme"
|
|
130
|
+
}}
|
|
131
|
+
/>
|
|
132
|
+
|
|
133
|
+
// Article/Blog Post
|
|
134
|
+
<SEOMetaTags
|
|
135
|
+
title="10 Email Marketing Tips"
|
|
136
|
+
description="..."
|
|
137
|
+
openGraph={{
|
|
138
|
+
type: "article",
|
|
139
|
+
publishedTime: "2024-01-15T10:00:00Z",
|
|
140
|
+
modifiedTime: "2024-01-20T14:30:00Z",
|
|
141
|
+
authors: ["https://example.com/authors/jane-doe"],
|
|
142
|
+
section: "Marketing",
|
|
143
|
+
tags: ["email", "marketing", "tips"]
|
|
144
|
+
}}
|
|
145
|
+
/>
|
|
146
|
+
|
|
147
|
+
// Product
|
|
148
|
+
<SEOMetaTags
|
|
149
|
+
title="Premium Email Plan - $99/month"
|
|
150
|
+
description="..."
|
|
151
|
+
openGraph={{
|
|
152
|
+
type: "product",
|
|
153
|
+
image: "https://example.com/products/premium-plan.jpg"
|
|
154
|
+
}}
|
|
155
|
+
/>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Image Recommendations
|
|
159
|
+
|
|
160
|
+
- **Minimum size**: 1200×630 pixels
|
|
161
|
+
- **Aspect ratio**: 1.91:1 (Facebook) or 2:1 (LinkedIn)
|
|
162
|
+
- **Format**: JPG or PNG
|
|
163
|
+
- **Max file size**: 8 MB
|
|
164
|
+
- **Always use absolute URLs**: `https://example.com/image.jpg`
|
|
165
|
+
|
|
166
|
+
```tsx
|
|
167
|
+
<SEOMetaTags
|
|
168
|
+
title="..."
|
|
169
|
+
description="..."
|
|
170
|
+
openGraph={{
|
|
171
|
+
image: "https://example.com/og-image.jpg", // Absolute URL
|
|
172
|
+
imageAlt: "Descriptive alt text for accessibility"
|
|
173
|
+
}}
|
|
174
|
+
/>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Twitter Cards
|
|
178
|
+
|
|
179
|
+
Twitter Cards enhance how your links appear on Twitter/X.
|
|
180
|
+
|
|
181
|
+
### Card Types
|
|
182
|
+
|
|
183
|
+
**Summary Card** (Small image, good for text-focused content):
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
<SEOMetaTags
|
|
187
|
+
title="..."
|
|
188
|
+
description="..."
|
|
189
|
+
twitter={{
|
|
190
|
+
card: "summary",
|
|
191
|
+
site: "@yourcompany",
|
|
192
|
+
creator: "@author"
|
|
193
|
+
}}
|
|
194
|
+
/>
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Summary Large Image** (Large image, good for visual content):
|
|
198
|
+
|
|
199
|
+
```tsx
|
|
200
|
+
<SEOMetaTags
|
|
201
|
+
title="..."
|
|
202
|
+
description="..."
|
|
203
|
+
twitter={{
|
|
204
|
+
card: "summary_large_image",
|
|
205
|
+
site: "@yourcompany",
|
|
206
|
+
image: "https://example.com/twitter-card.jpg",
|
|
207
|
+
imageAlt: "Descriptive alt text"
|
|
208
|
+
}}
|
|
209
|
+
/>
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Image Recommendations
|
|
213
|
+
|
|
214
|
+
- **Summary card**: 1:1 aspect ratio (e.g., 400×400)
|
|
215
|
+
- **Large image card**: 2:1 aspect ratio (e.g., 1200×600)
|
|
216
|
+
- **Max file size**: 5 MB
|
|
217
|
+
|
|
218
|
+
## Best Practices
|
|
219
|
+
|
|
220
|
+
### Title Tags
|
|
221
|
+
|
|
222
|
+
**Length**: 50-60 characters (longer titles get truncated in search results)
|
|
223
|
+
|
|
224
|
+
```tsx
|
|
225
|
+
// ✅ Good
|
|
226
|
+
title="Email Marketing Platform | Acme"
|
|
227
|
+
|
|
228
|
+
// ❌ Too long
|
|
229
|
+
title="Acme - The Best Email Marketing Platform for Small Businesses and Enterprises"
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Format**: `Page Title | Brand Name` or `Page Title - Brand Name`
|
|
233
|
+
|
|
234
|
+
```tsx
|
|
235
|
+
// Homepage
|
|
236
|
+
title="Acme - Email Marketing Platform"
|
|
237
|
+
|
|
238
|
+
// Product page
|
|
239
|
+
title="Pricing Plans | Acme"
|
|
240
|
+
|
|
241
|
+
// Blog post
|
|
242
|
+
title="10 Email Tips | Acme Blog"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### Meta Descriptions
|
|
246
|
+
|
|
247
|
+
**Length**: 150-160 characters (longer descriptions get truncated)
|
|
248
|
+
|
|
249
|
+
```tsx
|
|
250
|
+
// ✅ Good - Clear, actionable, within limit
|
|
251
|
+
description="Send beautiful email campaigns that convert. Easy drag-and-drop builder, powerful automation, detailed analytics. Start free today."
|
|
252
|
+
|
|
253
|
+
// ❌ Too short - Doesn't use available space
|
|
254
|
+
description="Email marketing platform."
|
|
255
|
+
|
|
256
|
+
// ❌ Too long - Gets truncated
|
|
257
|
+
description="Acme is the world's leading email marketing platform trusted by over 100,000 businesses worldwide to send beautiful campaigns..."
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
**Include**:
|
|
261
|
+
- Clear value proposition
|
|
262
|
+
- Call to action
|
|
263
|
+
- Relevant keywords (naturally)
|
|
264
|
+
|
|
265
|
+
### Keywords
|
|
266
|
+
|
|
267
|
+
**Note**: The `keywords` meta tag has minimal impact on modern SEO. Focus on:
|
|
268
|
+
1. Using keywords naturally in title and description
|
|
269
|
+
2. Structuring content with proper headings
|
|
270
|
+
3. Creating quality content
|
|
271
|
+
|
|
272
|
+
```tsx
|
|
273
|
+
// Optional - use sparingly
|
|
274
|
+
keywords={['email marketing', 'marketing automation', 'email campaigns']}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### Canonical URLs
|
|
278
|
+
|
|
279
|
+
Always use **absolute URLs** for canonical tags:
|
|
280
|
+
|
|
281
|
+
```tsx
|
|
282
|
+
// ✅ Correct
|
|
283
|
+
canonical="https://example.com/products/premium"
|
|
284
|
+
|
|
285
|
+
// ❌ Wrong
|
|
286
|
+
canonical="/products/premium"
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**When to use**:
|
|
290
|
+
- Prevent duplicate content issues
|
|
291
|
+
- Consolidate similar pages (e.g., paginated content)
|
|
292
|
+
- Specify preferred URL for search engines
|
|
293
|
+
|
|
294
|
+
### Robots Directives
|
|
295
|
+
|
|
296
|
+
```tsx
|
|
297
|
+
// Allow indexing and following links (default)
|
|
298
|
+
<SEOMetaTags noIndex={false} noFollow={false} />
|
|
299
|
+
|
|
300
|
+
// Prevent indexing (e.g., private pages, duplicate content)
|
|
301
|
+
<SEOMetaTags noIndex={true} noFollow={false} />
|
|
302
|
+
|
|
303
|
+
// Prevent following links (rare - use with caution)
|
|
304
|
+
<SEOMetaTags noIndex={false} noFollow={true} />
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
**Common use cases for noIndex**:
|
|
308
|
+
- Thank you pages
|
|
309
|
+
- Confirmation pages
|
|
310
|
+
- Internal search results
|
|
311
|
+
- Duplicate content variations
|
|
312
|
+
|
|
313
|
+
## Common Patterns
|
|
314
|
+
|
|
315
|
+
### Homepage
|
|
316
|
+
|
|
317
|
+
```tsx
|
|
318
|
+
<SEOMetaTags
|
|
319
|
+
title="Acme - Email Marketing Platform"
|
|
320
|
+
description="Send beautiful email campaigns that convert. Trusted by 100,000+ businesses worldwide. Start free today."
|
|
321
|
+
canonical="https://acme.com"
|
|
322
|
+
openGraph={{
|
|
323
|
+
type: "website",
|
|
324
|
+
siteName: "Acme",
|
|
325
|
+
image: "https://acme.com/og-homepage.jpg",
|
|
326
|
+
locale: "en_US"
|
|
327
|
+
}}
|
|
328
|
+
twitter={{
|
|
329
|
+
card: "summary_large_image",
|
|
330
|
+
site: "@acme"
|
|
331
|
+
}}
|
|
332
|
+
/>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Product/Service Page
|
|
336
|
+
|
|
337
|
+
```tsx
|
|
338
|
+
<SEOMetaTags
|
|
339
|
+
title="Premium Email Plan - $99/month | Acme"
|
|
340
|
+
description="Unlimited emails, advanced automation, priority support. Perfect for growing businesses. 30-day money-back guarantee."
|
|
341
|
+
canonical="https://acme.com/pricing/premium"
|
|
342
|
+
openGraph={{
|
|
343
|
+
type: "product",
|
|
344
|
+
image: "https://acme.com/images/premium-plan.jpg"
|
|
345
|
+
}}
|
|
346
|
+
/>
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### Blog Post
|
|
350
|
+
|
|
351
|
+
```tsx
|
|
352
|
+
<SEOMetaTags
|
|
353
|
+
title="10 Email Marketing Tips for 2024 | Acme Blog"
|
|
354
|
+
description="Boost your email ROI with these proven strategies. Learn from industry experts and real case studies."
|
|
355
|
+
canonical="https://acme.com/blog/email-marketing-tips-2024"
|
|
356
|
+
openGraph={{
|
|
357
|
+
type: "article",
|
|
358
|
+
publishedTime: "2024-01-15T10:00:00Z",
|
|
359
|
+
authors: ["https://acme.com/authors/jane-doe"],
|
|
360
|
+
section: "Email Marketing",
|
|
361
|
+
tags: ["email marketing", "tips", "2024"]
|
|
362
|
+
}}
|
|
363
|
+
twitter={{
|
|
364
|
+
card: "summary_large_image",
|
|
365
|
+
creator: "@janedoe"
|
|
366
|
+
}}
|
|
367
|
+
/>
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Landing Page
|
|
371
|
+
|
|
372
|
+
```tsx
|
|
373
|
+
<SEOMetaTags
|
|
374
|
+
title="Free Email Marketing Webinar | Acme"
|
|
375
|
+
description="Join our live webinar: How to Triple Your Email ROI. Jan 25, 2024 at 2pm EST. Limited spots available!"
|
|
376
|
+
canonical="https://acme.com/webinar/triple-email-roi"
|
|
377
|
+
openGraph={{
|
|
378
|
+
type: "website",
|
|
379
|
+
image: "https://acme.com/images/webinar-og.jpg"
|
|
380
|
+
}}
|
|
381
|
+
// Consider noIndex for time-sensitive or conversion-focused pages
|
|
382
|
+
noIndex={false}
|
|
383
|
+
/>
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
## Integration with I18n
|
|
387
|
+
|
|
388
|
+
Combine `SEOMetaTags` with `I18nMetaTags` for multi-language sites:
|
|
389
|
+
|
|
390
|
+
```tsx
|
|
391
|
+
import { SEOMetaTags, I18nMetaTags } from 'simple-site-framework/components';
|
|
392
|
+
|
|
393
|
+
export default function Page({ params }: { params: { locale: string } }) {
|
|
394
|
+
return (
|
|
395
|
+
<>
|
|
396
|
+
{/* Page-specific SEO */}
|
|
397
|
+
<SEOMetaTags
|
|
398
|
+
title="Email Marketing Platform | Acme"
|
|
399
|
+
description="Send beautiful email campaigns that convert."
|
|
400
|
+
canonical="https://acme.com/features"
|
|
401
|
+
openGraph={{
|
|
402
|
+
locale: params.locale === 'fr' ? 'fr_FR' : 'en_US',
|
|
403
|
+
alternateLocales: params.locale === 'fr' ? ['en_US'] : ['fr_FR']
|
|
404
|
+
}}
|
|
405
|
+
/>
|
|
406
|
+
|
|
407
|
+
{/* Multi-language SEO */}
|
|
408
|
+
<I18nMetaTags
|
|
409
|
+
currentLocale={params.locale}
|
|
410
|
+
pathname="/features"
|
|
411
|
+
baseUrl="https://acme.com"
|
|
412
|
+
/>
|
|
413
|
+
|
|
414
|
+
<main>...</main>
|
|
415
|
+
</>
|
|
416
|
+
);
|
|
417
|
+
}
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
## Testing Your SEO
|
|
421
|
+
|
|
422
|
+
### Tools
|
|
423
|
+
|
|
424
|
+
1. **Google Search Console**: Monitor search performance
|
|
425
|
+
2. **Facebook Sharing Debugger**: https://developers.facebook.com/tools/debug/
|
|
426
|
+
3. **Twitter Card Validator**: https://cards-dev.twitter.com/validator
|
|
427
|
+
4. **LinkedIn Post Inspector**: https://www.linkedin.com/post-inspector/
|
|
428
|
+
5. **Chrome DevTools**: View generated `<head>` tags
|
|
429
|
+
|
|
430
|
+
### Checklist
|
|
431
|
+
|
|
432
|
+
- [ ] Every page has unique `title` and `description`
|
|
433
|
+
- [ ] Titles are 50-60 characters
|
|
434
|
+
- [ ] Descriptions are 150-160 characters
|
|
435
|
+
- [ ] Canonical URLs are absolute
|
|
436
|
+
- [ ] Open Graph images are 1200×630+ pixels
|
|
437
|
+
- [ ] Twitter card images are appropriate size
|
|
438
|
+
- [ ] All image URLs are absolute (https://)
|
|
439
|
+
- [ ] Locale tags match your i18n setup
|
|
440
|
+
- [ ] No duplicate meta tags
|
|
441
|
+
- [ ] robots directives are intentional
|
|
442
|
+
|
|
443
|
+
## Next Steps
|
|
444
|
+
|
|
445
|
+
- **Structured Data**: Add JSON-LD for rich snippets → [STRUCTURED-DATA.md](./STRUCTURED-DATA.md)
|
|
446
|
+
- **Sitemap**: Generate XML sitemap → [SITEMAP.md](./SITEMAP.md)
|
|
447
|
+
- **Performance**: Optimize Core Web Vitals → [PERFORMANCE.md](./PERFORMANCE.md)
|
|
448
|
+
- **Accessibility**: Improve WCAG compliance → [ACCESSIBILITY.md](./ACCESSIBILITY.md)
|
|
449
|
+
|
|
450
|
+
## Resources
|
|
451
|
+
|
|
452
|
+
- [Google Search Central](https://developers.google.com/search)
|
|
453
|
+
- [Open Graph Protocol](https://ogp.me/)
|
|
454
|
+
- [Twitter Cards Documentation](https://developer.twitter.com/en/docs/twitter-for-websites/cards/overview/abouts-cards)
|
|
455
|
+
- [Next.js Metadata API](https://nextjs.org/docs/app/building-your-application/optimizing/metadata)
|