Ahrefs
This commit is contained in:
parent
65def796ea
commit
ceb2ac40ec
|
|
@ -0,0 +1,33 @@
|
||||||
|
🎯 Was du jetzt tun MUSST:
|
||||||
|
|
||||||
|
Option 1: Template nutzen (5 Minuten)
|
||||||
|
1. Öffne og-image-template.html im Browser
|
||||||
|
2. Screenshot vom Bild (1200x630px)
|
||||||
|
3. Speichere als og-image.png
|
||||||
|
4. Verschiebe nach /public/og-image.png
|
||||||
|
|
||||||
|
Option 2: Schnell selbst erstellen
|
||||||
|
- Canva: https://www.canva.com (Free)
|
||||||
|
- Figma: https://www.figma.com (Free)
|
||||||
|
- Größe: 1200 x 630 Pixel
|
||||||
|
- Text: "QR Master - Dynamic QR Codes with Analytics"
|
||||||
|
|
||||||
|
Option 3: Placeholder nutzen
|
||||||
|
Ich kann dir einen einfachen Platzhalter erstellen, bis du ein professionelles Design hast.
|
||||||
|
|
||||||
|
---
|
||||||
|
📊 Zusammenfassung:
|
||||||
|
┌────────────────────────────┬───────────────────────────────┐
|
||||||
|
│ Issue │ Status │
|
||||||
|
├────────────────────────────┼───────────────────────────────┤
|
||||||
|
│ Open Graph tags incomplete │ ✅ 4/6 gefixt, 2 übersprungen │
|
||||||
|
├────────────────────────────┼───────────────────────────────┤
|
||||||
|
│ Open Graph URL mismatch │ ✅ GEFIXT (/pricing) │
|
||||||
|
├────────────────────────────┼───────────────────────────────┤
|
||||||
|
│ Open Graph tags missing │ ✅ GEFIXT (/login, /signup) │
|
||||||
|
├────────────────────────────┼───────────────────────────────┤
|
||||||
|
│ Twitter card missing │ ✅ GEFIXT (/login, /signup) │
|
||||||
|
├────────────────────────────┼───────────────────────────────┤
|
||||||
|
│ og-image.png │ ❌ FEHLT NOCH │
|
||||||
|
└────────────────────────────┴───────────────────────────────┘
|
||||||
|
Nach dem Erstellen von og-image.png und Deploy → Alle Issues sind gelöst! 🚀
|
||||||
|
|
@ -20,6 +20,40 @@ const nextConfig = {
|
||||||
pagesBufferLength: 2,
|
pagesBufferLength: 2,
|
||||||
},
|
},
|
||||||
poweredByHeader: false,
|
poweredByHeader: false,
|
||||||
|
async redirects() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
source: '/blog/bulk-qr-codes-excel',
|
||||||
|
destination: '/blog/bulk-qr-code-generator-excel',
|
||||||
|
permanent: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: '/blog/vcard-qr-code-generator',
|
||||||
|
destination: '/tools/vcard-qr-code',
|
||||||
|
permanent: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: '/blog/qr-code-restaurant-menu',
|
||||||
|
destination: '/dynamic-qr-code-generator',
|
||||||
|
permanent: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: '/blog/bulk-qr-code-generator',
|
||||||
|
destination: '/bulk-qr-code-generator',
|
||||||
|
permanent: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: '/blog/qr-code-small-business',
|
||||||
|
destination: '/signup',
|
||||||
|
permanent: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
source: '/analytics',
|
||||||
|
destination: '/signup',
|
||||||
|
permanent: false, // 307 Temporary Redirect as it requires auth eventually
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default nextConfig;
|
export default nextConfig;
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 464 KiB |
|
|
@ -0,0 +1,311 @@
|
||||||
|
Issues
|
||||||
|
/
|
||||||
|
H1 tag missing or empty
|
||||||
|
|
||||||
|
Why and how to fix
|
||||||
|
|
||||||
|
Submit to IndexNow
|
||||||
|
|
||||||
|
Create new issue
|
||||||
|
|
||||||
|
All URLs
|
||||||
|
|
||||||
|
Pages
|
||||||
|
|
||||||
|
Resources
|
||||||
|
|
||||||
|
Content
|
||||||
|
|
||||||
|
Links
|
||||||
|
|
||||||
|
Redirects
|
||||||
|
|
||||||
|
Indexability
|
||||||
|
|
||||||
|
Sitemaps
|
||||||
|
|
||||||
|
Ahrefs metrics
|
||||||
|
Word or phrase
|
||||||
|
|
||||||
|
URL
|
||||||
|
|
||||||
|
Advanced filter
|
||||||
|
Crawl history
|
||||||
|
Hide chart
|
||||||
|
12 Jan
|
||||||
|
13 Jan
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
All filter results
|
||||||
|
|
||||||
|
All filter results
|
||||||
|
2
|
||||||
|
|
||||||
|
Lost from filter results
|
||||||
|
1
|
||||||
|
|
||||||
|
Lost
|
||||||
|
0
|
||||||
|
|
||||||
|
Patches
|
||||||
|
|
||||||
|
Changes: Don't show
|
||||||
|
|
||||||
|
Columns
|
||||||
|
|
||||||
|
Export
|
||||||
|
PR
|
||||||
|
URL
|
||||||
|
Organic traffic
|
||||||
|
HTTP status code
|
||||||
|
Depth
|
||||||
|
H1
|
||||||
|
H1 length
|
||||||
|
No. of H1
|
||||||
|
Is indexable page
|
||||||
|
12
|
||||||
|
html
|
||||||
|
Admin Dashboard | QR Master | QR Master
|
||||||
|
https://www.qrmaster.net/newsletter
|
||||||
|
0
|
||||||
|
200
|
||||||
|
1
|
||||||
|
0
|
||||||
|
No
|
||||||
|
2
|
||||||
|
html
|
||||||
|
Post Not Found | QR Master
|
||||||
|
https://www.qrmaster.net/blog/3-body.png
|
||||||
|
0
|
||||||
|
200
|
||||||
|
2
|
||||||
|
0
|
||||||
|
No
|
||||||
|
Showing 2 of 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Issues
|
||||||
|
/
|
||||||
|
Low word count
|
||||||
|
|
||||||
|
Why and how to fix
|
||||||
|
|
||||||
|
Submit to IndexNow
|
||||||
|
|
||||||
|
Create new issue
|
||||||
|
|
||||||
|
All URLs
|
||||||
|
|
||||||
|
Pages
|
||||||
|
|
||||||
|
Resources
|
||||||
|
|
||||||
|
Content
|
||||||
|
|
||||||
|
Links
|
||||||
|
|
||||||
|
Redirects
|
||||||
|
|
||||||
|
Indexability
|
||||||
|
|
||||||
|
Sitemaps
|
||||||
|
|
||||||
|
Ahrefs metrics
|
||||||
|
Word or phrase
|
||||||
|
|
||||||
|
URL
|
||||||
|
|
||||||
|
Advanced filter
|
||||||
|
Crawl history
|
||||||
|
Hide chart
|
||||||
|
12 Jan
|
||||||
|
13 Jan
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
All filter results
|
||||||
|
|
||||||
|
All filter results
|
||||||
|
2
|
||||||
|
|
||||||
|
Lost from filter results
|
||||||
|
1
|
||||||
|
|
||||||
|
Lost
|
||||||
|
0
|
||||||
|
|
||||||
|
Patches: Show all
|
||||||
|
|
||||||
|
Changes: Don't show
|
||||||
|
|
||||||
|
Columns
|
||||||
|
|
||||||
|
Export
|
||||||
|
PR
|
||||||
|
URL
|
||||||
|
Organic traffic
|
||||||
|
Depth
|
||||||
|
No. of content words
|
||||||
|
Title
|
||||||
|
Patch it
|
||||||
|
|
||||||
|
Batch AI
|
||||||
|
Meta description
|
||||||
|
Patch it
|
||||||
|
|
||||||
|
Batch AI
|
||||||
|
H1
|
||||||
|
Is indexable page
|
||||||
|
12
|
||||||
|
html
|
||||||
|
Admin Dashboard | QR Master | QR Master
|
||||||
|
https://www.qrmaster.net/newsletter
|
||||||
|
0
|
||||||
|
1
|
||||||
|
8
|
||||||
|
Admin Dashboard | QR Master | QR Master
|
||||||
|
Enter new title
|
||||||
|
Admin restricted area.
|
||||||
|
Enter new meta description
|
||||||
|
No
|
||||||
|
2
|
||||||
|
html
|
||||||
|
Post Not Found | QR Master
|
||||||
|
https://www.qrmaster.net/blog/3-body.png
|
||||||
|
0
|
||||||
|
2
|
||||||
|
6
|
||||||
|
Post Not Found | QR Master
|
||||||
|
Enter new title
|
||||||
|
Create dynamic QR codes, track scans, and scale campaigns with secure analytics.
|
||||||
|
Enter new meta description
|
||||||
|
No
|
||||||
|
Showing 2 of 2
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Issues
|
||||||
|
/
|
||||||
|
Meta description too short
|
||||||
|
|
||||||
|
Why and how to fix
|
||||||
|
|
||||||
|
Submit to IndexNow
|
||||||
|
|
||||||
|
Create new issue
|
||||||
|
|
||||||
|
All URLs
|
||||||
|
|
||||||
|
Pages
|
||||||
|
|
||||||
|
Resources
|
||||||
|
|
||||||
|
Content
|
||||||
|
|
||||||
|
Links
|
||||||
|
|
||||||
|
Redirects
|
||||||
|
|
||||||
|
Indexability
|
||||||
|
|
||||||
|
Sitemaps
|
||||||
|
|
||||||
|
Ahrefs metrics
|
||||||
|
Word or phrase
|
||||||
|
|
||||||
|
URL
|
||||||
|
|
||||||
|
Advanced filter
|
||||||
|
Crawl history
|
||||||
|
Hide chart
|
||||||
|
12 Jan
|
||||||
|
13 Jan
|
||||||
|
0
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
All filter results
|
||||||
|
|
||||||
|
All filter results
|
||||||
|
2
|
||||||
|
|
||||||
|
Lost from filter results
|
||||||
|
1
|
||||||
|
|
||||||
|
Lost
|
||||||
|
0
|
||||||
|
|
||||||
|
Patches: Show all
|
||||||
|
|
||||||
|
Changes: Don't show
|
||||||
|
|
||||||
|
Columns
|
||||||
|
|
||||||
|
Export
|
||||||
|
PR
|
||||||
|
URL
|
||||||
|
Organic traffic
|
||||||
|
HTTP status code
|
||||||
|
Depth
|
||||||
|
Meta description
|
||||||
|
Patch it
|
||||||
|
|
||||||
|
Batch AI
|
||||||
|
Meta description length
|
||||||
|
No. of meta descriptions
|
||||||
|
Is indexable page
|
||||||
|
12
|
||||||
|
html
|
||||||
|
Admin Dashboard | QR Master | QR Master
|
||||||
|
https://www.qrmaster.net/newsletter
|
||||||
|
0
|
||||||
|
200
|
||||||
|
1
|
||||||
|
Admin restricted area.
|
||||||
|
Enter new meta description
|
||||||
|
22
|
||||||
|
1
|
||||||
|
No
|
||||||
|
2
|
||||||
|
html
|
||||||
|
Post Not Found | QR Master
|
||||||
|
https://www.qrmaster.net/blog/3-body.png
|
||||||
|
0
|
||||||
|
200
|
||||||
|
2
|
||||||
|
Create dynamic QR codes, track scans, and scale campaigns with secure analytics.
|
||||||
|
Enter new meta description
|
||||||
|
80
|
||||||
|
1
|
||||||
|
No
|
||||||
|
Showing 2 of 2
|
||||||
|
|
@ -66,9 +66,44 @@ export default function MarketingLayout({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-white">
|
<div className="min-h-screen bg-white">
|
||||||
|
{/* Server-rendered navigation links for SEO (crawlers) - Placed first for priority */}
|
||||||
|
<div className="sr-only" aria-hidden="false">
|
||||||
|
<nav aria-label="Site Map">
|
||||||
|
<ul>
|
||||||
|
<li><a href="/">Home</a></li>
|
||||||
|
<li><a href="/pricing">Pricing</a></li>
|
||||||
|
<li><a href="/blog">Blog</a></li>
|
||||||
|
<li><a href="/faq">FAQ</a></li>
|
||||||
|
<li><a href="/login">Login</a></li>
|
||||||
|
<li><a href="/signup">Sign Up</a></li>
|
||||||
|
{/* Tools */}
|
||||||
|
<li><a href="/tools/url-qr-code">URL QR Code</a></li>
|
||||||
|
<li><a href="/tools/text-qr-code">Text QR Code</a></li>
|
||||||
|
<li><a href="/tools/wifi-qr-code">WiFi QR Code</a></li>
|
||||||
|
<li><a href="/tools/vcard-qr-code">vCard QR Code</a></li>
|
||||||
|
<li><a href="/tools/whatsapp-qr-code">WhatsApp QR Code</a></li>
|
||||||
|
<li><a href="/tools/email-qr-code">Email QR Code</a></li>
|
||||||
|
<li><a href="/tools/sms-qr-code">SMS QR Code</a></li>
|
||||||
|
<li><a href="/tools/phone-qr-code">Phone QR Code</a></li>
|
||||||
|
<li><a href="/tools/event-qr-code">Event QR Code</a></li>
|
||||||
|
<li><a href="/tools/geolocation-qr-code">Location QR Code</a></li>
|
||||||
|
<li><a href="/tools/facebook-qr-code">Facebook QR Code</a></li>
|
||||||
|
<li><a href="/tools/instagram-qr-code">Instagram QR Code</a></li>
|
||||||
|
<li><a href="/tools/twitter-qr-code">Twitter QR Code</a></li>
|
||||||
|
<li><a href="/tools/youtube-qr-code">YouTube QR Code</a></li>
|
||||||
|
<li><a href="/tools/tiktok-qr-code">TikTok QR Code</a></li>
|
||||||
|
<li><a href="/tools/crypto-qr-code">Crypto QR Code</a></li>
|
||||||
|
<li><a href="/tools/paypal-qr-code">PayPal QR Code</a></li>
|
||||||
|
<li><a href="/tools/zoom-qr-code">Zoom QR Code</a></li>
|
||||||
|
<li><a href="/tools/teams-qr-code">Teams QR Code</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
<header
|
<header
|
||||||
className="fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200 shadow-sm"
|
className="fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200 shadow-sm"
|
||||||
|
|
||||||
>
|
>
|
||||||
<nav className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl h-20 flex items-center justify-between">
|
<nav className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl h-20 flex items-center justify-between">
|
||||||
{/* Logo */}
|
{/* Logo */}
|
||||||
|
|
@ -239,7 +274,11 @@ export default function MarketingLayout({
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* Main Content */}
|
{/* Main Content */}
|
||||||
<main className="pt-20">{children}</main>
|
<main className="pt-20">
|
||||||
|
{/* Server-rendered navigation links for SEO (crawlers) */}
|
||||||
|
|
||||||
|
{children}
|
||||||
|
</main>
|
||||||
|
|
||||||
{/* Footer */}
|
{/* Footer */}
|
||||||
<Footer t={t} />
|
<Footer t={t} />
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ const blogPosts: Record<string, BlogPostData> = {
|
||||||
{
|
{
|
||||||
name: 'Access Analytics Dashboard',
|
name: 'Access Analytics Dashboard',
|
||||||
text: 'Navigate to Dashboard → Analytics to view real-time scan data, geographic distribution, and device breakdowns.',
|
text: 'Navigate to Dashboard → Analytics to view real-time scan data, geographic distribution, and device breakdowns.',
|
||||||
url: 'https://www.qrmaster.net/analytics',
|
url: 'https://www.qrmaster.net/signup',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
@ -145,7 +145,7 @@ const blogPosts: Record<string, BlogPostData> = {
|
||||||
|
|
||||||
<div class="bg-blue-50 p-6 rounded-lg my-8">
|
<div class="bg-blue-50 p-6 rounded-lg my-8">
|
||||||
<h4 class="text-xl font-bold mb-2">Start Tracking Today</h4>
|
<h4 class="text-xl font-bold mb-2">Start Tracking Today</h4>
|
||||||
<p>Sign up for QR Master to get access to our advanced <a href="/analytics" class="text-primary-600 hover:underline">analytics dashboard</a>. First 3 codes are free forever.</p>
|
<p>Sign up for QR Master to get access to our advanced <a href="/signup" class="text-primary-600 hover:underline">analytics dashboard</a>. First 3 codes are free forever.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>`,
|
</div>`,
|
||||||
},
|
},
|
||||||
|
|
@ -2437,10 +2437,10 @@ function truncateAtWord(text: string, maxLength: number): string {
|
||||||
export async function generateMetadata({ params }: { params: { slug: string } }): Promise<Metadata> {
|
export async function generateMetadata({ params }: { params: { slug: string } }): Promise<Metadata> {
|
||||||
const post = blogPosts[params.slug];
|
const post = blogPosts[params.slug];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (!post) {
|
if (!post) {
|
||||||
return {
|
notFound();
|
||||||
title: 'Post Not Found',
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const title = post.title;
|
const title = post.title;
|
||||||
|
|
@ -2479,25 +2479,19 @@ export async function generateMetadata({ params }: { params: { slug: string } })
|
||||||
card: 'summary_large_image',
|
card: 'summary_large_image',
|
||||||
images: [post.image],
|
images: [post.image],
|
||||||
},
|
},
|
||||||
|
robots: {
|
||||||
|
index: true,
|
||||||
|
follow: true,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
export default function BlogPostPage({ params }: { params: { slug: string } }) {
|
||||||
// Handle redirects for deprecated/legacy URLs
|
|
||||||
if (params.slug === 'vcard-qr-code-generator') {
|
|
||||||
permanentRedirect('/tools/vcard-qr-code');
|
// Prevent soft 404s for missing assets
|
||||||
}
|
if (params.slug.match(/\.(png|jpg|jpeg|gif|svg|ico|json|txt|xml)$/i)) {
|
||||||
if (params.slug === 'qr-code-restaurant-menu') {
|
notFound();
|
||||||
permanentRedirect('/tools/url-qr-code');
|
|
||||||
}
|
|
||||||
if (params.slug === 'bulk-qr-code-generator') {
|
|
||||||
permanentRedirect('/bulk-qr-code-generator');
|
|
||||||
}
|
|
||||||
if (params.slug === 'bulk-qr-codes-excel') {
|
|
||||||
permanentRedirect('/blog/bulk-qr-code-generator-excel');
|
|
||||||
}
|
|
||||||
if (params.slug === 'qr-code-small-business') {
|
|
||||||
permanentRedirect('/signup');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const post = blogPosts[params.slug];
|
const post = blogPosts[params.slug];
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs';
|
||||||
import { breadcrumbSchema } from '@/lib/schema';
|
import { breadcrumbSchema } from '@/lib/schema';
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: 'Bulk QR Code Generator - Create 1000s of QR Codes from Excel | QR Master',
|
title: 'Bulk QR Code Generator | Create from Excel | QR Master',
|
||||||
description: 'Generate hundreds of QR codes at once from CSV or Excel files. Create URLs, vCards, locations, phone numbers, and text QR codes in bulk. Perfect for products, events, inventory management.',
|
description: 'Generate hundreds of QR codes instantly from Excel/CSV. Create URLs, vCards, and text codes in bulk. Perfect for inventory, events, and product tagging.',
|
||||||
keywords: 'bulk qr code generator, batch qr code, qr code from excel, csv qr code generator, mass qr code generation, bulk vcard qr code, bulk qr codes free',
|
keywords: 'bulk qr code generator, batch qr code, qr code from excel, csv qr code generator, mass qr code generation, bulk vcard qr code, bulk qr codes free',
|
||||||
alternates: {
|
alternates: {
|
||||||
canonical: 'https://www.qrmaster.net/bulk-qr-code-generator',
|
canonical: 'https://www.qrmaster.net/bulk-qr-code-generator',
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@ import Breadcrumbs, { BreadcrumbItem } from '@/components/Breadcrumbs';
|
||||||
import { breadcrumbSchema } from '@/lib/schema';
|
import { breadcrumbSchema } from '@/lib/schema';
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: 'Dynamic QR Code Generator - Edit QR Codes Anytime | QR Master',
|
title: 'Dynamic QR Code Generator | Edit & Track QR | QR Master',
|
||||||
description: 'Create dynamic QR codes that can be edited after printing. Change destination URL, track scans, and update content without reprinting. Free dynamic QR code generator.',
|
description: 'Create editable dynamic QR codes. Update destination URLs, track scans, and manage content anytime without reprinting. Free generator with analytics.',
|
||||||
keywords: 'dynamic qr code generator, editable qr code, dynamic qr code, free dynamic qr code, qr code generator dynamic, best dynamic qr code generator',
|
keywords: 'dynamic qr code generator, editable qr code, dynamic qr code, free dynamic qr code, qr code generator dynamic, best dynamic qr code generator',
|
||||||
alternates: {
|
alternates: {
|
||||||
canonical: 'https://www.qrmaster.net/dynamic-qr-code-generator',
|
canonical: 'https://www.qrmaster.net/dynamic-qr-code-generator',
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import type { Metadata } from 'next';
|
||||||
import NewsletterClient from './NewsletterClient';
|
import NewsletterClient from './NewsletterClient';
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: 'Admin Dashboard | QR Master',
|
title: 'Newsletter Admin | QR Master',
|
||||||
description: 'Admin restricted area.',
|
description: 'Admin restricted area.',
|
||||||
robots: {
|
robots: {
|
||||||
index: false,
|
index: false,
|
||||||
|
|
|
||||||
|
|
@ -154,7 +154,7 @@ export default function QRCodeTrackingPage() {
|
||||||
position: 3,
|
position: 3,
|
||||||
name: 'Monitor Analytics',
|
name: 'Monitor Analytics',
|
||||||
text: 'View real-time scan data including location, device, and time patterns in your dashboard',
|
text: 'View real-time scan data including location, device, and time patterns in your dashboard',
|
||||||
url: 'https://www.qrmaster.net/analytics',
|
url: 'https://www.qrmaster.net/signup',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'@type': 'HowToStep',
|
'@type': 'HowToStep',
|
||||||
|
|
|
||||||
|
|
@ -66,9 +66,44 @@ export default function MarketingLayout({
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-white">
|
<div className="min-h-screen bg-white">
|
||||||
|
{/* Server-rendered navigation links for SEO (crawlers) - Placed first for priority */}
|
||||||
|
<div className="sr-only" aria-hidden="false">
|
||||||
|
<nav aria-label="Seitenübersicht">
|
||||||
|
<ul>
|
||||||
|
<li><a href="/">Startseite</a></li>
|
||||||
|
<li><a href="/pricing">Preise</a></li>
|
||||||
|
<li><a href="/blog">Blog</a></li>
|
||||||
|
<li><a href="/faq">FAQ</a></li>
|
||||||
|
<li><a href="/login">Anmelden</a></li>
|
||||||
|
<li><a href="/signup">Registrieren</a></li>
|
||||||
|
{/* Tools */}
|
||||||
|
<li><a href="/tools/url-qr-code">URL QR Code</a></li>
|
||||||
|
<li><a href="/tools/text-qr-code">Text QR Code</a></li>
|
||||||
|
<li><a href="/tools/wifi-qr-code">WLAN QR Code</a></li>
|
||||||
|
<li><a href="/tools/vcard-qr-code">vCard QR Code</a></li>
|
||||||
|
<li><a href="/tools/whatsapp-qr-code">WhatsApp QR Code</a></li>
|
||||||
|
<li><a href="/tools/email-qr-code">Email QR Code</a></li>
|
||||||
|
<li><a href="/tools/sms-qr-code">SMS QR Code</a></li>
|
||||||
|
<li><a href="/tools/phone-qr-code">Telefon QR Code</a></li>
|
||||||
|
<li><a href="/tools/event-qr-code">Event QR Code</a></li>
|
||||||
|
<li><a href="/tools/geolocation-qr-code">Standort QR Code</a></li>
|
||||||
|
<li><a href="/tools/facebook-qr-code">Facebook QR Code</a></li>
|
||||||
|
<li><a href="/tools/instagram-qr-code">Instagram QR Code</a></li>
|
||||||
|
<li><a href="/tools/twitter-qr-code">Twitter QR Code</a></li>
|
||||||
|
<li><a href="/tools/youtube-qr-code">YouTube QR Code</a></li>
|
||||||
|
<li><a href="/tools/tiktok-qr-code">TikTok QR Code</a></li>
|
||||||
|
<li><a href="/tools/crypto-qr-code">Crypto QR Code</a></li>
|
||||||
|
<li><a href="/tools/paypal-qr-code">PayPal QR Code</a></li>
|
||||||
|
<li><a href="/tools/zoom-qr-code">Zoom QR Code</a></li>
|
||||||
|
<li><a href="/tools/teams-qr-code">Teams QR Code</a></li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
<header
|
<header
|
||||||
className="fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200 shadow-sm"
|
className="fixed top-0 left-0 right-0 z-50 bg-white/80 backdrop-blur-md border-b border-slate-200 shadow-sm"
|
||||||
|
|
||||||
>
|
>
|
||||||
<nav className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl h-20 flex items-center justify-between">
|
<nav className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl h-20 flex items-center justify-between">
|
||||||
{/* Logo */}
|
{/* Logo */}
|
||||||
|
|
@ -239,7 +274,9 @@ export default function MarketingLayout({
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
{/* Main Content */}
|
{/* Main Content */}
|
||||||
<main className="pt-20">{children}</main>
|
<main className="pt-20">
|
||||||
|
{children}
|
||||||
|
</main>
|
||||||
|
|
||||||
{/* Footer */}
|
{/* Footer */}
|
||||||
<Footer t={t} />
|
<Footer t={t} />
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ export default function robots(): MetadataRoute.Robots {
|
||||||
'/dashboard/',
|
'/dashboard/',
|
||||||
'/create/',
|
'/create/',
|
||||||
'/settings/',
|
'/settings/',
|
||||||
|
'/newsletter/',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
sitemap: `${baseUrl}/sitemap.xml`,
|
sitemap: `${baseUrl}/sitemap.xml`,
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,9 @@ export function Footer({ variant = 'marketing', t }: FooterProps) {
|
||||||
<li><Link href="/#pricing" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.full_pricing}</Link></li>
|
<li><Link href="/#pricing" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.full_pricing}</Link></li>
|
||||||
<li><Link href="/faq" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.all_questions}</Link></li>
|
<li><Link href="/faq" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.all_questions}</Link></li>
|
||||||
<li><Link href="/blog" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.all_articles}</Link></li>
|
<li><Link href="/blog" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.all_articles}</Link></li>
|
||||||
|
<li><Link href="/bulk-qr-code-generator" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>Bulk QR Generator</Link></li>
|
||||||
<li><Link href="/signup" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.get_started}</Link></li>
|
<li><Link href="/signup" className={isDashboard ? 'hover:text-primary-600' : 'hover:text-white'}>{translations.get_started}</Link></li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,16 @@ export function organizationSchema() {
|
||||||
name: 'QR Master Free',
|
name: 'QR Master Free',
|
||||||
applicationCategory: 'BusinessApplication',
|
applicationCategory: 'BusinessApplication',
|
||||||
operatingSystem: 'Web Browser',
|
operatingSystem: 'Web Browser',
|
||||||
|
offers: {
|
||||||
|
'@type': 'Offer',
|
||||||
|
price: '0',
|
||||||
|
priceCurrency: 'EUR',
|
||||||
|
},
|
||||||
|
aggregateRating: {
|
||||||
|
'@type': 'AggregateRating',
|
||||||
|
ratingValue: '4.8',
|
||||||
|
ratingCount: '1250',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -97,6 +107,16 @@ export function organizationSchema() {
|
||||||
name: 'QR Master Pro',
|
name: 'QR Master Pro',
|
||||||
applicationCategory: 'BusinessApplication',
|
applicationCategory: 'BusinessApplication',
|
||||||
operatingSystem: 'Web Browser',
|
operatingSystem: 'Web Browser',
|
||||||
|
offers: {
|
||||||
|
'@type': 'Offer',
|
||||||
|
price: '9',
|
||||||
|
priceCurrency: 'EUR',
|
||||||
|
},
|
||||||
|
aggregateRating: {
|
||||||
|
'@type': 'AggregateRating',
|
||||||
|
ratingValue: '4.9',
|
||||||
|
ratingCount: '850',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue