diff --git a/SEO_IMPROVEMENTS.md b/SEO_IMPROVEMENTS.md new file mode 100644 index 0000000..8ef82ff --- /dev/null +++ b/SEO_IMPROVEMENTS.md @@ -0,0 +1,191 @@ +# SEO Improvements for WebDrop + +This document outlines the comprehensive SEO improvements implemented to make WebDrop more discoverable on search engines like Google. + +## Overview + +The following SEO enhancements have been implemented to improve WebDrop's visibility and ranking on search engines: + +## 1. Metadata Enhancements + +### Root Layout (`app/layout.tsx`) +- **Title Template**: Dynamic page titles with "| WebDrop" suffix +- **Enhanced Description**: Detailed description with key features (500MB file transfer, end-to-end encryption, WebRTC) +- **Keywords**: Comprehensive list of relevant keywords for file transfer, P2P, WebRTC, and secure file sharing +- **Open Graph Tags**: Complete social media sharing metadata for Facebook, LinkedIn, etc. +- **Twitter Card**: Twitter-specific metadata for better link previews +- **Canonical URLs**: Prevent duplicate content issues +- **Robots Meta**: Properly configured for search engine crawling +- **Icons**: Favicon, app icons, and Apple touch icons + +### Page-Specific Metadata +Each major page now has its own metadata: +- **Login Page**: `/auth/login/layout.tsx` +- **Sign Up Page**: `/auth/sign-up/layout.tsx` +- **Room Page**: `/room/layout.tsx` +- **Profile Page**: `/profile/layout.tsx` (noindex for privacy) +- **404 Page**: `/app/not-found.tsx` (noindex, custom design) + +## 2. Structured Data (JSON-LD) + +Added schema.org structured data to the landing page (`app/page.tsx`): + +### WebSite Schema +- Site name, URL, and description +- SearchAction for search engines to understand the site structure + +### WebApplication Schema +- Application category: Utility +- Operating system: Any (browser-based) +- Pricing: Free ($0) +- Feature list highlighting key capabilities +- Browser requirements + +### Organization Schema +- Organization name and URL +- Logo reference +- Social media links (GitHub) + +## 3. Sitemap + +**File**: `app/sitemap.ts` + +Dynamically generated XML sitemap including: +- Homepage (priority: 1.0, monthly updates) +- Auth pages (priority: 0.8, monthly updates) +- Room page (priority: 0.9, weekly updates) + +The sitemap is automatically available at `/sitemap.xml` + +## 4. Robots.txt + +**File**: `public/robots.txt` + +Configuration: +- Allows all search engine crawlers +- Blocks `/auth/` and `/api/` routes from indexing +- References sitemap location + +## 5. Web App Manifest + +**File**: `app/manifest.ts` + +PWA-ready manifest including: +- App name and short name +- Description +- Theme colors +- Display mode: standalone +- App icons (192x192, 512x512) + +Automatically available at `/manifest.webmanifest` + +## 6. Icons and Images + +### Favicon and App Icons +- **Primary Icon**: `/app/icon.svg` - Automatically used by Next.js +- **192x192 Icon**: `/public/icon-192.svg` (with PNG symlink) +- **512x512 Icon**: `/public/icon-512.svg` (with PNG symlink) +- **Apple Touch Icon**: `/public/apple-icon.svg` + +### Open Graph Image +- **File**: `/public/og-image.svg` (with PNG symlink) +- **Dimensions**: 1200x630px (optimal for social media) +- **Usage**: Displayed when sharing links on social media + +## 7. Search Engine Verification + +Placeholder verification codes are included in `app/layout.tsx`: +- **Google Search Console**: `google-site-verification-code` +- **Yandex Webmaster**: `yandex-verification-code` + +### How to Add Verification Codes: + +1. **Google Search Console**: + - Visit [Google Search Console](https://search.google.com/search-console) + - Add your property (https://webdrop.vercel.app) + - Choose "HTML tag" verification method + - Copy the verification code from the meta tag + - Replace `google-site-verification-code` in `app/layout.tsx` + +2. **Yandex Webmaster**: + - Visit [Yandex Webmaster](https://webmaster.yandex.com/) + - Add your site + - Choose meta tag verification + - Replace `yandex-verification-code` in `app/layout.tsx` + +## 8. Technical SEO Best Practices + +### Implemented: +- ✅ Semantic HTML structure +- ✅ Proper heading hierarchy (H1, H2, H3) +- ✅ Meta description optimization +- ✅ Mobile-responsive design (already present) +- ✅ Fast loading times (Next.js optimization) +- ✅ HTTPS ready +- ✅ Language declaration (`lang="en"`) +- ✅ Canonical URLs + +### Performance: +- Static page generation where possible +- Optimized images (SVG format) +- CDN-ready (Vercel deployment) + +## Next Steps + +After deploying these changes: + +1. **Submit Sitemap to Search Engines**: + - Google Search Console: Add sitemap.xml + - Bing Webmaster Tools: Add sitemap.xml + +2. **Verify Site Ownership**: + - Add actual verification codes to `app/layout.tsx` + - Redeploy the application + +3. **Monitor Performance**: + - Check Google Search Console for indexing status + - Monitor search rankings + - Track organic traffic in analytics + +4. **Create Content**: + - Consider adding a blog for content marketing + - Create tutorials and guides + - Build backlinks through GitHub and tech communities + +5. **Social Media**: + - Share on Product Hunt + - Post on Reddit (r/webdev, r/privacy) + - Share on Twitter/X with relevant hashtags + +## Expected Benefits + +- 🔍 **Better Discovery**: Easier for users to find WebDrop through Google search +- 📈 **Higher Rankings**: Improved search engine rankings for relevant keywords +- 🔗 **Better Link Previews**: Rich previews when sharing on social media +- 📱 **PWA Support**: Users can install WebDrop as a progressive web app +- ⚡ **Faster Indexing**: Search engines can crawl and index pages more efficiently + +## Verification + +To verify the SEO improvements are working: + +1. **Check Sitemap**: Visit `https://webdrop.vercel.app/sitemap.xml` +2. **Check Robots.txt**: Visit `https://webdrop.vercel.app/robots.txt` +3. **Check Manifest**: Visit `https://webdrop.vercel.app/manifest.webmanifest` +4. **Check Metadata**: View page source and look for meta tags +5. **Use SEO Tools**: + - [Google Rich Results Test](https://search.google.com/test/rich-results) + - [Google Mobile-Friendly Test](https://search.google.com/test/mobile-friendly) + - [Schema.org Validator](https://validator.schema.org/) + +## Maintenance + +- Update sitemap when adding new pages +- Keep metadata descriptions accurate +- Monitor search console for errors +- Update structured data as features change +- Maintain fast loading times + +--- + +**Note**: These SEO improvements are foundational. Continued success requires ongoing content creation, backlink building, and engagement with the developer community. diff --git a/app/auth/login/layout.tsx b/app/auth/login/layout.tsx new file mode 100644 index 0000000..f5bba0c --- /dev/null +++ b/app/auth/login/layout.tsx @@ -0,0 +1,18 @@ +import type { Metadata } from "next" + +export const metadata: Metadata = { + title: "Login", + description: "Login to WebDrop to start sharing files securely through peer-to-peer connections.", + openGraph: { + title: "Login - WebDrop", + description: "Login to WebDrop to start sharing files securely through peer-to-peer connections.", + }, +} + +export default function AuthLayout({ + children, +}: { + children: React.ReactNode +}) { + return children +} diff --git a/app/auth/sign-up/layout.tsx b/app/auth/sign-up/layout.tsx new file mode 100644 index 0000000..a9a199b --- /dev/null +++ b/app/auth/sign-up/layout.tsx @@ -0,0 +1,18 @@ +import type { Metadata } from "next" + +export const metadata: Metadata = { + title: "Sign Up", + description: "Create a free WebDrop account to start sharing files securely with peer-to-peer technology.", + openGraph: { + title: "Sign Up - WebDrop", + description: "Create a free WebDrop account to start sharing files securely with peer-to-peer technology.", + }, +} + +export default function SignUpLayout({ + children, +}: { + children: React.ReactNode +}) { + return children +} diff --git a/app/icon.svg b/app/icon.svg new file mode 100644 index 0000000..a995aa2 --- /dev/null +++ b/app/icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/layout.tsx b/app/layout.tsx index 79e813e..e18b478 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -7,17 +7,89 @@ import { ErrorBoundary } from "@/components/error-boundary" import { Toaster } from "@/components/ui/toaster" export const metadata: Metadata = { - title: "WebDrop - Secure P2P File Transfer", + metadataBase: new URL('https://webdrop.jomszxc.tech'), + title: { + default: "WebDrop - Secure P2P File Transfer", + template: "%s | WebDrop", + }, description: - "Fast, secure file sharing through direct peer-to-peer connections. No servers, no limits, just direct transfers.", - generator: "v0.app", - keywords: ["file transfer", "p2p", "peer-to-peer", "secure", "webrtc", "file sharing"], - authors: [{ name: "WebDrop" }], + "Fast, secure file sharing through direct peer-to-peer connections. No servers, no limits, just direct transfers. Transfer files up to 500MB with end-to-end encryption using WebRTC technology.", + applicationName: "WebDrop", + generator: "Next.js", + keywords: [ + "file transfer", + "p2p", + "peer-to-peer", + "secure file sharing", + "webrtc", + "file sharing", + "encrypted file transfer", + "direct file transfer", + "no upload limits", + "browser file sharing", + "private file sharing", + "instant file transfer", + "webdrop", + ], + authors: [{ name: "WebDrop Team", url: "https://github.com/jomzxc/WebDrop" }], + creator: "WebDrop Team", + publisher: "WebDrop", + formatDetection: { + email: false, + address: false, + telephone: false, + }, openGraph: { - title: "WebDrop - Secure P2P File Transfer", - description: "Fast, secure file sharing through direct peer-to-peer connections", type: "website", + locale: "en_US", + url: "https://webdrop.jomszxc.tech", + siteName: "WebDrop", + title: "WebDrop - Secure P2P File Transfer", + description: + "Fast, secure file sharing through direct peer-to-peer connections. No servers, no limits, just direct transfers.", + images: [ + { + url: "/og-image.svg", + width: 1200, + height: 630, + alt: "WebDrop - Secure P2P File Transfer", + type: "image/svg+xml", + }, + ], + }, + twitter: { + card: "summary_large_image", + title: "WebDrop - Secure P2P File Transfer", + description: + "Fast, secure file sharing through direct peer-to-peer connections. No servers, no limits, just direct transfers.", + images: ["/og-image.svg"], + creator: "@webdrop", + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-video-preview": -1, + "max-image-preview": "large", + "max-snippet": -1, + }, + }, + icons: { + icon: "/icon.svg", + shortcut: "/icon.svg", + apple: "/apple-icon.svg", + }, + // Note: Add verification codes after setting up Google Search Console and Yandex Webmaster + // verification: { + // google: "your-google-site-verification-code", + // yandex: "your-yandex-verification-code", + // }, + alternates: { + canonical: "https://webdrop.jomszxc.tech", }, + category: "technology", } export default function RootLayout({ diff --git a/app/manifest.ts b/app/manifest.ts new file mode 100644 index 0000000..2d88bf6 --- /dev/null +++ b/app/manifest.ts @@ -0,0 +1,25 @@ +import type { MetadataRoute } from 'next' + +export default function manifest(): MetadataRoute.Manifest { + return { + name: 'WebDrop - Secure P2P File Transfer', + short_name: 'WebDrop', + description: 'Fast, secure file sharing through direct peer-to-peer connections. No servers, no limits, just direct transfers.', + start_url: '/', + display: 'standalone', + background_color: '#000000', + theme_color: '#6366F1', + icons: [ + { + src: '/icon-192.svg', + sizes: '192x192', + type: 'image/svg+xml', + }, + { + src: '/icon-512.svg', + sizes: '512x512', + type: 'image/svg+xml', + }, + ], + } +} diff --git a/app/not-found.tsx b/app/not-found.tsx new file mode 100644 index 0000000..bc61807 --- /dev/null +++ b/app/not-found.tsx @@ -0,0 +1,41 @@ +import Link from "next/link" +import { Button } from "@/components/ui/button" +import { Home, ArrowLeft } from "lucide-react" +import type { Metadata } from "next" + +export const metadata: Metadata = { + title: "Page Not Found", + description: "The page you're looking for doesn't exist.", + robots: { + index: false, + follow: false, + }, +} + +export default function NotFound() { + return ( +
+
+

