AUCTION VALUATIONS (Transparent): - All auctions now include real-time valuation from ValuationService - Shows: estimated_value, value_ratio, potential_profit, confidence - Displays exact formula: "$50 × Length × TLD × Keyword × Brand" - value_ratio helps identify undervalued domains (> 1.0 = opportunity) - Added valuation_note in API response explaining methodology VALUATION FORMULA EXPLAINED: Value = $50 × Length_Factor × TLD_Factor × Keyword_Factor × Brand_Factor Examples from API response: - healthtech.app: $50 × 1.0 × 0.45 × 1.3 × 1.32 = $40 - blockchain.tech: $50 × 1.0 × 0.35 × 3.0 × 1.12 = $60 - metaverse.ai: $50 × 1.6 × 1.2 × 3.0 × 1.1 = $315 SEO OPTIMIZATIONS: - Root layout: Full Metadata with OpenGraph, Twitter Cards, JSON-LD - JSON-LD Schema: Organization, WebSite, WebApplication with SearchAction - robots.txt: Allows all crawlers including GPTBot, Claude, ChatGPT - sitemap.ts: Dynamic sitemap with all pages + popular TLD pages - Auctions layout: Page-specific meta + ItemList schema - TLD Pricing layout: Product comparison schema LLM OPTIMIZATION: - robots.txt explicitly allows AI crawlers (GPTBot, Anthropic-AI, Claude-Web) - Semantic HTML structure with proper headings - JSON-LD structured data for rich snippets - Descriptive meta descriptions optimized for AI summarization FILES ADDED: - frontend/src/lib/seo.ts - SEO configuration & helpers - frontend/src/app/sitemap.ts - Dynamic sitemap generation - frontend/src/app/auctions/layout.tsx - Auctions SEO - frontend/src/app/tld-pricing/layout.tsx - TLD Pricing SEO - frontend/public/robots.txt - Crawler directives
102 lines
2.3 KiB
TypeScript
102 lines
2.3 KiB
TypeScript
import { MetadataRoute } from 'next'
|
|
|
|
const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://pounce.ch'
|
|
|
|
// Popular TLDs to include in sitemap
|
|
const popularTlds = [
|
|
'com', 'net', 'org', 'io', 'ai', 'co', 'dev', 'app', 'tech', 'xyz',
|
|
'de', 'ch', 'uk', 'eu', 'fr', 'nl', 'at', 'it', 'es', 'pl',
|
|
'info', 'biz', 'me', 'online', 'site', 'store', 'shop', 'blog', 'cloud',
|
|
]
|
|
|
|
export default function sitemap(): MetadataRoute.Sitemap {
|
|
const now = new Date().toISOString()
|
|
|
|
// Static pages
|
|
const staticPages: MetadataRoute.Sitemap = [
|
|
{
|
|
url: siteUrl,
|
|
lastModified: now,
|
|
changeFrequency: 'daily',
|
|
priority: 1.0,
|
|
},
|
|
{
|
|
url: `${siteUrl}/tld-pricing`,
|
|
lastModified: now,
|
|
changeFrequency: 'hourly',
|
|
priority: 0.9,
|
|
},
|
|
{
|
|
url: `${siteUrl}/pricing`,
|
|
lastModified: now,
|
|
changeFrequency: 'weekly',
|
|
priority: 0.8,
|
|
},
|
|
{
|
|
url: `${siteUrl}/auctions`,
|
|
lastModified: now,
|
|
changeFrequency: 'hourly',
|
|
priority: 0.8,
|
|
},
|
|
{
|
|
url: `${siteUrl}/about`,
|
|
lastModified: now,
|
|
changeFrequency: 'monthly',
|
|
priority: 0.6,
|
|
},
|
|
{
|
|
url: `${siteUrl}/blog`,
|
|
lastModified: now,
|
|
changeFrequency: 'weekly',
|
|
priority: 0.6,
|
|
},
|
|
{
|
|
url: `${siteUrl}/contact`,
|
|
lastModified: now,
|
|
changeFrequency: 'monthly',
|
|
priority: 0.5,
|
|
},
|
|
{
|
|
url: `${siteUrl}/careers`,
|
|
lastModified: now,
|
|
changeFrequency: 'monthly',
|
|
priority: 0.5,
|
|
},
|
|
{
|
|
url: `${siteUrl}/privacy`,
|
|
lastModified: now,
|
|
changeFrequency: 'yearly',
|
|
priority: 0.3,
|
|
},
|
|
{
|
|
url: `${siteUrl}/terms`,
|
|
lastModified: now,
|
|
changeFrequency: 'yearly',
|
|
priority: 0.3,
|
|
},
|
|
{
|
|
url: `${siteUrl}/imprint`,
|
|
lastModified: now,
|
|
changeFrequency: 'yearly',
|
|
priority: 0.3,
|
|
},
|
|
{
|
|
url: `${siteUrl}/cookies`,
|
|
lastModified: now,
|
|
changeFrequency: 'yearly',
|
|
priority: 0.3,
|
|
},
|
|
]
|
|
|
|
// TLD detail pages (high value for SEO)
|
|
const tldPages: MetadataRoute.Sitemap = popularTlds.map((tld) => ({
|
|
url: `${siteUrl}/tld-pricing/${tld}`,
|
|
lastModified: now,
|
|
changeFrequency: 'daily' as const,
|
|
priority: 0.7,
|
|
}))
|
|
|
|
return [...staticPages, ...tldPages]
|
|
}
|
|
|