Weekly SEO

This commit is contained in:
Timo Knuth
2026-06-08 20:33:38 +02:00
parent a7cbbee084
commit 0866c200a0
17 changed files with 21176 additions and 135 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -147,7 +147,7 @@ export default function MarketingLayout({
<Link href="/" className="flex items-center space-x-3 group"> <Link href="/" className="flex items-center space-x-3 group">
<div className="relative w-16 h-16 overflow-hidden rounded-full shadow-indigo-200 shadow-lg group-hover:scale-105 transition-transform duration-200"> <div className="relative w-16 h-16 overflow-hidden rounded-full shadow-indigo-200 shadow-lg group-hover:scale-105 transition-transform duration-200">
<Image <Image
src="/favicon1.png" src="/logo.svg"
alt="QR Master" alt="QR Master"
fill fill
sizes="64px" sizes="64px"

View File

@@ -119,29 +119,49 @@ const comparisonRows = [
{ {
platform: 'Bitly', platform: 'Bitly',
href: '/alternatives/bitly', href: '/alternatives/bitly',
bestFor: 'Short links and light QR use', price: 'Link-first paid plans',
watchOut: 'Low QR code counts on entry plans; no bulk QR creation', freePlan: 'Limited QR use',
dynamicCodes: 'QR feature inside link management',
analytics: 'Link analytics first',
gdpr: 'Review DPA for EU use',
bulk: 'No QR-first bulk workflow',
branding: 'Bitly-branded link context',
qrMasterAngle: 'QR-first workflow with 50 dynamic codes on Pro', qrMasterAngle: 'QR-first workflow with 50 dynamic codes on Pro',
}, },
{ {
platform: 'Flowcode', platform: 'Flowcode',
href: '/alternatives/flowcode', href: '/alternatives/flowcode',
bestFor: 'Design-forward QR campaigns', price: 'Brand and team tiers',
watchOut: 'Branding and interstitial concerns on lower tiers', freePlan: 'Limited free path',
dynamicCodes: 'Strong QR design workflow',
analytics: 'Paid campaign analytics',
gdpr: 'US vendor; review data terms',
bulk: 'Best for larger plans',
branding: 'Design-forward, possible platform branding',
qrMasterAngle: 'Clean redirects and brand control without a branded scan page', qrMasterAngle: 'Clean redirects and brand control without a branded scan page',
}, },
{ {
platform: 'Beaconstac / Uniqode', platform: 'Beaconstac / Uniqode',
href: '/alternatives/beaconstac', href: '/alternatives/beaconstac',
bestFor: 'Enterprise QR management', price: 'Enterprise-oriented tiers',
watchOut: 'Often more platform than small teams need', freePlan: 'Trial or limited evaluation',
dynamicCodes: 'Advanced enterprise QR platform',
analytics: 'Advanced paid analytics',
gdpr: 'DPA and configuration review needed',
bulk: 'Strong, often enterprise-oriented',
branding: 'Enterprise controls',
qrMasterAngle: 'Simpler dynamic QR, analytics, and bulk creation for SMB teams', qrMasterAngle: 'Simpler dynamic QR, analytics, and bulk creation for SMB teams',
}, },
{ {
platform: 'QR-Code-Generator.com', platform: 'QR-Code-Generator.com',
href: '/alternatives/qr-code-generator', href: '/alternatives/qr-code-generator',
bestFor: 'Fast one-off QR creation', price: 'Paid dynamic QR after trial',
watchOut: 'Dynamic QR trial limits can be painful after printing', freePlan: 'Static QR path',
dynamicCodes: 'Dynamic QR behind paid upgrade',
analytics: 'Paid analytics',
gdpr: 'Review vendor terms',
bulk: 'Paid workflow',
branding: 'Template-driven branding',
qrMasterAngle: 'Free dynamic codes and transparent paid tiers', qrMasterAngle: 'Free dynamic codes and transparent paid tiers',
}, },
]; ];
@@ -257,34 +277,57 @@ export default function AlternativesHubPage() {
</p> </p>
</div> </div>
<div className="overflow-hidden rounded-xl border" style={{ borderColor: '#E4E0D9' }}> <div className="overflow-x-auto rounded-xl border" style={{ borderColor: '#E4E0D9' }}>
<div className="grid grid-cols-1 md:grid-cols-5" style={{ backgroundColor: '#F8F7F4' }}> <table className="w-full min-w-[980px] text-sm">
{['Platform', 'Best for', 'Watch out for', 'QR Master angle', 'Compare'].map((heading) => ( <thead style={{ backgroundColor: '#F8F7F4' }}>
<div key={heading} className="p-4 text-xs font-semibold uppercase tracking-wider" style={{ color: '#71717A' }}> <tr>
{heading} {[
</div> 'Platform',
))} 'Price',
</div> 'Free plan',
{comparisonRows.map((row, index) => ( 'Dynamic codes',
<div 'Analytics',
key={row.platform} 'GDPR / EU fit',
className="grid grid-cols-1 md:grid-cols-5" 'Bulk',
style={{ 'Branding',
borderTop: '1px solid #E4E0D9', 'Compare',
backgroundColor: index % 2 === 0 ? '#FFFFFF' : '#FAFAF8', ].map((heading) => (
}} <th
> key={heading}
<div className="p-4 font-semibold" style={{ color: '#18181B' }}>{row.platform}</div> className="p-4 text-left text-xs font-semibold uppercase tracking-wider"
<div className="p-4 text-sm" style={{ color: '#52525B' }}>{row.bestFor}</div> style={{ color: '#71717A' }}
<div className="p-4 text-sm" style={{ color: '#52525B' }}>{row.watchOut}</div> >
<div className="p-4 text-sm font-medium" style={{ color: '#166534' }}>{row.qrMasterAngle}</div> {heading}
<div className="p-4"> </th>
<Link href={row.href} className="text-sm font-semibold" style={{ color: '#166534' }}> ))}
QR Master vs {row.platform} </tr>
</Link> </thead>
</div> <tbody>
</div> {comparisonRows.map((row, index) => (
))} <tr
key={row.platform}
style={{
borderTop: '1px solid #E4E0D9',
backgroundColor: index % 2 === 0 ? '#FFFFFF' : '#FAFAF8',
}}
>
<td className="p-4 font-semibold" style={{ color: '#18181B' }}>{row.platform}</td>
<td className="p-4" style={{ color: '#52525B' }}>{row.price}</td>
<td className="p-4" style={{ color: '#52525B' }}>{row.freePlan}</td>
<td className="p-4" style={{ color: '#52525B' }}>{row.dynamicCodes}</td>
<td className="p-4" style={{ color: '#52525B' }}>{row.analytics}</td>
<td className="p-4" style={{ color: '#52525B' }}>{row.gdpr}</td>
<td className="p-4" style={{ color: '#52525B' }}>{row.bulk}</td>
<td className="p-4" style={{ color: '#52525B' }}>{row.branding}</td>
<td className="p-4">
<Link href={row.href} className="font-semibold" style={{ color: '#166534' }}>
QR Master vs {row.platform}
</Link>
</td>
</tr>
))}
</tbody>
</table>
</div> </div>
</div> </div>
</section> </section>

View File

@@ -12,13 +12,13 @@ import { GrowthLinksSection } from '@/components/marketing/GrowthLinksSection';
import { MarketingPageTracker } from '@/components/marketing/MarketingAnalytics'; import { MarketingPageTracker } from '@/components/marketing/MarketingAnalytics';
export const metadata: Metadata = { export const metadata: Metadata = {
title: { title: {
absolute: 'Bulk QR Code Generator - Create QR Codes from a Spreadsheet', absolute: 'Bulk QR Code Generator for Excel, CSV and Google Sheets',
}, },
description: description:
'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan. Upload, preview, download as ZIP, or save the batch to your dashboard.', 'Generate up to 1,000 QR codes from Excel, CSV, XLSX, or exported Google Sheets data. Upload, preview, batch-create, download ZIP files, or save to your dashboard.',
keywords: keywords:
'bulk qr code generator, qr code from excel, csv qr code generator, bulk qr codes, spreadsheet qr generation', 'bulk qr code generator, bulk qr code generator excel, batch qr code generator, qr code from excel, csv qr code generator, bulk qr generator, bulk qr code generator in google sheets, spreadsheet qr generation',
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/bulk-qr-code-generator', canonical: 'https://www.qrmaster.net/bulk-qr-code-generator',
languages: { languages: {
@@ -27,36 +27,41 @@ export const metadata: Metadata = {
}, },
}, },
openGraph: { openGraph: {
title: 'Bulk QR Code Generator - Create QR Codes from a Spreadsheet', title: 'Bulk QR Code Generator for Excel, CSV and Google Sheets',
description: description:
'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan.', 'Generate up to 1,000 QR codes from CSV, Excel, XLSX, or exported Google Sheets data.',
url: 'https://www.qrmaster.net/bulk-qr-code-generator', url: 'https://www.qrmaster.net/bulk-qr-code-generator',
type: 'website', type: 'website',
images: ['/og-image.png'], images: ['/og-image.png'],
}, },
twitter: { twitter: {
title: 'Bulk QR Code Generator - Create QR Codes from a Spreadsheet', title: 'Bulk QR Code Generator for Excel, CSV and Google Sheets',
description: description:
'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan.', 'Generate up to 1,000 QR codes from CSV, Excel, XLSX, or exported Google Sheets data.',
}, },
}; };
const featureCards = [ const featureCards = [
{ {
title: 'Spreadsheet upload', title: 'Spreadsheet upload',
description: description:
'Upload CSV, XLS, or XLSX files and map the title and content columns before generating the batch.', 'Upload CSV, XLS, or XLSX files from Excel, Numbers, Airtable, or a Google Sheets export and map the title and content columns before generating the batch.',
}, },
{
title: 'Excel and Google Sheets workflow',
description:
'Prepare rows in Excel or Google Sheets, export to CSV/XLSX, then generate the full QR code batch from one clean spreadsheet.',
},
{ {
title: 'Up to 1,000 rows per upload', title: 'Up to 1,000 rows per upload',
description: description:
'The current bulk creation flow limits each upload to 1,000 rows so the batch stays predictable and reviewable.', 'The current bulk creation flow limits each upload to 1,000 rows so the batch stays predictable and reviewable.',
}, },
{ {
title: 'Static QR output', title: 'Static QR output',
description: description:
'Bulk creation currently generates static QR codes. These codes do not include post-print editing or tracking.', 'Bulk creation currently generates static QR codes. These codes do not include post-print editing or tracking.',
}, },
{ {
title: 'ZIP download', title: 'ZIP download',
description: description:
@@ -67,16 +72,26 @@ const featureCards = [
description: description:
'After generation, you can save the batch into your QR Master dashboard for later management.', 'After generation, you can save the batch into your QR Master dashboard for later management.',
}, },
{ {
title: 'Business plan access', title: 'Business plan access',
description: description:
'The current bulk creation workflow is available to Business plan subscribers and is positioned around scale, not single-code creation.', 'The current bulk creation workflow is available to Business plan subscribers and is positioned around scale, not single-code creation.',
}, },
]; ];
const inputExamples = [ const inputExamples = [
{ {
title: 'Website URLs', title: 'Google Sheets export',
content: 'Name,URL\nMenu QR,https://example.com/menu\nFlyer QR,https://example.com/flyer',
note: 'Export a Google Sheet as CSV and upload it as a batch QR code generator input.',
},
{
title: 'Excel product list',
content: 'SKU,URL\nSKU-1001,https://example.com/products/1001',
note: 'Use Excel or XLSX rows when each product, insert, or label needs its own QR code.',
},
{
title: 'Website URLs',
content: 'https://example.com/product', content: 'https://example.com/product',
note: 'Useful for product pages, flyers, support pages, or campaign destinations.', note: 'Useful for product pages, flyers, support pages, or campaign destinations.',
}, },
@@ -135,11 +150,21 @@ const faqItems = [
answer: answer:
'No. The current bulk creation flow generates static QR codes, so those codes do not include post-print editing or tracking.', 'No. The current bulk creation flow generates static QR codes, so those codes do not include post-print editing or tracking.',
}, },
{ {
question: 'What file formats can I upload?', question: 'What file formats can I upload?',
answer: answer:
'The current flow accepts CSV, XLS, and XLSX files.', 'The current flow accepts CSV, XLS, and XLSX files.',
}, },
{
question: 'Can I use Google Sheets as the source?',
answer:
'Yes. Prepare the batch in Google Sheets, export it as CSV or XLSX, then upload that file to QR Master. The workflow is the same as an Excel upload.',
},
{
question: 'Is this a batch QR code generator?',
answer:
'Yes. QR Master bulk creation is a batch QR code generator for spreadsheet rows. Each row becomes one QR code, and the finished batch can be downloaded together.',
},
{ {
question: 'Which plan includes bulk QR creation?', question: 'Which plan includes bulk QR creation?',
answer: answer:
@@ -160,11 +185,12 @@ const softwareSchema = {
priceCurrency: 'EUR', priceCurrency: 'EUR',
availability: 'https://schema.org/InStock', availability: 'https://schema.org/InStock',
}, },
description: description:
'Generate up to 1,000 static QR codes from CSV or Excel files in the QR Master Business plan.', 'Generate up to 1,000 static QR codes from CSV, Excel, XLSX, or exported Google Sheets files in the QR Master Business plan.',
featureList: [ featureList: [
'CSV, XLS, and XLSX upload', 'CSV, XLS, and XLSX upload',
'Up to 1,000 rows per upload', 'Excel and Google Sheets CSV export workflow',
'Up to 1,000 rows per upload',
'Static QR code generation', 'Static QR code generation',
'ZIP download of generated SVG files', 'ZIP download of generated SVG files',
'Optional save-to-dashboard step', 'Optional save-to-dashboard step',
@@ -393,9 +419,52 @@ export default function BulkQRCodeGeneratorPage() {
</p> </p>
</div> </div>
<div className="container mx-auto max-w-5xl px-4 pb-8 sm:px-6 lg:px-8"> <section className="bg-white py-16">
<FAQSection items={faqItems} title="Bulk QR questions" /> <div className="container mx-auto max-w-6xl px-4 sm:px-6 lg:px-8">
</div> <div className="mb-10 max-w-3xl">
<p className="mb-3 text-sm font-semibold uppercase tracking-wider text-green-600">
Excel, CSV, and Google Sheets
</p>
<h2 className="text-3xl font-bold text-gray-900">
Batch QR code generation from spreadsheet rows
</h2>
<p className="mt-4 text-lg leading-relaxed text-gray-600">
Use QR Master as a bulk QR code generator when your source data
already lives in Excel, a CSV export, or Google Sheets. Keep one
row per QR code, map the columns, preview the batch, then export
the generated SVG files together.
</p>
</div>
<div className="grid gap-6 md:grid-cols-3">
{[
{
title: '1. Prepare columns',
body: 'Use columns such as title, URL, SKU, campaign, or location. The content column is what the QR code encodes.',
},
{
title: '2. Export clean data',
body: 'Save Excel as XLSX or export Google Sheets to CSV. Avoid merged cells and keep one QR code per row.',
},
{
title: '3. Generate the batch',
body: 'Upload the file, map title and content, preview the rows, and download the finished QR codes as a ZIP.',
},
].map((step) => (
<Card key={step.title} className="p-6">
<h3 className="mb-2 text-xl font-semibold text-gray-900">
{step.title}
</h3>
<p className="text-gray-600">{step.body}</p>
</Card>
))}
</div>
</div>
</section>
<div className="container mx-auto max-w-5xl px-4 pb-8 sm:px-6 lg:px-8">
<FAQSection items={faqItems} title="Bulk QR questions" />
</div>
<section className="bg-gray-50 py-20"> <section className="bg-gray-50 py-20">
<div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8"> <div className="container mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">

View File

@@ -16,12 +16,12 @@ import { featuredUseCases } from '@/lib/growth-pages';
export const metadata: Metadata = { export const metadata: Metadata = {
title: { title: {
absolute: 'Free Dynamic QR Code Generator - Editable QR Codes', absolute: 'Free Dynamic QR Code Generator - Editable QR Codes with Tracking',
}, },
description: description:
'Create a free dynamic QR code generator workflow. Edit QR code destinations after printing, track scans, and manage editable QR codes in one dashboard.', 'Create free dynamic QR codes with editable destinations, scan tracking, custom branding, and no reprint workflow for menus, flyers, packaging, and campaigns.',
keywords: keywords:
'dynamic qr code generator, editable qr code, dynamic qr code, qr code tracking, update qr code after printing', 'dynamic qr code generator, free dynamic qr code generator, best dynamic qr code generator, editable qr code, changeable qr code, qr code tracking, update qr code after printing',
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/dynamic-qr-code-generator', canonical: 'https://www.qrmaster.net/dynamic-qr-code-generator',
languages: { languages: {
@@ -30,7 +30,7 @@ export const metadata: Metadata = {
}, },
}, },
openGraph: { openGraph: {
title: 'Free Dynamic QR Code Generator - Editable QR Codes', title: 'Free Dynamic QR Code Generator - Editable QR Codes with Tracking',
description: description:
'Create dynamic QR codes that you can edit after printing. Change the destination URL anytime, track scans, and manage all codes in one dashboard.', 'Create dynamic QR codes that you can edit after printing. Change the destination URL anytime, track scans, and manage all codes in one dashboard.',
url: 'https://www.qrmaster.net/dynamic-qr-code-generator', url: 'https://www.qrmaster.net/dynamic-qr-code-generator',
@@ -38,7 +38,7 @@ export const metadata: Metadata = {
images: ['/og-image.png'], images: ['/og-image.png'],
}, },
twitter: { twitter: {
title: 'Free Dynamic QR Code Generator - Editable QR Codes', title: 'Free Dynamic QR Code Generator - Editable QR Codes with Tracking',
description: description:
'Create dynamic QR codes that you can edit after printing. Change the destination URL anytime, track scans, and manage all codes in one dashboard.', 'Create dynamic QR codes that you can edit after printing. Change the destination URL anytime, track scans, and manage all codes in one dashboard.',
}, },
@@ -470,7 +470,7 @@ export default function DynamicQRCodeGeneratorPage() {
<div className="space-y-5"> <div className="space-y-5">
<h1 className="text-5xl font-bold leading-tight text-gray-900 lg:text-6xl"> <h1 className="text-5xl font-bold leading-tight text-gray-900 lg:text-6xl">
Free Dynamic QR Code Generator Free Dynamic QR Code Generator with Tracking
</h1> </h1>
<p className="text-xl leading-relaxed text-gray-600"> <p className="text-xl leading-relaxed text-gray-600">
Create editable QR codes you can update after printing. Create editable QR codes you can update after printing.
@@ -1030,7 +1030,7 @@ export default function DynamicQRCodeGeneratorPage() {
</div> </div>
</div> </div>
<p className="mt-4 text-center text-sm text-gray-600"> <p className="mt-4 text-center text-sm text-gray-600">
Same QR image, different destination later. Live demo: one printed QR image, different destination later.
</p> </p>
</Card> </Card>
<div className="absolute -right-4 -top-4 rounded-full bg-purple-500 px-4 py-2 text-sm font-semibold text-white shadow-lg"> <div className="absolute -right-4 -top-4 rounded-full bg-purple-500 px-4 py-2 text-sm font-semibold text-white shadow-lg">

View File

@@ -19,10 +19,11 @@ export const metadata: Metadata = {
: { index: false, follow: false }, : { index: false, follow: false },
icons: { icons: {
icon: [ icon: [
{ url: '/favicon1.png', sizes: '2048x2048', type: 'image/png' }, { url: '/favicon.svg', type: 'image/svg+xml' },
{ url: '/favicon.ico', sizes: '16x16 32x32', type: 'image/x-icon' },
], ],
shortcut: '/favicon1.png', shortcut: '/favicon.ico',
apple: '/favicon1.png', apple: '/logo.svg',
}, },
twitter: { twitter: {
card: 'summary_large_image', card: 'summary_large_image',

View File

@@ -2,16 +2,10 @@ import React from 'react';
import type { Metadata } from 'next'; import type { Metadata } from 'next';
import SeoJsonLd from '@/components/SeoJsonLd'; import SeoJsonLd from '@/components/SeoJsonLd';
import { import {
organizationSchema,
websiteSchema, websiteSchema,
softwareApplicationSchema, softwareApplicationSchema,
reviewSchema,
aggregateRatingSchema,
} from '@/lib/schema'; } from '@/lib/schema';
import { import { getAggregateRating } from '@/lib/testimonial-data';
getFeaturedTestimonials,
getAggregateRating,
} from '@/lib/testimonial-data';
import HomePageClient from '@/components/marketing/HomePageClient'; import HomePageClient from '@/components/marketing/HomePageClient';
function truncateAtWord(text: string, maxLength: number): string { function truncateAtWord(text: string, maxLength: number): string {
@@ -22,12 +16,11 @@ function truncateAtWord(text: string, maxLength: number): string {
} }
export async function generateMetadata(): Promise<Metadata> { export async function generateMetadata(): Promise<Metadata> {
const title = truncateAtWord('QR Master Free QR Code Generator with Analytics', 60);
const description = truncateAtWord( const description = truncateAtWord(
'QR Master is a free QR code generator with scan analytics, dynamic QR codes, custom branding, and bulk creation. No signup required for static codes.', 'QR Master is a free dynamic QR code generator with tracking, editable destinations, custom branding, and bulk QR creation. Create static QR codes without signup.',
160 160
); );
const brandTitle = 'QR Master | Free Dynamic QR Code Generator'; const brandTitle = 'QR Master - Free Dynamic QR Code Generator with Tracking';
return { return {
title: brandTitle, title: brandTitle,
@@ -42,6 +35,9 @@ export async function generateMetadata(): Promise<Metadata> {
'qr code with logo', 'qr code with logo',
'barcode generator', 'barcode generator',
'free barcode generator', 'free barcode generator',
'qr master',
'qrmaster',
'qr code master',
], ],
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/', canonical: 'https://www.qrmaster.net/',
@@ -73,19 +69,14 @@ export async function generateMetadata(): Promise<Metadata> {
} }
export default function HomePage() { export default function HomePage() {
const featuredTestimonials = getFeaturedTestimonials();
const aggregateRating = getAggregateRating(); const aggregateRating = getAggregateRating();
const reviewSchemas = featuredTestimonials.map((t) => reviewSchema(t));
return ( return (
<> <>
<SeoJsonLd <SeoJsonLd
data={[ data={[
websiteSchema(), websiteSchema(),
organizationSchema(),
softwareApplicationSchema(aggregateRating), softwareApplicationSchema(aggregateRating),
aggregateRatingSchema(aggregateRating),
...reviewSchemas,
]} ]}
/> />
@@ -126,6 +117,15 @@ export default function HomePage() {
<a href="/qr-code-erstellen">German QR code generator</a>, and{' '} <a href="/qr-code-erstellen">German QR code generator</a>, and{' '}
<a href="/qr-code-for/barbershops">QR codes for barbershops</a>. <a href="/qr-code-for/barbershops">QR codes for barbershops</a>.
</p> </p>
<p>
High-intent QR Master pages include the{' '}
<a href="/bulk-qr-code-generator">
bulk QR code generator for Excel and CSV files
</a>
, <a href="/alternatives">QR code platform alternatives</a>,{' '}
<a href="/alternatives/beaconstac">Beaconstac alternative</a>, and{' '}
<a href="/alternatives/bitly">Bitly QR code alternative</a>.
</p>
</div> </div>
<HomePageClient /> <HomePageClient />

View File

@@ -18,13 +18,14 @@ export const metadata: Metadata = {
robots: isIndexable robots: isIndexable
? { index: true, follow: true } ? { index: true, follow: true }
: { index: false, follow: false }, : { index: false, follow: false },
icons: { icons: {
icon: [ icon: [
{ url: '/favicon1.png', sizes: '2048x2048', type: 'image/png' }, { url: '/favicon.svg', type: 'image/svg+xml' },
], { url: '/favicon.ico', sizes: '16x16 32x32', type: 'image/x-icon' },
shortcut: '/favicon1.png', ],
apple: '/favicon1.png', shortcut: '/favicon.ico',
}, apple: '/logo.svg',
},
twitter: { twitter: {
card: 'summary_large_image', card: 'summary_large_image',
site: '@qrmaster', site: '@qrmaster',

View File

@@ -113,7 +113,7 @@ export default function MarketingLayout({
<Link href="/" className="flex items-center space-x-3 group"> <Link href="/" className="flex items-center space-x-3 group">
<div className="relative w-16 h-16 overflow-hidden rounded-full shadow-indigo-200 shadow-lg group-hover:scale-105 transition-transform duration-200"> <div className="relative w-16 h-16 overflow-hidden rounded-full shadow-indigo-200 shadow-lg group-hover:scale-105 transition-transform duration-200">
<Image <Image
src="/favicon1.png" src="/logo.svg"
alt="QR Master" alt="QR Master"
fill fill
sizes="64px" sizes="64px"

View File

@@ -41,18 +41,18 @@ export const metadata: Metadata = {
'barcode drucken', 'barcode drucken',
], ],
alternates: { alternates: {
canonical: 'https://www.qrmaster.net/barcode-generator', canonical: 'https://www.qrmaster.net/tools/barcode-generator',
languages: { languages: {
'x-default': 'https://www.qrmaster.net/tools/barcode-generator', 'x-default': 'https://www.qrmaster.net/tools/barcode-generator',
en: 'https://www.qrmaster.net/tools/barcode-generator', en: 'https://www.qrmaster.net/tools/barcode-generator',
de: 'https://www.qrmaster.net/barcode-generator', de: 'https://www.qrmaster.net/tools/barcode-generator',
}, },
}, },
openGraph: { openGraph: {
title: 'Barcode Generator Kostenlos EAN, UPC & Code 128 erstellen', title: 'Barcode Generator Kostenlos EAN, UPC & Code 128 erstellen',
description: description:
'Barcode Generator: Erstellen Sie professionelle Barcodes für Einzelhandel, Lager und Logistik. Kostenlos, ohne Anmeldung. Sofort druckfertig.', 'Barcode Generator: Erstellen Sie professionelle Barcodes für Einzelhandel, Lager und Logistik. Kostenlos, ohne Anmeldung. Sofort druckfertig.',
url: 'https://www.qrmaster.net/barcode-generator', url: 'https://www.qrmaster.net/tools/barcode-generator',
locale: 'de_DE', locale: 'de_DE',
type: 'website', type: 'website',
images: [ images: [

View File

@@ -15,10 +15,11 @@ export const metadata: Metadata = {
metadataBase: new URL('https://www.qrmaster.net'), metadataBase: new URL('https://www.qrmaster.net'),
icons: { icons: {
icon: [ icon: [
{ url: '/favicon1.png', sizes: '2048x2048', type: 'image/png' }, { url: '/favicon.svg', type: 'image/svg+xml' },
{ url: '/favicon.ico', sizes: '16x16 32x32', type: 'image/x-icon' },
], ],
shortcut: '/favicon1.png', shortcut: '/favicon.ico',
apple: '/favicon1.png', apple: '/logo.svg',
}, },
openGraph: { openGraph: {
type: 'website', type: 'website',

View File

@@ -51,12 +51,37 @@ export default function HomePageClient() {
Popular QR Master workflows Popular QR Master workflows
</h2> </h2>
<p className="mt-3 text-base leading-7 text-slate-600"> <p className="mt-3 text-base leading-7 text-slate-600">
Start with the pages people already use for meetings, guest WiFi, Start with the pages that match high-intent searches for editable
German QR creation, and local service businesses. QR codes, spreadsheet batches, barcodes, competitor comparisons,
meetings, guest WiFi, and local service businesses.
</p> </p>
</div> </div>
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4"> <div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
{[ {[
{
href: '/dynamic-qr-code-generator',
title: 'Dynamic QR Code Generator',
description:
'Create editable QR codes with tracking and no reprint workflow.',
},
{
href: '/bulk-qr-code-generator',
title: 'Bulk QR Code Generator',
description:
'Generate QR codes from Excel, CSV, and spreadsheet rows.',
},
{
href: '/tools/barcode-generator',
title: 'Barcode Generator',
description:
'Create EAN-13, UPC-A, and Code 128 barcodes online.',
},
{
href: '/alternatives',
title: 'QR Code Platform Alternatives',
description:
'Compare QR Master with Beaconstac, Bitly, Flowcode, and more.',
},
{ {
href: '/tools/teams-qr-code', href: '/tools/teams-qr-code',
title: 'Teams QR Code Generator', title: 'Teams QR Code Generator',

View File

@@ -19,10 +19,10 @@ export function Footer({ variant = 'marketing', t }: FooterProps) {
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl"> <div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-8"> <div className="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-6 gap-8">
<div> <div>
<Link href="/" className="flex items-center space-x-2 mb-4 hover:opacity-80 transition-opacity"> <Link href="/" className="flex items-center space-x-2 mb-4 hover:opacity-80 transition-opacity">
<img src="/favicon1.png" alt="QR Master Logo" className="w-[68px] h-[68px] rounded-full object-cover" /> <img src="/logo.svg" alt="QR Master Logo" className="w-[68px] h-[68px] rounded-lg object-cover" />
<span className={`text-xl font-bold ${isDashboard ? 'text-gray-900' : ''}`}>QR Master</span> <span className={`text-xl font-bold ${isDashboard ? 'text-gray-900' : ''}`}>QR Master</span>
</Link> </Link>
<p className={isDashboard ? 'text-gray-500' : 'text-gray-400'}> <p className={isDashboard ? 'text-gray-500' : 'text-gray-400'}>
{translations.tagline} {translations.tagline}
</p> </p>

View File

@@ -21,9 +21,9 @@
"all_industries": "Industries" "all_industries": "Industries"
}, },
"hero": { "hero": {
"badge": "Free QR Code Generator", "badge": "QR Master Free QR Code Generator",
"title": "QR Master: Create QR Codes That Work Everywhere", "title": "QR Master: Free Dynamic QR Code Generator with Tracking",
"subtitle": "Generate static and dynamic QR codes with tracking, custom branding, and bulk generation. Free forever.", "subtitle": "Create static and dynamic QR codes with editable destinations, scan tracking, custom branding, and bulk generation. Also searched as QRMaster and QR code master.",
"features": [ "features": [
"No credit card required to start", "No credit card required to start",
"Create QR codes free forever", "Create QR codes free forever",

View File

@@ -33,11 +33,11 @@ export function organizationSchema() {
name: 'QR Master', name: 'QR Master',
alternateName: ['QRMaster', 'QR Master QR Code Generator'], alternateName: ['QRMaster', 'QR Master QR Code Generator'],
url: SITE_URL, url: SITE_URL,
logo: { logo: {
'@type': 'ImageObject', '@type': 'ImageObject',
url: `${SITE_URL}/static/og-image.png`, url: `${SITE_URL}/og-image.png`,
width: 1200, width: 1200,
height: 630, height: 630,
}, },
sameAs: [ sameAs: [
'https://www.wikidata.org/wiki/Q137918857', 'https://www.wikidata.org/wiki/Q137918857',
@@ -95,9 +95,9 @@ export function blogPostingSchema(post: BlogPost, author?: AuthorProfile) {
name: "QR Master", name: "QR Master",
url: SITE_URL, url: SITE_URL,
logo: { logo: {
'@type': 'ImageObject', '@type': 'ImageObject',
url: `${SITE_URL}/static/og-image.png`, url: `${SITE_URL}/og-image.png`,
} }
}, },
isPartOf: { isPartOf: {
'@type': 'Blog', '@type': 'Blog',
@@ -272,7 +272,7 @@ export function articleSchema(params: {
url: SITE_URL, url: SITE_URL,
logo: { logo: {
'@type': 'ImageObject', '@type': 'ImageObject',
url: `${SITE_URL}/static/og-image.png`, url: `${SITE_URL}/og-image.png`,
}, },
}, },
url: params.url, url: params.url,
@@ -287,7 +287,7 @@ export function reviewSchema(testimonial: Testimonial) {
'@type': 'SoftwareApplication', '@type': 'SoftwareApplication',
name: 'QR Master', name: 'QR Master',
description: 'Professional QR code generator with dynamic QR codes, analytics, and customization.', description: 'Professional QR code generator with dynamic QR codes, analytics, and customization.',
image: `${SITE_URL}/static/og-image.png`, image: `${SITE_URL}/og-image.png`,
applicationCategory: 'BusinessApplication', applicationCategory: 'BusinessApplication',
operatingSystem: 'Web Browser', operatingSystem: 'Web Browser',
offers: { offers: {
@@ -320,7 +320,7 @@ export function aggregateRatingSchema(aggregateRating: AggregateRating) {
'@type': 'SoftwareApplication', '@type': 'SoftwareApplication',
name: 'QR Master', name: 'QR Master',
description: 'Professional QR code generator with dynamic QR codes, analytics, and customization.', description: 'Professional QR code generator with dynamic QR codes, analytics, and customization.',
image: `${SITE_URL}/static/og-image.png`, image: `${SITE_URL}/og-image.png`,
applicationCategory: 'BusinessApplication', applicationCategory: 'BusinessApplication',
operatingSystem: 'Web Browser', operatingSystem: 'Web Browser',
url: SITE_URL, url: SITE_URL,
@@ -367,7 +367,7 @@ export function newsArticleSchema(params: NewsArticleParams) {
'@id': `${SITE_URL}/#organization`, '@id': `${SITE_URL}/#organization`,
logo: { logo: {
'@type': 'ImageObject', '@type': 'ImageObject',
url: `${SITE_URL}/static/og-image.png`, url: `${SITE_URL}/og-image.png`,
width: 1200, width: 1200,
height: 630, height: 630,
}, },

File diff suppressed because one or more lines are too long