SEO, Metadata & Sitemap

This commit is contained in:
Raven Scott
2025-11-30 20:33:12 -05:00
parent 064b293395
commit efda345f80
16 changed files with 259 additions and 31 deletions
+18 -1
View File
@@ -4,7 +4,24 @@ import ArchitectureDiagram from "@/components/diagrams/ArchitectureDiagram";
export const metadata: Metadata = {
title: "About P2NS - Peer-to-Peer Decentralized DNS System",
description:
"Learn about P2NS, a robust, firewall-resistant peer-to-peer DNS resolution system.",
"Learn about P2NS, a robust, firewall-resistant peer-to-peer DNS resolution system that operates independently of centralized DNS infrastructure.",
keywords: ["P2P", "DNS", "decentralized", "peer-to-peer", "NAT traversal", "firewall", "censorship resistance", "about P2NS"],
authors: [{ name: "Raven Scott" }],
openGraph: {
title: "About P2NS - Peer-to-Peer Decentralized DNS System",
description: "Learn about P2NS, a robust, firewall-resistant peer-to-peer DNS resolution system.",
url: "https://p2ns.space/about",
siteName: "P2NS",
type: "website",
},
twitter: {
card: "summary_large_image",
title: "About P2NS - Peer-to-Peer Decentralized DNS System",
description: "Learn about P2NS, a robust, firewall-resistant peer-to-peer DNS resolution system.",
},
alternates: {
canonical: "https://p2ns.space/about",
},
};
export default function AboutPage() {
+18 -1
View File
@@ -3,7 +3,24 @@ import { Github, ExternalLink, Code, Heart, MessageCircle } from 'lucide-react';
export const metadata: Metadata = {
title: 'Community - P2NS',
description: 'Contribute to P2NS, get support, and learn about the roadmap.',
description: 'Contribute to P2NS, get support, join the Discord community, and learn about the roadmap.',
keywords: ['P2NS community', 'contribute', 'open source', 'Discord', 'support', 'contributing'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Community - P2NS',
description: 'Contribute to P2NS, get support, and learn about the roadmap.',
url: 'https://p2ns.space/community',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Community - P2NS',
description: 'Contribute to P2NS, get support, and learn about the roadmap.',
},
alternates: {
canonical: 'https://p2ns.space/community',
},
};
export default function CommunityPage() {
+18 -1
View File
@@ -3,7 +3,24 @@ import CodeBlock from '@/components/ui/CodeBlock';
export const metadata: Metadata = {
title: 'Admin Panel - P2NS Documentation',
description: 'Complete guide to the P2NS web-based admin interface, features, and usage instructions',
description: 'Complete guide to the P2NS web-based admin interface, features, and usage instructions. Manage domains, Holesail servers, and more.',
keywords: ['P2NS admin panel', 'admin interface', 'web interface', 'management', 'P2NS dashboard'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Admin Panel - P2NS Documentation',
description: 'Complete guide to the P2NS web-based admin interface, features, and usage instructions',
url: 'https://p2ns.space/docs/admin-panel',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Admin Panel - P2NS Documentation',
description: 'Complete guide to the P2NS web-based admin interface, features, and usage instructions',
},
alternates: {
canonical: 'https://p2ns.space/docs/admin-panel',
},
};
export default function AdminPanelPage() {
+18 -1
View File
@@ -3,7 +3,24 @@ import CodeBlock from '@/components/ui/CodeBlock';
export const metadata: Metadata = {
title: 'API Reference - P2NS Documentation',
description: 'Complete REST API and WebSocket documentation for P2NS.',
description: 'Complete REST API and WebSocket documentation for P2NS. All endpoints, request/response formats, and WebSocket events.',
keywords: ['P2NS API', 'REST API', 'WebSocket', 'API documentation', 'endpoints', 'P2NS reference'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'API Reference - P2NS Documentation',
description: 'Complete REST API and WebSocket documentation for P2NS.',
url: 'https://p2ns.space/docs/api',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'API Reference - P2NS Documentation',
description: 'Complete REST API and WebSocket documentation for P2NS.',
},
alternates: {
canonical: 'https://p2ns.space/docs/api',
},
};
export default function APIPage() {
+18 -1
View File
@@ -3,7 +3,24 @@ import ArchitectureDiagram from '@/components/diagrams/ArchitectureDiagram';
export const metadata: Metadata = {
title: 'Architecture - P2NS Documentation',
description: 'Deep dive into P2NS system architecture and components.',
description: 'Deep dive into P2NS system architecture and components. Understand how P2NS is built and how all pieces work together.',
keywords: ['P2NS architecture', 'system design', 'components', 'technical details', 'P2NS internals'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Architecture - P2NS Documentation',
description: 'Deep dive into P2NS system architecture and components.',
url: 'https://p2ns.space/docs/architecture',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Architecture - P2NS Documentation',
description: 'Deep dive into P2NS system architecture and components.',
},
alternates: {
canonical: 'https://p2ns.space/docs/architecture',
},
};
export default function ArchitecturePage() {
+18 -1
View File
@@ -3,7 +3,24 @@ import CodeBlock from '@/components/ui/CodeBlock';
export const metadata: Metadata = {
title: 'Configuration - P2NS Documentation',
description: 'Environment variables and configuration options for P2NS.',
description: 'Environment variables and configuration options for P2NS. Complete guide to customizing your P2NS setup.',
keywords: ['P2NS configuration', 'environment variables', 'settings', 'config', 'P2NS setup'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Configuration - P2NS Documentation',
description: 'Environment variables and configuration options for P2NS.',
url: 'https://p2ns.space/docs/configuration',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Configuration - P2NS Documentation',
description: 'Environment variables and configuration options for P2NS.',
},
alternates: {
canonical: 'https://p2ns.space/docs/configuration',
},
};
export default function ConfigurationPage() {
+18 -1
View File
@@ -3,7 +3,24 @@ import CodeBlock from '@/components/ui/CodeBlock';
export const metadata: Metadata = {
title: 'Getting Started - P2NS Documentation',
description: 'Installation and quick start guide for P2NS.',
description: 'Installation and quick start guide for P2NS. Learn how to set up and run your first P2NS node.',
keywords: ['P2NS installation', 'getting started', 'quick start', 'setup guide', 'P2NS tutorial'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Getting Started - P2NS Documentation',
description: 'Installation and quick start guide for P2NS.',
url: 'https://p2ns.space/docs/getting-started',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Getting Started - P2NS Documentation',
description: 'Installation and quick start guide for P2NS.',
},
alternates: {
canonical: 'https://p2ns.space/docs/getting-started',
},
};
export default function GettingStartedPage() {
+18 -1
View File
@@ -4,7 +4,24 @@ import P2NSFlowDiagram from '@/components/diagrams/P2NSFlowDiagram';
export const metadata: Metadata = {
title: 'How It Works - P2NS Documentation',
description: 'Complete explanation of how P2NS works from domain registration to accessing services',
description: 'Complete explanation of how P2NS works from domain registration to accessing services. Understand the P2NS workflow and processes.',
keywords: ['P2NS how it works', 'workflow', 'process', 'domain registration', 'P2NS explanation'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'How It Works - P2NS Documentation',
description: 'Complete explanation of how P2NS works from domain registration to accessing services',
url: 'https://p2ns.space/docs/how-it-works',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'How It Works - P2NS Documentation',
description: 'Complete explanation of how P2NS works from domain registration to accessing services',
},
alternates: {
canonical: 'https://p2ns.space/docs/how-it-works',
},
};
export default function HowItWorksPage() {
+17
View File
@@ -5,6 +5,23 @@ import { Book, Settings, Code, Wrench, Network, FileText, LayoutDashboard } from
export const metadata: Metadata = {
title: 'Documentation - P2NS',
description: 'Complete documentation for P2NS including installation, configuration, API reference, and troubleshooting.',
keywords: ['P2NS documentation', 'P2NS docs', 'installation guide', 'configuration', 'API reference', 'troubleshooting'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Documentation - P2NS',
description: 'Complete documentation for P2NS including installation, configuration, API reference, and troubleshooting.',
url: 'https://p2ns.space/docs',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Documentation - P2NS',
description: 'Complete documentation for P2NS including installation, configuration, API reference, and troubleshooting.',
},
alternates: {
canonical: 'https://p2ns.space/docs',
},
};
const docSections = [
+18 -1
View File
@@ -3,7 +3,24 @@ import CodeBlock from '@/components/ui/CodeBlock';
export const metadata: Metadata = {
title: 'Troubleshooting - P2NS Documentation',
description: 'Common issues and solutions for P2NS.',
description: 'Common issues and solutions for P2NS. Debug problems, fix errors, and get help with your P2NS setup.',
keywords: ['P2NS troubleshooting', 'debug', 'fix errors', 'common issues', 'P2NS help', 'problem solving'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Troubleshooting - P2NS Documentation',
description: 'Common issues and solutions for P2NS.',
url: 'https://p2ns.space/docs/troubleshooting',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Troubleshooting - P2NS Documentation',
description: 'Common issues and solutions for P2NS.',
},
alternates: {
canonical: 'https://p2ns.space/docs/troubleshooting',
},
};
export default function TroubleshootingPage() {
+18 -1
View File
@@ -25,7 +25,24 @@ import {
export const metadata: Metadata = {
title: 'Features - P2NS Peer-to-Peer DNS System',
description:
'Comprehensive features of P2NS including decentralized DNS, firewall traversal, proxy servers, and more.',
'Comprehensive features of P2NS including decentralized DNS, firewall traversal, proxy servers, automatic certificate management, and more.',
keywords: ['P2P DNS features', 'decentralized DNS', 'firewall traversal', 'NAT traversal', 'proxy servers', 'certificate management', 'P2NS features'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'Features - P2NS Peer-to-Peer DNS System',
description: 'Comprehensive features of P2NS including decentralized DNS, firewall traversal, proxy servers, and more.',
url: 'https://p2ns.space/features',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Features - P2NS Peer-to-Peer DNS System',
description: 'Comprehensive features of P2NS including decentralized DNS, firewall traversal, proxy servers, and more.',
},
alternates: {
canonical: 'https://p2ns.space/features',
},
};
type Feature = {
+3 -2
View File
@@ -19,8 +19,9 @@ export const metadata: Metadata = {
openGraph: {
title: "P2NS - Peer-to-Peer Decentralized DNS System",
description: "A robust, firewall-resistant peer-to-peer DNS resolution system",
type: "website",
url: "https://p2ns.space",
siteName: "P2NS",
type: "website",
},
twitter: {
card: "summary_large_image",
@@ -32,7 +33,7 @@ export const metadata: Metadata = {
follow: true,
},
alternates: {
canonical: "/",
canonical: "https://p2ns.space",
},
};
+17
View File
@@ -6,6 +6,23 @@ import PeerDiscoveryDiagram from '@/components/diagrams/PeerDiscoveryDiagram';
export const metadata: Metadata = {
title: 'How P2P Works - Understanding Peer-to-Peer Networking',
description: 'Learn about peer-to-peer networking, UDP hole-punching, NAT traversal, and how P2NS uses these technologies.',
keywords: ['P2P networking', 'peer-to-peer', 'UDP hole-punching', 'NAT traversal', 'Hyperswarm', 'DHT', 'Corestore', 'P2P explained'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'How P2P Works - Understanding Peer-to-Peer Networking',
description: 'Learn about peer-to-peer networking, UDP hole-punching, NAT traversal, and how P2NS uses these technologies.',
url: 'https://p2ns.space/learn/p2p',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'How P2P Works - Understanding Peer-to-Peer Networking',
description: 'Learn about peer-to-peer networking, UDP hole-punching, NAT traversal, and how P2NS uses these technologies.',
},
alternates: {
canonical: 'https://p2ns.space/learn/p2p',
},
};
export default function P2PPage() {
+23
View File
@@ -1,9 +1,32 @@
import type { Metadata } from 'next';
import Hero from '@/components/sections/Hero';
import FeaturesGrid from '@/components/sections/FeaturesGrid';
import HowItWorks from '@/components/sections/HowItWorks';
import TechnologyStack from '@/components/sections/TechnologyStack';
import QuickStart from '@/components/sections/QuickStart';
export const metadata: Metadata = {
title: 'P2NS - Peer-to-Peer Decentralized DNS System',
description: 'A robust, firewall-resistant peer-to-peer DNS resolution system that operates independently of centralized DNS infrastructure. Built with Holesail, Hyperswarm, and Corestore.',
keywords: ['P2P', 'DNS', 'decentralized', 'peer-to-peer', 'NAT traversal', 'firewall', 'Holesail', 'Hyperswarm', 'Corestore', 'decentralized DNS', 'P2P DNS'],
authors: [{ name: 'Raven Scott' }],
openGraph: {
title: 'P2NS - Peer-to-Peer Decentralized DNS System',
description: 'A robust, firewall-resistant peer-to-peer DNS resolution system that operates independently of centralized DNS infrastructure.',
url: 'https://p2ns.space',
siteName: 'P2NS',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'P2NS - Peer-to-Peer Decentralized DNS System',
description: 'A robust, firewall-resistant peer-to-peer DNS resolution system that operates independently of centralized DNS infrastructure.',
},
alternates: {
canonical: 'https://p2ns.space',
},
};
export default function Home() {
return (
<>
+1 -1
View File
@@ -7,7 +7,7 @@ export default async function robots(): Promise<MetadataRoute.Robots> {
allow: '/',
disallow: ['/api/'],
},
sitemap: 'https://p2ns.example.com/sitemap.xml', // Update with your actual domain
sitemap: 'https://p2ns.space/sitemap.xml',
};
}
+18 -18
View File
@@ -1,7 +1,7 @@
import { MetadataRoute } from 'next';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const baseUrl = 'https://p2ns.example.com'; // Update with your actual domain
const baseUrl = 'https://p2ns.space';
return [
{
@@ -17,13 +17,19 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
priority: 0.8,
},
{
url: `${baseUrl}/learn/p2p`,
url: `${baseUrl}/features`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/features`,
url: `${baseUrl}/community`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/learn/p2p`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.8,
@@ -46,12 +52,6 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
changeFrequency: 'weekly',
priority: 0.8,
},
{
url: `${baseUrl}/docs/examples`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.8,
},
{
url: `${baseUrl}/docs/api`,
lastModified: new Date(),
@@ -64,6 +64,12 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
changeFrequency: 'weekly',
priority: 0.7,
},
{
url: `${baseUrl}/docs/admin-panel`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.8,
},
{
url: `${baseUrl}/docs/architecture`,
lastModified: new Date(),
@@ -71,16 +77,10 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
priority: 0.7,
},
{
url: `${baseUrl}/examples`,
url: `${baseUrl}/docs/how-it-works`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.7,
},
{
url: `${baseUrl}/community`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.6,
changeFrequency: 'weekly',
priority: 0.8,
},
];
}