mehr SEO
This commit is contained in:
@@ -285,6 +285,7 @@ export default function BulkCreationPage() {
|
||||
};
|
||||
|
||||
const saveQRCodesToDatabase = async () => {
|
||||
if (isDynamic) return; // dynamic codes are already saved during generation
|
||||
setLoading(true);
|
||||
|
||||
try {
|
||||
@@ -817,12 +818,14 @@ export default function BulkCreationPage() {
|
||||
</svg>
|
||||
Download All as ZIP
|
||||
</Button>
|
||||
<Button onClick={saveQRCodesToDatabase} loading={loading}>
|
||||
<svg className="w-4 h-4 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4" />
|
||||
</svg>
|
||||
Save QR Codes
|
||||
</Button>
|
||||
{!isDynamic && (
|
||||
<Button onClick={saveQRCodesToDatabase} loading={loading}>
|
||||
<svg className="w-4 h-4 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4" />
|
||||
</svg>
|
||||
Save QR Codes
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
@@ -262,6 +262,16 @@ const softwareSchema = {
|
||||
},
|
||||
description:
|
||||
'Create dynamic QR codes that can be updated after printing. Change destinations later and review scan context from one dashboard.',
|
||||
speakable: {
|
||||
'@type': 'SpeakableSpecification',
|
||||
cssSelector: ['h1', '.answer-first-block', '.bg-green-50'],
|
||||
},
|
||||
author: {
|
||||
'@type': 'Person',
|
||||
name: 'Timo Knuth',
|
||||
url: 'https://www.qrmaster.net/authors/timo',
|
||||
},
|
||||
dateModified: '2026-04-27',
|
||||
featureList: [
|
||||
'Edit QR code destinations after printing',
|
||||
'Review scan analytics in the dashboard',
|
||||
|
||||
@@ -52,6 +52,22 @@ const jsonLd = {
|
||||
'/barcode-generator-preview.png',
|
||||
'UtilitiesApplication'
|
||||
),
|
||||
{
|
||||
'@type': 'WebPage',
|
||||
'@id': 'https://www.qrmaster.net/tools/barcode-generator',
|
||||
name: 'Free Barcode Generator Online – EAN, UPC, Code 128',
|
||||
description: 'A barcode generator converts any number or text into a scannable barcode image for retail labels, inventory, and product packaging. Supports EAN-13, UPC-A, and Code 128.',
|
||||
speakable: {
|
||||
'@type': 'SpeakableSpecification',
|
||||
cssSelector: ['.bg-blue-50', 'h1'],
|
||||
},
|
||||
author: {
|
||||
'@type': 'Person',
|
||||
name: 'Timo Knuth',
|
||||
url: 'https://www.qrmaster.net/authors/timo',
|
||||
},
|
||||
dateModified: '2026-04-27',
|
||||
},
|
||||
{
|
||||
'@type': 'HowTo',
|
||||
name: 'How to Create a Barcode',
|
||||
@@ -239,6 +255,58 @@ export default function BarcodeGeneratorPage() {
|
||||
<BarcodeGeneratorClient />
|
||||
</section>
|
||||
|
||||
{/* AI-EXTRACTABLE DEFINITION + STATS BLOCK */}
|
||||
<section className="py-12 px-4 sm:px-6 lg:px-8 bg-white border-b border-slate-100">
|
||||
<div className="max-w-4xl mx-auto">
|
||||
<div className="bg-blue-50 border-l-4 border-blue-500 rounded-xl p-6 mb-8">
|
||||
<h2 className="text-xl font-bold text-slate-900 mb-2">What is a Barcode Generator?</h2>
|
||||
<p className="text-slate-700 leading-relaxed">
|
||||
A <strong>barcode generator</strong> is an online tool that converts a number or text string into a scannable barcode image (EAN-13, UPC-A, or Code 128). The generated barcode can be downloaded as PNG or SVG and printed on product labels, packaging, or inventory stickers for use with any standard barcode scanner.
|
||||
</p>
|
||||
</div>
|
||||
<div className="grid md:grid-cols-3 gap-6 mb-8">
|
||||
<div className="text-center p-5 rounded-xl bg-slate-50 border border-slate-200">
|
||||
<div className="text-3xl font-extrabold text-blue-600 mb-1">EAN-13</div>
|
||||
<div className="text-sm font-semibold text-slate-700 mb-1">Global Retail Standard</div>
|
||||
<div className="text-xs text-slate-500">Used on over 5 billion product labels worldwide (GS1, 2024)</div>
|
||||
</div>
|
||||
<div className="text-center p-5 rounded-xl bg-slate-50 border border-slate-200">
|
||||
<div className="text-3xl font-extrabold text-blue-600 mb-1">UPC-A</div>
|
||||
<div className="text-sm font-semibold text-slate-700 mb-1">North America Standard</div>
|
||||
<div className="text-xs text-slate-500">Required by Amazon, Walmart, Target for product listings</div>
|
||||
</div>
|
||||
<div className="text-center p-5 rounded-xl bg-slate-50 border border-slate-200">
|
||||
<div className="text-3xl font-extrabold text-blue-600 mb-1">Code 128</div>
|
||||
<div className="text-sm font-semibold text-slate-700 mb-1">Inventory & Logistics</div>
|
||||
<div className="text-xs text-slate-500">Supports letters + numbers — best for internal SKU systems</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-amber-50 border border-amber-200 rounded-xl p-5">
|
||||
<h3 className="font-bold text-slate-900 mb-2">Barcode vs. QR Code — When to Use Which</h3>
|
||||
<div className="grid md:grid-cols-2 gap-4 text-sm text-slate-700">
|
||||
<div>
|
||||
<p className="font-semibold text-slate-800 mb-1">✓ Use a barcode for:</p>
|
||||
<ul className="space-y-1 list-disc list-inside text-slate-600">
|
||||
<li>Product SKUs and retail checkout</li>
|
||||
<li>Warehouse shelf and bin labels</li>
|
||||
<li>Inventory counting and stock control</li>
|
||||
<li>Order fulfillment and packing verification</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div>
|
||||
<p className="font-semibold text-slate-800 mb-1">✓ Use a QR code for:</p>
|
||||
<ul className="space-y-1 list-disc list-inside text-slate-600">
|
||||
<li>Restaurant menus and digital content</li>
|
||||
<li>Marketing campaigns and landing pages</li>
|
||||
<li>Review collection and customer feedback</li>
|
||||
<li>Product setup guides and support pages</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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">
|
||||
|
||||
@@ -50,10 +50,17 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
'barcode-generator': 0.95,
|
||||
};
|
||||
|
||||
const toolLastModified: Record<string, Date> = {
|
||||
'barcode-generator': new Date('2026-04-27'),
|
||||
'vcard-qr-code': new Date('2026-04-27'),
|
||||
'instagram-qr-code': new Date('2026-04-27'),
|
||||
'wifi-qr-code': new Date('2026-04-27'),
|
||||
};
|
||||
|
||||
const toolPages = freeTools.map((slug) => ({
|
||||
url: `${baseUrl}/tools/${slug}`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: 'monthly' as const,
|
||||
lastModified: toolLastModified[slug] ?? new Date('2026-01-01'),
|
||||
changeFrequency: slug === 'barcode-generator' ? 'weekly' as const : 'monthly' as const,
|
||||
priority: highPriorityTools[slug] ?? 0.8,
|
||||
}));
|
||||
|
||||
@@ -202,9 +209,9 @@ export default function sitemap(): MetadataRoute.Sitemap {
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/dynamic-qr-code-generator`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.9,
|
||||
lastModified: new Date('2026-04-27'),
|
||||
changeFrequency: 'weekly',
|
||||
priority: 0.95,
|
||||
},
|
||||
{
|
||||
url: `${baseUrl}/dynamic-barcode-generator`,
|
||||
|
||||
Reference in New Issue
Block a user