feat: Add 19 free QR code tools with SEO optimization

- Added PayPal, Zoom, Teams QR generators
- Added lazy loading for html-to-image (performance)
- Created 19 OG images for social sharing
- Added robots.txt and updated sitemap
- Fixed mobile navigation with accordion menu
- Added 7 color options per generator
- Fixed crypto QR with universal/wallet mode toggle
- Hero QR codes all point to qrmaster.net
This commit is contained in:
Timo Knuth
2026-01-10 00:22:07 +01:00
parent e539aaf9a1
commit eb2faec952
70 changed files with 12803 additions and 592 deletions

View File

@@ -0,0 +1,358 @@
import React from 'react';
import type { Metadata } from 'next';
import YoutubeGenerator from './YouTubeGenerator';
import { Youtube, Shield, Zap, Smartphone, Play, Radio, Download, Share2 } from 'lucide-react';
import { QRCodeSVG } from 'qrcode.react';
import { ToolBreadcrumb } from '@/components/seo/BreadcrumbSchema';
// SEO Optimized Metadata
export const metadata: Metadata = {
title: 'Free YouTube QR Code Generator | Get Views & Subscribers | QR Master',
description: 'Create a QR code for your YouTube video or channel. Scanners are redirected to the YouTube app instantly to watch. Free & Fast.',
keywords: ['youtube qr code', 'video qr code', 'youtube channel qr', 'youtube subscribe qr', 'social media qr code'],
alternates: {
canonical: 'https://qrmaster.io/tools/youtube-qr-code',
},
openGraph: {
title: 'Free YouTube QR Code Generator | QR Master',
description: 'Generate QR codes to grow your YouTube channel. Instant video play.',
type: 'website',
url: 'https://qrmaster.io/tools/youtube-qr-code',
images: [{ url: '/og-youtube-generator.png', width: 1200, height: 630 }],
},
twitter: {
card: 'summary_large_image',
title: 'Free YouTube QR Code Generator',
description: 'Create QR codes for YouTube videos. Get more views.',
},
robots: {
index: true,
follow: true,
},
};
// JSON-LD Structured Data
const jsonLd = {
'@context': 'https://schema.org',
'@graph': [
{
'@type': 'SoftwareApplication',
name: 'YouTube QR Code Generator',
applicationCategory: 'UtilitiesApplication',
operatingSystem: 'Web Browser',
offers: {
'@type': 'Offer',
price: '0',
priceCurrency: 'USD',
},
aggregateRating: {
'@type': 'AggregateRating',
ratingValue: '4.8',
ratingCount: '1340',
},
description: 'Generate QR codes that direct users to a YouTube video or channel.',
},
{
'@type': 'HowTo',
name: 'How to Create a YouTube QR Code',
description: 'Create a QR code that opens a YouTube video.',
step: [
{
'@type': 'HowToStep',
position: 1,
name: 'Copy URL',
text: 'Copy the link of your YouTube video or channel.',
},
{
'@type': 'HowToStep',
position: 2,
name: 'Paste',
text: 'Paste the link into the generator input.',
},
{
'@type': 'HowToStep',
position: 3,
name: 'Customize',
text: 'Add a "Watch Now" frame or change the color to YouTube Red.',
},
{
'@type': 'HowToStep',
position: 4,
name: 'Download',
text: 'Save your QR code image for printing.',
},
{
'@type': 'HowToStep',
position: 5,
name: 'Share',
text: 'Place it on posters, merch, or video end screens.',
},
],
totalTime: 'PT30S',
},
{
'@type': 'FAQPage',
mainEntity: [
{
'@type': 'Question',
name: 'Does it open the YouTube app?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes! If the user has the YouTube app installed, the QR code will automatically launch the app and play the video.',
},
},
{
'@type': 'Question',
name: 'Can I link to a specific timestamp?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes. If you include the timestamp in your YouTube link (e.g., ?t=60s), the video will start playing from that exact moment.',
},
},
{
'@type': 'Question',
name: 'Can I use this for a playlist?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Absolutely. Just paste the playlist URL, and users will be taken to the full list of videos.',
},
},
{
'@type': 'Question',
name: 'Is it free?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes, this tool is 100% free forever.',
},
},
{
'@type': 'Question',
name: 'Does it work for YouTube Shorts?',
acceptedAnswer: {
'@type': 'Answer',
text: 'Yes, just paste the "Share" link from any YouTube Short.',
},
},
],
},
],
};
export default function YoutubeQRCodePage() {
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
/>
<ToolBreadcrumb toolName="YouTube QR Code Generator" toolSlug="youtube-qr-code" />
<div className="min-h-screen" style={{ backgroundColor: '#EBEBDF' }}>
{/* HERO SECTION */}
<section className="relative pt-20 pb-20 lg:pt-32 lg:pb-32 px-4 sm:px-6 lg:px-8 overflow-hidden bg-[#FF0000]">
<div className="absolute inset-0 opacity-10">
{/* Play Button Pattern */}
<svg className="w-full h-full" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg">
<defs>
<pattern id="yt_pattern" width="60" height="60" patternUnits="userSpaceOnUse">
<path d="M20 20 L40 30 L20 40 Z" fill="white" />
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#yt_pattern)" />
</svg>
</div>
<div className="max-w-7xl mx-auto grid lg:grid-cols-2 gap-12 items-center relative z-10">
<div className="text-center lg:text-left">
<div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white/10 text-white/90 text-sm font-medium mb-6 backdrop-blur-sm border border-white/10 hover:bg-white/20 transition-colors cursor-default">
<span className="flex h-2 w-2 relative">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-red-300 opacity-75"></span>
<span className="relative inline-flex rounded-full h-2 w-2 bg-red-300"></span>
</span>
Free Tool No Signup Required
</div>
<h1 className="text-4xl md:text-5xl lg:text-6xl font-extrabold text-white tracking-tight leading-tight mb-6">
Get More Views with <br className="hidden lg:block" />
<span className="text-white drop-shadow-md">YouTube QR Codes</span>
</h1>
<p className="text-lg md:text-xl text-red-50 max-w-2xl mx-auto lg:mx-0 mb-8 leading-relaxed">
From print to play in one scan. Direct your audience to your latest video, channel, or playlist instantly.
<strong className="text-white block sm:inline mt-2 sm:mt-0"> Boost subscriber growth.</strong>
</p>
<div className="flex flex-wrap justify-center lg:justify-start gap-4 text-sm font-medium text-white/80">
<div className="flex items-center gap-2 bg-white/10 px-4 py-2.5 rounded-xl border border-white/10 backdrop-blur-sm">
<Play className="w-4 h-4 text-white" />
Instant Play
</div>
<div className="flex items-center gap-2 bg-white/10 px-4 py-2.5 rounded-xl border border-white/10 backdrop-blur-sm">
<Radio className="w-4 h-4 text-white" />
Grow Channel
</div>
<div className="flex items-center gap-2 bg-white/10 px-4 py-2.5 rounded-xl border border-white/10 backdrop-blur-sm">
<Smartphone className="w-4 h-4 text-white" />
App Friendly
</div>
</div>
</div>
{/* Visual Abstract */}
<div className="hidden lg:flex relative items-center justify-center min-h-[400px]">
<div className="absolute w-[500px] h-[500px] bg-red-600/30 rounded-full blur-[100px] -top-20 -right-20 animate-pulse" />
<div className="relative w-80 h-96 bg-white/5 backdrop-blur-xl border border-white/20 rounded-3xl shadow-2xl flex flex-col items-center justify-center p-8 transform rotate-3 hover:rotate-0 transition-all duration-700 group">
<div className="absolute inset-0 bg-gradient-to-br from-white/10 to-transparent rounded-3xl" />
<div className="w-full bg-black rounded-xl shadow-lg h-40 mb-6 relative overflow-hidden group-hover:scale-105 transition-transform flex items-center justify-center">
<div className="absolute inset-0 bg-[url('https://images.unsplash.com/photo-1611162617474-5b21e879e113?q=80&w=1000&auto=format&fit=crop')] bg-cover bg-center opacity-70"></div>
<div className="w-12 h-12 bg-red-600 rounded-full flex items-center justify-center relative z-10 shadow-xl">
<Play className="w-6 h-6 text-white ml-1" fill="white" />
</div>
<div className="absolute bottom-2 right-2 bg-black/80 px-2 rounded text-xs text-white font-bold">10:24</div>
</div>
<div className="w-44 h-44 bg-white rounded-xl p-2 shadow-inner relative overflow-hidden flex items-center justify-center">
<QRCodeSVG value="https://www.qrmaster.net" size={160} fgColor="#FF0000" level="Q" />
</div>
{/* Floating Badge */}
<div className="absolute -bottom-6 -left-6 bg-white py-3 px-5 rounded-xl shadow-xl flex items-center gap-3 transform transition-transform hover:scale-105 duration-300">
<div className="bg-red-100 p-2 rounded-full">
<Youtube className="w-5 h-5 text-red-600" />
</div>
<div className="text-left">
<div className="text-[10px] text-slate-400 font-bold uppercase tracking-wider">Subscribers</div>
<div className="text-sm font-bold text-slate-900">+10 New</div>
</div>
</div>
</div>
</div>
</div>
</section>
{/* GENERATOR SECTION */}
<section className="py-12 px-4 sm:px-6 lg:px-8 -mt-8">
<YoutubeGenerator />
</section>
{/* HOW IT WORKS */}
<section className="py-16 px-4 sm:px-6 lg:px-8 bg-white">
<div className="max-w-4xl mx-auto">
<h2 className="text-3xl font-bold text-slate-900 text-center mb-12">
How YouTube QR Codes Work
</h2>
<div className="grid md:grid-cols-3 lg:grid-cols-5 gap-8">
<article className="text-center">
<div className="w-14 h-14 rounded-2xl bg-[#FF0000]/10 flex items-center justify-center mx-auto mb-4">
<Youtube className="w-7 h-7 text-[#FF0000]" />
</div>
<h3 className="font-bold text-slate-900 mb-2">1. Paste Link</h3>
<p className="text-slate-600 text-sm">
Copy the URL of your video, channel, or playlist.
</p>
</article>
<article className="text-center">
<div className="w-14 h-14 rounded-2xl bg-[#FF0000]/10 flex items-center justify-center mx-auto mb-4">
<Smartphone className="w-7 h-7 text-[#FF0000]" />
</div>
<h3 className="font-bold text-slate-900 mb-2">2. Print Code</h3>
<p className="text-slate-600 text-sm">
Place the QR code on flyers, posters, or merchandise.
</p>
</article>
<article className="text-center">
<div className="w-12 h-12 rounded-2xl bg-[#FF0000]/10 flex items-center justify-center mx-auto mb-4">
<Download className="w-6 h-6 text-[#FF0000]" />
</div>
<h3 className="font-bold text-slate-900 mb-2">3. Download</h3>
<p className="text-slate-600 text-xs leading-relaxed">
Save your high-quality QR code.
</p>
</article>
<article className="text-center">
<div className="w-12 h-12 rounded-2xl bg-[#FF0000]/10 flex items-center justify-center mx-auto mb-4">
<Play className="w-6 h-6 text-[#FF0000]" />
</div>
<h3 className="font-bold text-slate-900 mb-2">4. Scan</h3>
<p className="text-slate-600 text-xs leading-relaxed">
Customers scan the code.
</p>
</article>
<article className="text-center">
<div className="w-12 h-12 rounded-2xl bg-[#FF0000]/10 flex items-center justify-center mx-auto mb-4">
<Share2 className="w-6 h-6 text-[#FF0000]" />
</div>
<h3 className="font-bold text-slate-900 mb-2">5. Watch</h3>
<p className="text-slate-600 text-xs leading-relaxed">
The video plays instantly.
</p>
</article>
</div>
</div>
</section>
{/* FAQ SECTION */}
<section className="py-16 px-4 sm:px-6 lg:px-8" style={{ backgroundColor: '#EBEBDF' }}>
<div className="max-w-3xl mx-auto">
<h2 className="text-3xl font-bold text-slate-900 text-center mb-4">
Frequently Asked Questions
</h2>
<p className="text-slate-600 text-center mb-10">
Common questions about YouTube QR codes.
</p>
<div className="space-y-4">
<FaqItem
question="Can I link to my Live Stream?"
answer="Yes! Paste your channel's live link (e.g., youtube.com/c/YourChannel/live) and it will always go to your current live stream."
/>
<FaqItem
question="Does the video auto-play?"
answer="Most smartphones will open the YouTube app and auto-play the video, but it depends on the user's specific settings."
/>
<FaqItem
question="Can I change the video later?"
answer="Only if you use our Dynamic QR Code service. This static code will always point to the original link you entered."
/>
<FaqItem
question="Is it safe?"
answer="Yes. The QR code simply contains your video link. No personal data is stored or tracked by this free tool."
/>
<FaqItem
question="Does it work for YouTube Shorts?"
answer="Yes, just paste the 'Share' link from any YouTube Short."
/>
</div>
</div>
</section>
</div>
</>
);
}
function FaqItem({ question, answer }: { question: string; answer: string }) {
return (
<details className="group bg-white rounded-xl shadow-sm border border-slate-200 overflow-hidden">
<summary className="flex items-center justify-between p-5 cursor-pointer list-none text-slate-900 font-semibold hover:bg-slate-50 transition-colors">
{question}
<span className="transition group-open:rotate-180 text-slate-400">
<svg fill="none" height="20" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" viewBox="0 0 24 24" width="20">
<path d="M6 9l6 6 6-6" />
</svg>
</span>
</summary>
<div className="text-slate-600 px-5 pb-5 pt-0 leading-relaxed text-sm">
{answer}
</div>
</details>
);
}