404

+

Page Not Found

+

+ Oops! The page you're looking for doesn't exist or has been moved. +

+
+ + +
+
+
+ ) +} diff --git a/app/page.tsx b/app/page.tsx index b065c42..fe8cc80 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -39,8 +39,71 @@ export default function LandingPage() { ) } + // JSON-LD structured data for SEO + const jsonLd = { + "@context": "https://schema.org", + "@graph": [ + { + "@type": "WebSite", + "@id": "https://webdrop.jomszxc.tech/#website", + url: "https://webdrop.jomszxc.tech", + name: "WebDrop", + description: "Fast, secure file sharing through direct peer-to-peer connections", + potentialAction: { + "@type": "SearchAction", + target: { + "@type": "EntryPoint", + urlTemplate: "https://webdrop.jomszxc.tech/?search={search_term_string}", + }, + "query-input": "required name=search_term_string", + }, + }, + { + "@type": "WebApplication", + "@id": "https://webdrop.jomszxc.tech/#webapplication", + name: "WebDrop", + url: "https://webdrop.jomszxc.tech", + description: + "Fast, secure file sharing through direct peer-to-peer connections. No servers, no limits, just direct transfers.", + applicationCategory: "UtilityApplication", + operatingSystem: "Any", + browserRequirements: "Requires JavaScript. Requires HTML5.", + offers: { + "@type": "Offer", + price: "0", + priceCurrency: "USD", + }, + featureList: [ + "End-to-End Encrypted", + "Lightning Fast", + "Real-Time Collaboration", + "Unlimited Transfers", + "No file storage on servers", + "Direct peer-to-peer connections", + ], + }, + { + "@type": "Organization", + "@id": "https://webdrop.jomszxc.tech/#organization", + name: "WebDrop", + url: "https://webdrop.jomszxc.tech", + logo: { + "@type": "ImageObject", + url: "https://webdrop.jomszxc.tech/icon-512.png", + }, + sameAs: ["https://github.com/jomzxc/WebDrop"], + }, + ], + } + return (
+ {/* JSON-LD Structured Data */} +