SEO: compare/guide pSEO pages + internal links + intent differentiation

This commit is contained in:
Timo Knuth
2026-06-22 13:22:11 +02:00
parent 0866c200a0
commit 22a987029b
22 changed files with 9425 additions and 8218 deletions

View File

@@ -11,7 +11,7 @@ import { useState, useEffect } from 'react';
const PRODUCT_HUNT_URL =
'https://www.producthunt.com/products/qr-master-2?launch=qr-master-3';
const PRODUCT_HUNT_BADGE_URL =
'https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1155554&theme=neutral&t=1779882938098';
'/producthunt-featured.svg';
const FlippingCard = ({ front, back, delay }: { front: any, back: any, delay: number }) => {
const [isFlipped, setIsFlipped] = useState(false);

View File

@@ -256,8 +256,7 @@ export const InstantGenerator: React.FC<InstantGeneratorProps> = ({ t }) => {
<path d="M0 50 Q 40 80 70 30 T 100 50" fill="none" stroke="url(#gradient2)" strokeWidth="0.8" className="opacity-60" />
<path d="M0 0 Q 30 60 60 20 T 100 80" fill="none" stroke="url(#gradient1)" strokeWidth="0.6" className="opacity-40" />
</svg>
<div className="absolute inset-0 bg-[url('https://grainy-gradients.vercel.app/noise.svg')] opacity-15 brightness-100 contrast-150 mix-blend-overlay"></div>
</div>
</div>
{/* Decorative Orbs */}
<div className="absolute -top-20 -right-20 w-64 h-64 bg-purple-200/30 rounded-full blur-3xl animate-blob"></div>
@@ -295,4 +294,4 @@ export const InstantGenerator: React.FC<InstantGeneratorProps> = ({ t }) => {
</div>
</section>
);
};
};

View File

@@ -13,10 +13,12 @@ interface Props {
function StarRating({ rating }: { rating: number }) {
return (
<div className="flex gap-0.5" aria-label={`${rating} out of 5 stars`}>
<div className="flex gap-0.5" role="img" aria-label={`${rating} out of 5 stars`}>
{[...Array(5)].map((_, i) => (
<Star
key={i}
aria-hidden="true"
focusable="false"
className={`w-4 h-4 ${i < rating ? 'fill-yellow-400 text-yellow-400' : 'fill-gray-200 text-gray-200'}`}
/>
))}
@@ -46,7 +48,7 @@ function TestimonialCard({ testimonial }: { testimonial: Testimonial }) {
</span>
)}
{testimonial.author.location && (
<span className="text-xs text-gray-400 block">{testimonial.author.location}</span>
<span className="text-xs text-gray-600 block">{testimonial.author.location}</span>
)}
</div>
</div>

View File

@@ -18,27 +18,27 @@ export function Footer({ variant = 'marketing', t }: FooterProps) {
<footer className={`${isDashboard ? 'bg-gray-50 text-gray-600 border-t border-gray-200 mt-12' : 'bg-gray-900 text-white mt-20'} py-12`}>
<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>
<div>
<Link href="/" className="flex items-center space-x-2 mb-4 hover:opacity-80 transition-opacity">
<img src="/logo.svg" alt="QR Master Logo" className="w-[68px] h-[68px] rounded-lg object-cover" />
<img src="/logo.svg" alt="" className="w-[68px] h-[68px] rounded-lg object-cover" />
<span className={`text-xl font-bold ${isDashboard ? 'text-gray-900' : ''}`}>QR Master</span>
</Link>
<p className={isDashboard ? 'text-gray-500' : 'text-gray-400'}>
{translations.tagline}
</p>
{!isDashboard && (
<div className="flex space-x-4 mt-6">
<a href="https://www.linkedin.com/in/qr-master-44b6863a2/" target="_blank" rel="noopener noreferrer" className="text-gray-400 hover:text-white transition-colors">
<Linkedin className="w-5 h-5" />
</a>
<a href="https://x.com/TIMO_QRMASTER" target="_blank" rel="noopener noreferrer" className="text-gray-400 hover:text-white transition-colors">
<Twitter className="w-5 h-5" />
</a>
<a href="https://www.instagram.com/qrmaster_net/" target="_blank" rel="noopener noreferrer" className="text-gray-400 hover:text-white transition-colors">
<Instagram className="w-5 h-5" />
</a>
</div>
)}
{!isDashboard && (
<div className="flex space-x-4 mt-6">
<a href="https://www.linkedin.com/in/qr-master-44b6863a2/" target="_blank" rel="noopener noreferrer" aria-label="QR Master on LinkedIn" className="text-gray-400 hover:text-white transition-colors">
<Linkedin className="w-5 h-5" aria-hidden="true" focusable="false" />
</a>
<a href="https://x.com/TIMO_QRMASTER" target="_blank" rel="noopener noreferrer" aria-label="QR Master on X" className="text-gray-400 hover:text-white transition-colors">
<Twitter className="w-5 h-5" aria-hidden="true" focusable="false" />
</a>
<a href="https://www.instagram.com/qrmaster_net/" target="_blank" rel="noopener noreferrer" aria-label="QR Master on Instagram" className="text-gray-400 hover:text-white transition-colors">
<Instagram className="w-5 h-5" aria-hidden="true" focusable="false" />
</a>
</div>
)}
</div>
<div>