From 5723eacdeba8e69bb771960f117b408e8449d350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atakan=20Do=C4=9Fan=20=C3=96zban?= Date: Wed, 29 Jul 2026 19:45:17 +0200 Subject: [PATCH] Add SEO metadata, sitemap, robots, and JSON-LD for search ranking. Ship canonical/Open Graph/Twitter tags, WebApplication schema, and landing copy aimed at audio-to-YouTube queries. --- app/layout.tsx | 71 +++++++++++++++++++++++++++++++++++++++++-- app/page.tsx | 5 +-- app/privacy/page.tsx | 3 +- app/refund/page.tsx | 3 +- app/robots.ts | 11 +++++++ app/sitemap.ts | 20 ++++++++++++ app/terms/page.tsx | 3 +- components/JsonLd.tsx | 23 ++++++++++++++ 8 files changed, 131 insertions(+), 8 deletions(-) create mode 100644 app/robots.ts create mode 100644 app/sitemap.ts create mode 100644 components/JsonLd.tsx diff --git a/app/layout.tsx b/app/layout.tsx index e7ddb11..6ab47a5 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -2,13 +2,77 @@ import type { Metadata } from "next"; import { Inter } from "next/font/google"; import "./globals.css"; import { Providers } from "./providers"; +import { JsonLd } from "@/components/JsonLd"; const inter = Inter({ subsets: ["latin"] }); +const SITE_URL = "https://songs2vid.com"; +const SITE_NAME = "Songs2VID"; +const DEFAULT_TITLE = + "Songs2VID - Fast Audio to Video Converter for YouTube | TunesToTube Alternative"; +const DEFAULT_DESCRIPTION = + "Convert MP3, WAV, and audio files into YouTube videos instantly. The fastest, privacy-focused online tool to upload music, beats, and podcasts directly to YouTube."; +const OG_TITLE = "Songs2VID - Fast Audio to Video Converter for YouTube"; +const OG_DESCRIPTION = + "Convert MP3 & audio files into YouTube videos instantly without heavy editing."; +const TWITTER_DESCRIPTION = "Convert MP3 & audio files into YouTube videos instantly."; + export const metadata: Metadata = { - title: "Songs2VID", - description: - "Songs2VID is an automation tool that converts your audio and image files into high-quality videos and uploads them directly to YouTube.", + metadataBase: new URL(SITE_URL), + title: { + default: DEFAULT_TITLE, + template: `%s | ${SITE_NAME}`, + }, + description: DEFAULT_DESCRIPTION, + keywords: [ + "mp3 to youtube", + "audio to video converter", + "upload audio to youtube", + "tunestotube alternative", + "song to video", + "podcast to youtube", + "convert mp3 to mp4", + ], + authors: [{ name: SITE_NAME, url: SITE_URL }], + creator: SITE_NAME, + publisher: SITE_NAME, + applicationName: SITE_NAME, + alternates: { + canonical: SITE_URL, + }, + openGraph: { + title: OG_TITLE, + description: OG_DESCRIPTION, + url: SITE_URL, + siteName: SITE_NAME, + type: "website", + locale: "en_US", + images: [ + { + url: "/logo.png", + width: 512, + height: 512, + alt: SITE_NAME, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: OG_TITLE, + description: TWITTER_DESCRIPTION, + images: ["/logo.png"], + }, + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + }, + }, + icons: { + icon: "/favicon.png", + }, }; export default function RootLayout({ @@ -19,6 +83,7 @@ export default function RootLayout({ return ( + {children} diff --git a/app/page.tsx b/app/page.tsx index 4b77fd4..712a8e1 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -41,8 +41,9 @@ export default async function HomePage() { 2VID

- Songs2VID is an automation tool that converts your audio and image files into - high-quality videos and uploads them directly to YouTube. + Convert MP3, WAV, and audio files into YouTube videos instantly — a fast, privacy-focused + audio to video converter and TunesToTube alternative that uploads music, beats, and + podcasts directly to your channel.

diff --git a/app/privacy/page.tsx b/app/privacy/page.tsx index 828896b..6aff5ad 100644 --- a/app/privacy/page.tsx +++ b/app/privacy/page.tsx @@ -3,8 +3,9 @@ import { LegalPageLayout } from "@/components/LegalPageLayout"; import { LEGAL_OPERATOR } from "@/lib/legal/constants"; export const metadata: Metadata = { - title: "Privacy Policy | Songs2VID", + title: "Privacy Policy", description: "How Songs2VID collects, uses, and protects your personal data.", + alternates: { canonical: "https://songs2vid.com/privacy" }, }; export default function PrivacyPage() { diff --git a/app/refund/page.tsx b/app/refund/page.tsx index 5e96adf..8b15c4a 100644 --- a/app/refund/page.tsx +++ b/app/refund/page.tsx @@ -4,8 +4,9 @@ import { LegalPageLayout } from "@/components/LegalPageLayout"; import { LEGAL_OPERATOR } from "@/lib/legal/constants"; export const metadata: Metadata = { - title: "Refund Policy | Songs2VID", + title: "Refund Policy", description: "Refund and cancellation policy for Songs2VID paid plans.", + alternates: { canonical: "https://songs2vid.com/refund" }, }; export default function RefundPage() { diff --git a/app/robots.ts b/app/robots.ts new file mode 100644 index 0000000..332d58c --- /dev/null +++ b/app/robots.ts @@ -0,0 +1,11 @@ +import type { MetadataRoute } from "next"; + +export default function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + }, + sitemap: "https://songs2vid.com/sitemap.xml", + }; +} diff --git a/app/sitemap.ts b/app/sitemap.ts new file mode 100644 index 0000000..796b3f3 --- /dev/null +++ b/app/sitemap.ts @@ -0,0 +1,20 @@ +import type { MetadataRoute } from "next"; + +const SITE_URL = "https://songs2vid.com"; + +export default function sitemap(): MetadataRoute.Sitemap { + return [ + { + url: SITE_URL, + lastModified: new Date(), + changeFrequency: "daily", + priority: 1.0, + }, + { + url: `${SITE_URL}/privacy`, + lastModified: new Date(), + changeFrequency: "monthly", + priority: 0.3, + }, + ]; +} diff --git a/app/terms/page.tsx b/app/terms/page.tsx index 7587897..281b4f0 100644 --- a/app/terms/page.tsx +++ b/app/terms/page.tsx @@ -4,8 +4,9 @@ import { LegalPageLayout } from "@/components/LegalPageLayout"; import { LEGAL_OPERATOR } from "@/lib/legal/constants"; export const metadata: Metadata = { - title: "Terms of Service | Songs2VID", + title: "Terms of Service", description: "Terms and conditions for using the Songs2VID hosted service.", + alternates: { canonical: "https://songs2vid.com/terms" }, }; export default function TermsPage() { diff --git a/components/JsonLd.tsx b/components/JsonLd.tsx new file mode 100644 index 0000000..f3b4c9c --- /dev/null +++ b/components/JsonLd.tsx @@ -0,0 +1,23 @@ +export function JsonLd() { + const schema = { + "@context": "https://schema.org", + "@type": "WebApplication", + name: "Songs2VID", + url: "https://songs2vid.com", + operatingSystem: "Web", + applicationCategory: "MultimediaApplication", + description: "Online tool to convert audio files into YouTube videos.", + offers: { + "@type": "Offer", + price: "0", + priceCurrency: "USD", + }, + }; + + return ( +