SEO: compare/guide pSEO pages + internal links + intent differentiation
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user