SEO + AEO
This commit is contained in:
197
README.md
197
README.md
@@ -12,7 +12,9 @@ A modern, privacy-first password generator built with Next.js, TypeScript, and T
|
||||
- 🔧 **Customizable Options** - Length, character types, and exclude similar characters
|
||||
- 📋 **One-Click Copy** - Copy passwords to clipboard with visual feedback
|
||||
- ♿ **Accessible** - Full keyboard navigation and screen reader support
|
||||
- 📊 **SEO Optimized** - Structured data, meta tags, and semantic HTML
|
||||
- 📊 **SEO & AEO Optimized** - Answer Engine Optimization for ChatGPT/Perplexity, structured data, meta tags, and semantic HTML
|
||||
- 🔍 **IndexNow Integration** - Automatic search engine notifications for content updates
|
||||
- 🤖 **Answer Engine Ready** - Optimized for AI crawlers (GPTBot, PerplexityBot, Claude-Web)
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
@@ -78,7 +80,27 @@ src/
|
||||
Create a `.env.local` file:
|
||||
|
||||
```env
|
||||
NEXT_PUBLIC_SITE_URL=https://your-domain.com
|
||||
# Next.js Configuration
|
||||
NEXT_PUBLIC_SITE_URL=https://passmaster.app
|
||||
|
||||
# IndexNow Configuration
|
||||
INDEXNOW_KEY=your-indexnow-key-here
|
||||
SITE_HOST=passmaster.app
|
||||
|
||||
# SEO/AEO Configuration
|
||||
ORG_NAME="PassMaster"
|
||||
ORG_LOGO_URL=https://passmaster.app/icons/icon-512.png
|
||||
CONTACT_EMAIL=contact@passmaster.app
|
||||
DEFAULT_AUTHOR_NAME="PassMaster Team"
|
||||
DEFAULT_AUTHOR_URL=https://passmaster.app/about
|
||||
|
||||
# Social Media
|
||||
LINKEDIN_URL=https://www.linkedin.com/company/passmaster
|
||||
TWITTER_URL=https://twitter.com/passmaster
|
||||
|
||||
# Feature Flags
|
||||
ENABLE_INDEXNOW=true
|
||||
ENABLE_SCHEMA_VALIDATION=true
|
||||
```
|
||||
|
||||
### PWA Configuration
|
||||
@@ -93,6 +115,177 @@ The PWA is configured in `next.config.js` and `public/manifest.json`. Update the
|
||||
- **Splash Screen**: Custom loading screen
|
||||
- **Theme Colors**: Consistent branding
|
||||
|
||||
## 🤖 Answer Engine Optimization (AEO) Setup
|
||||
|
||||
PassMaster is optimized for AI search engines like ChatGPT, Perplexity, and Claude. Here's how to set it up:
|
||||
|
||||
### 1. IndexNow Configuration
|
||||
|
||||
Get your IndexNow API key from [Microsoft IndexNow](https://www.indexnow.org/) and add it to your environment:
|
||||
|
||||
```bash
|
||||
INDEXNOW_KEY=your-unique-key
|
||||
SITE_HOST=passmaster.app
|
||||
ENABLE_INDEXNOW=true
|
||||
```
|
||||
|
||||
The key file will be automatically created at `/public/{INDEXNOW_KEY}.txt`.
|
||||
|
||||
### 2. Manual IndexNow Pinging
|
||||
|
||||
Use the CLI tool to manually notify search engines about updates:
|
||||
|
||||
```bash
|
||||
# Test with homepage
|
||||
npx tsx scripts/ping-indexnow.ts --test
|
||||
|
||||
# Ping specific URLs
|
||||
npx tsx scripts/ping-indexnow.ts https://passmaster.app/offline https://passmaster.app/client-side
|
||||
|
||||
# Ping all main pages
|
||||
npx tsx scripts/ping-indexnow.ts --all
|
||||
|
||||
# Check status
|
||||
npx tsx scripts/ping-indexnow.ts --status
|
||||
```
|
||||
|
||||
### 3. Automatic Pinging
|
||||
|
||||
IndexNow automatically triggers when:
|
||||
- Pages are updated or published
|
||||
- New content is added
|
||||
- Sitemap is updated
|
||||
|
||||
Use the API endpoint for programmatic pinging:
|
||||
|
||||
```javascript
|
||||
// Queue URLs for IndexNow notification
|
||||
await fetch('/api/indexnow', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
urls: ['https://passmaster.app/new-page']
|
||||
})
|
||||
})
|
||||
```
|
||||
|
||||
### 4. JSON-LD Schema Usage
|
||||
|
||||
Add structured data to your pages:
|
||||
|
||||
```tsx
|
||||
import { FAQPageJsonLd, HowToJsonLd, ArticleJsonLd } from '@/components/seo/JsonLd'
|
||||
|
||||
// FAQ Page
|
||||
<FAQPageJsonLd faqs={[
|
||||
{ question: 'Wie funktioniert der Generator?', answer: 'Der Generator...' },
|
||||
// ... more FAQs
|
||||
]} />
|
||||
|
||||
// How-To Content
|
||||
<HowToJsonLd
|
||||
name="Sicheres Passwort erstellen"
|
||||
description="Schritt-für-Schritt Anleitung"
|
||||
steps={[
|
||||
{ name: "Generator öffnen", text: "Gehen Sie zu..." },
|
||||
{ name: "Einstellungen wählen", text: "Wählen Sie..." },
|
||||
// ... more steps
|
||||
]}
|
||||
/>
|
||||
|
||||
// Article Content
|
||||
<ArticleJsonLd
|
||||
headline="Client-seitige Passwort-Sicherheit"
|
||||
description="Warum lokale Generierung sicherer ist"
|
||||
url="https://passmaster.app/client-side"
|
||||
datePublished="2024-01-01T00:00:00Z"
|
||||
dateModified="2024-01-15T00:00:00Z"
|
||||
author={{ name: "PassMaster Team" }}
|
||||
/>
|
||||
```
|
||||
|
||||
### 5. Content Metadata
|
||||
|
||||
Add publication and update dates to your content:
|
||||
|
||||
```tsx
|
||||
import { ContentMeta, AuthorBox } from '@/components/seo/ContentMeta'
|
||||
|
||||
<ContentMeta
|
||||
publishedDate="2024-01-01"
|
||||
updatedDate="2024-01-15"
|
||||
author={{
|
||||
name: "PassMaster Team",
|
||||
url: "https://passmaster.app/about"
|
||||
}}
|
||||
readingTime={5}
|
||||
/>
|
||||
```
|
||||
|
||||
### 6. Canonical URLs
|
||||
|
||||
Ensure proper canonical URLs on all pages:
|
||||
|
||||
```tsx
|
||||
import { Canonical } from '@/components/seo/Canonical'
|
||||
|
||||
// Automatic canonical based on current path
|
||||
<Canonical />
|
||||
|
||||
// Custom canonical URL
|
||||
<Canonical url="https://passmaster.app/custom-page" />
|
||||
```
|
||||
|
||||
## 🔍 AEO Validation
|
||||
|
||||
### Robots.txt Validation
|
||||
|
||||
```bash
|
||||
curl https://passmaster.app/robots.txt
|
||||
# Should show: User-agent: PerplexityBot, Allow: /
|
||||
# Should show: User-agent: GPTBot, Allow: /
|
||||
```
|
||||
|
||||
### Schema Validation
|
||||
|
||||
```bash
|
||||
# Check JSON-LD on any page
|
||||
curl https://passmaster.app/ | grep -o '<script type="application/ld\+json">.*</script>'
|
||||
|
||||
# Validate with structured data testing tool
|
||||
# https://search.google.com/test/rich-results
|
||||
```
|
||||
|
||||
### Sitemap Validation
|
||||
|
||||
```bash
|
||||
curl https://passmaster.app/sitemap.xml | head -20
|
||||
# Should show proper XML structure with <lastmod> dates
|
||||
```
|
||||
|
||||
### IndexNow Testing
|
||||
|
||||
```bash
|
||||
# Test IndexNow API manually
|
||||
npx tsx scripts/ping-indexnow.ts --test
|
||||
|
||||
# Check queue status
|
||||
curl http://localhost:3000/api/indexnow
|
||||
```
|
||||
|
||||
## 🤖 Answer Engine Features
|
||||
|
||||
- **PerplexityBot Support**: Explicitly allowed in robots.txt
|
||||
- **GPTBot Support**: Optimized for ChatGPT crawling
|
||||
- **Claude-Web Support**: Compatible with Claude's web search
|
||||
- **FAQ Schema**: Structured Q&A data for answer engines
|
||||
- **HowTo Schema**: Step-by-step instructions for AI responses
|
||||
- **Article Schema**: Rich content metadata for citations
|
||||
- **Updated Dates**: Visible "Zuletzt aktualisiert" timestamps
|
||||
- **Author Information**: Clear attribution for content
|
||||
- **Canonical URLs**: Single source of truth for content
|
||||
- **IndexNow Integration**: Real-time search engine notifications
|
||||
|
||||
## 🎨 Customization
|
||||
|
||||
### Colors
|
||||
|
||||
Reference in New Issue
Block a user