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>