fix: complete Technical SEO and Semantic HTML improvements across all routes and layout
This commit is contained in:
parent
27ac668e42
commit
4dfe36b882
159
frontend/application/app/HomeClient.tsx
Normal file
159
frontend/application/app/HomeClient.tsx
Normal file
@ -0,0 +1,159 @@
|
||||
"use client";
|
||||
|
||||
import { useEffect, useState } from "react";
|
||||
import Hero from "../components/Hero";
|
||||
import SmartAdvisor from "../components/SmartAdvisor";
|
||||
import FeaturedProducts from "../components/FeaturedProducts";
|
||||
import VetGallery from "../components/VetGallery";
|
||||
import Link from 'next/link';
|
||||
import { toPersian } from "../lib/utils";
|
||||
import { useSettingsStore } from "../lib/store/settingsStore";
|
||||
import api from "../lib/services/api";
|
||||
|
||||
export default function HomeClient() {
|
||||
const getText = useSettingsStore(state => state.getText);
|
||||
const [data, setData] = useState<any>(null);
|
||||
|
||||
useEffect(() => {
|
||||
api.get('/home')
|
||||
.then(res => setData(res.data))
|
||||
.catch(err => console.error('Home data fetch error:', err));
|
||||
}, []);
|
||||
|
||||
const banners = data?.heroBanners || [];
|
||||
const testimonials = data?.vetTestimonials || [];
|
||||
const rules = data?.smartAdvisorRules || [];
|
||||
|
||||
return (
|
||||
<>
|
||||
<Hero banners={banners} />
|
||||
<SmartAdvisor rules={rules} />
|
||||
<FeaturedProducts />
|
||||
<VetGallery testimonials={testimonials} />
|
||||
|
||||
{/* Navigation to Sections */}
|
||||
<section className="py-12 bg-medical-gray-50 border-y border-medical-gray-100 font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid md:grid-cols-2 gap-8">
|
||||
{/* Specialty Shop Card */}
|
||||
<Link
|
||||
href="/shop"
|
||||
className="bg-gradient-to-br from-blue-50/60 to-canina-blue/5 p-12 rounded-[2.5rem] border border-blue-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
>
|
||||
<div className="absolute -top-12 -left-12 w-32 h-32 bg-canina-blue/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
|
||||
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-canina-blue transition-colors font-lalezar tracking-wide">
|
||||
{getText('nav_card_shop_title', "فروشگاه تخصصی")}
|
||||
</h3>
|
||||
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
|
||||
{getText('nav_card_shop_desc', "دسترسی به تمامی محصولات بر اساس علائم بالینی و نیازهای پت شما.")}
|
||||
</p>
|
||||
<div className="flex items-center gap-2 text-canina-blue font-black tracking-widest uppercase text-xs font-vazir">
|
||||
{getText('nav_card_shop_cta', "کاتالوگ کامل محصولات")}
|
||||
<span className="text-lg group-hover:-translate-x-1 transition-transform">←</span>
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
{/* Scientific Wiki Card */}
|
||||
<Link
|
||||
href="/wiki"
|
||||
className="bg-gradient-to-br from-emerald-50/60 to-green-50/20 p-12 rounded-[2.5rem] border border-emerald-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
>
|
||||
<div className="absolute -top-12 -left-12 w-32 h-32 bg-emerald-500/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
|
||||
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-emerald-700 transition-colors font-lalezar tracking-wide">
|
||||
{getText('nav_card_wiki_title', "دانشنامه علمی")}
|
||||
</h3>
|
||||
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
|
||||
{getText('nav_card_wiki_desc', "آشنایی با ترکیبات نایاب و استانداردهای دارویی محصولات آلمانی کانینا.")}
|
||||
</p>
|
||||
<div className="flex items-center gap-2 text-emerald-700 font-black tracking-widest uppercase text-xs font-vazir">
|
||||
{getText('nav_card_wiki_cta', "مطالعه مقالات تخصصی")}
|
||||
<span className="text-lg group-hover:-translate-x-1 transition-transform">←</span>
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* About Section Teaser */}
|
||||
<section className="py-16 bg-white overflow-hidden font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid lg:grid-cols-2 gap-16 lg:gap-24 items-center">
|
||||
<div className="relative">
|
||||
<div className="absolute -top-10 -right-10 w-40 h-40 bg-canina-blue/5 rounded-full blur-3xl" />
|
||||
<img
|
||||
src="/assets/images/regenerated_image_1779109861747.png"
|
||||
alt="آزمایشگاه تخصصی تولید مکملهای دارویی کانینا آلمان"
|
||||
className="rounded-[3rem] shadow-2xl relative z-10 grayscale-[10%]"
|
||||
/>
|
||||
<div className="absolute -bottom-6 -left-6 bg-canina-blue text-white p-8 rounded-[2rem] shadow-xl z-20">
|
||||
<div className="text-4xl font-black mb-1 font-lalezar tracking-wide">{getText('quality', "کیفیت")}</div>
|
||||
<div className="text-xs uppercase tracking-widest font-bold opacity-80 font-vazir">{getText('ultra_pharmaceutical', "استانداردهای فوقدارویی")}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-4 font-vazir">
|
||||
{getText('about_label', "میراث ما از آلمان")}
|
||||
</div>
|
||||
<h2 className="text-3xl lg:text-5xl font-black text-medical-gray-900 leading-[1.2] mb-12 font-lalezar tracking-wide">
|
||||
{getText('about_title', "چرا برند آلمانی Canina مرجع دامپزشکان است؟")}
|
||||
</h2>
|
||||
<div className="space-y-6">
|
||||
{[
|
||||
{ title: getText('about_item1_title', "مواد اولیه نایاب"), desc: getText('about_item1_desc', "استفاده از پودر صدف لبسبز اصل نیوزیلند و مواد ارگانیک با گرید دارویی.") },
|
||||
{ title: getText('about_item2_title', "فاقد مواد نگهدارنده"), desc: getText('about_item2_desc', "تمامی محصولات ۱۰۰٪ طبیعی و فاقد رنگهای مصنوعی و طعمدهندههای شیمیایی هستند.") },
|
||||
{ title: getText('about_item3_title', "تاییدیه اروپا"), desc: getText('about_item3_desc', "مطابق با سختگیرانهترین استانداردهای ایمنی مواد غذایی و دارویی در اتحادیه اروپا.") }
|
||||
].map((item, idx) => (
|
||||
<div key={idx} className="flex gap-4 items-center">
|
||||
<div className="w-12 h-12 rounded-2xl bg-medical-gray-50 flex items-center justify-center flex-shrink-0 text-canina-blue font-black font-lalezar text-xl shadow-sm">
|
||||
{toPersian(idx + 1)}
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="text-lg font-bold text-medical-gray-900 mb-1 font-shabnam">{item.title}</h4>
|
||||
<p className="text-sm text-medical-gray-500 leading-relaxed font-medium font-sans">{item.desc}</p>
|
||||
{idx === 0 && (
|
||||
<span className="text-[10px] text-slate-400 mt-1 block">
|
||||
* تهیه شده با بالاترین استانداردهای دارویی انسان - کاملاً بیخطر در صورت لیسیده شدن توسط حیوان.
|
||||
</span>
|
||||
)}
|
||||
{idx === 2 && (
|
||||
<span className="text-[10px] text-slate-400 mt-1 block">
|
||||
* تاییدیه رسمی ایمنی مواد غذایی و دارویی (HACCP & IFS) از اتحادیه اروپا.
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Call to Action */}
|
||||
<section className="bg-canina-blue py-12 relative overflow-hidden font-sans">
|
||||
<div className="absolute inset-0 opacity-10">
|
||||
<div className="grid grid-cols-10 h-full w-full">
|
||||
{Array.from({length: 100}).map((_, i) => (
|
||||
<div key={i} className="border border-white/20" />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div className="max-w-4xl mx-auto px-4 text-center relative z-10">
|
||||
<h2 className="text-3xl lg:text-5xl font-black text-white mb-8 leading-tight font-lalezar tracking-wide">
|
||||
{getText('cta_title', "میخواهید بدانید کدام محصول برای پت شما مناسبتر است؟")}
|
||||
</h2>
|
||||
<p className="text-white/80 text-lg mb-10 leading-relaxed font-shabnam">
|
||||
{getText('cta_desc', "تیم متخصص دامپزشکی کانینا ایران آماده پاسخگویی به سوالات شماست.")}
|
||||
</p>
|
||||
<div className="flex flex-wrap justify-center gap-4">
|
||||
<button className="bg-white text-canina-blue px-12 py-5 rounded-full font-black text-xl hover:scale-105 transition-transform shadow-2xl shadow-black/20 font-shabnam">
|
||||
{getText('cta_btn_primary', "دریافت رژیم مکمل رایگان")}
|
||||
</button>
|
||||
<Link
|
||||
href="/shop"
|
||||
className="bg-transparent border-2 border-white text-white px-12 py-5 rounded-full font-black text-xl hover:bg-white hover:text-canina-blue transition-all font-shabnam"
|
||||
>
|
||||
{getText('cta_btn_secondary', "پروانه دامپزشکی و اصالت کالا")}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
}
|
||||
@ -2,8 +2,19 @@ import type { Metadata } from "next";
|
||||
import { ShieldCheck, History, Award, CheckCircle } from "lucide-react";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "درباره ما",
|
||||
description: "داستان کانینا ایران و میراث ۴۰ ساله شرکت Canina pharma GmbH آلمان در تولید مکملهای فوقتخصصی دامپزشکی.",
|
||||
title: "درباره ما - میراث ۴۰ ساله کانیتا آلمان در ایران",
|
||||
description: "داستان کانینا ایران و میراث ۴۰ ساله شرکت Canina pharma GmbH آلمان در تولید مکملهای فوقتخصصی دامپزشکی با گرید دارویی اختصاصی.",
|
||||
alternates: {
|
||||
canonical: "/about",
|
||||
},
|
||||
openGraph: {
|
||||
title: "درباره ما - کانینا ایران",
|
||||
description: "داستان کانینا ایران و میراث ۴۰ ساله شرکت Canina pharma GmbH آلمان در تولید مکملهای فوقتخصصی دامپزشکی.",
|
||||
url: "https://canina-iran.com/about",
|
||||
siteName: "کانینا ایران",
|
||||
locale: "fa_IR",
|
||||
type: "website",
|
||||
}
|
||||
};
|
||||
|
||||
export default function AboutPage() {
|
||||
|
||||
@ -26,14 +26,30 @@ async function getBlog(slug: string) {
|
||||
}
|
||||
}
|
||||
|
||||
export const revalidate = 60; // ensure SSR dynamic revalidation works correctly
|
||||
|
||||
export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
|
||||
const { slug } = await params;
|
||||
const blog = await getBlog(slug);
|
||||
if (!blog) return { title: 'مقاله یافت نشد' };
|
||||
if (!blog) return { title: 'مقاله یافت نشد | کانینا ایران' };
|
||||
|
||||
const title = `${blog.title} | مجله سلامت کانینا`;
|
||||
const description = blog.excerpt.substring(0, 150).trim();
|
||||
|
||||
return {
|
||||
title: blog.title,
|
||||
description: blog.excerpt,
|
||||
title,
|
||||
description,
|
||||
alternates: {
|
||||
canonical: `/blog/${slug}`,
|
||||
},
|
||||
openGraph: {
|
||||
title,
|
||||
description,
|
||||
images: [blog.image],
|
||||
url: `/blog/${slug}`,
|
||||
siteName: "کانینا ایران",
|
||||
type: "article",
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -1,9 +1,20 @@
|
||||
import BlogPage from "../../components/BlogPage";
|
||||
import BlogPage from "../../components/BlogPage";
|
||||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'مجله سلامت حیوانات خانگی',
|
||||
description: 'آخرین مقالات، آموزشها و اخبار علمی در زمینه نگهداری، تغذیه و سلامت سگ و گربه.',
|
||||
title: "مجله سلامت حیوانات خانگی و مقالات علمی - کانینا ایران",
|
||||
description: "آخرین مقالات، آموزشهای دامپزشکی و اخبار علمی روز دنیا در زمینه نگهداری، تغذیه تخصصی و سلامت سگ و گربه.",
|
||||
alternates: {
|
||||
canonical: "/blog",
|
||||
},
|
||||
openGraph: {
|
||||
title: "مجله سلامت حیوانات خانگی - کانینا ایران",
|
||||
description: "آخرین مقالات، آموزشها و اخبار علمی در زمینه نگهداری، تغذیه و سلامت سگ و گربه.",
|
||||
url: "https://canina-iran.com/blog",
|
||||
siteName: "کانینا ایران",
|
||||
locale: "fa_IR",
|
||||
type: "website",
|
||||
}
|
||||
};
|
||||
|
||||
async function getBlogs() {
|
||||
|
||||
@ -2,8 +2,19 @@ import type { Metadata } from "next";
|
||||
import { Mail, Phone, MapPin, Clock, Send } from "lucide-react";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "تماس با ما",
|
||||
description: "راههای ارتباطی با نمایندگی رسمی مکملهای دامپزشکی کانینا در ایران.",
|
||||
title: "تماس با ما - نمایندگی رسمی مکملهای کانینا آلمان در ایران",
|
||||
description: "راههای ارتباطی، تلفن تماس ویژه، آدرس دفتر مرکزی و فرم تماس مستقیم با نمایندگی انحصاری کانیتا آلمان در ایران.",
|
||||
alternates: {
|
||||
canonical: "/contact",
|
||||
},
|
||||
openGraph: {
|
||||
title: "تماس با ما - کانینا ایران",
|
||||
description: "راههای ارتباطی با نمایندگی رسمی مکملهای دامپزشکی کانینا در ایران.",
|
||||
url: "https://canina-iran.com/contact",
|
||||
siteName: "کانینا ایران",
|
||||
locale: "fa_IR",
|
||||
type: "website",
|
||||
}
|
||||
};
|
||||
|
||||
export default function ContactPage() {
|
||||
@ -47,7 +58,7 @@ export default function ContactPage() {
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="text-xs font-black text-medical-gray-400 uppercase tracking-wider mb-1">پست الکترونیک</h4>
|
||||
<p className="text-sm font-black text-medical-gray-900">info@canino-iran.com</p>
|
||||
<p className="text-sm font-black text-medical-gray-900">info@canina-iran.com</p>
|
||||
<p className="text-xs text-medical-gray-500 font-bold">پاسخگویی در کمتر از ۲۴ ساعت کاری</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -1,27 +1,30 @@
|
||||
import type { Metadata } from 'next';
|
||||
import type { Metadata } from 'next';
|
||||
import './globals.css';
|
||||
import ClientLayout from './ClientLayout';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || 'https://canino-iran.com'),
|
||||
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || 'https://canina-iran.com'),
|
||||
title: {
|
||||
template: '%s | کانینا ایران',
|
||||
default: 'کانینا ایران - مکملهای درمانی حیوانات خانگی',
|
||||
default: 'کانینا ایران - مکملهای درمانی حیوانات خانگی با گرید دارویی اختصاصی',
|
||||
},
|
||||
description: 'تدارک هوشمندانه سلامت برای همراهان وفادار شما. کانینا ایران واردکننده انحصاری مکملهای درمانی با گرید دارویی اختصاصی از آلمان.',
|
||||
keywords: ['مکمل حیوانات خانگی', 'مکمل سگ', 'مکمل گربه', 'کانینا', 'داروی حیوانات', 'Canina Iran'],
|
||||
authors: [{ name: 'Canina Iran' }],
|
||||
creator: 'Canina Iran',
|
||||
publisher: 'Canina Iran',
|
||||
alternates: {
|
||||
canonical: './',
|
||||
},
|
||||
formatDetection: {
|
||||
email: false,
|
||||
address: false,
|
||||
telephone: false,
|
||||
},
|
||||
openGraph: {
|
||||
title: 'کانینا ایران - مکملهای درمانی حیوانات خانگی',
|
||||
title: 'کانینا ایران - مکملهای درمانی حیوانات خانگی با گرید دارویی اختصاصی',
|
||||
description: 'واردکننده انحصاری مکملهای درمانی با گرید دارویی اختصاصی از آلمان',
|
||||
url: 'https://canino-iran.com',
|
||||
url: 'https://canina-iran.com',
|
||||
siteName: 'کانینا ایران',
|
||||
locale: 'fa_IR',
|
||||
type: 'website',
|
||||
@ -53,13 +56,13 @@ export default function RootLayout({
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'Organization',
|
||||
name: 'کانینا ایران',
|
||||
url: 'https://canino-iran.com',
|
||||
url: 'https://canina-iran.com',
|
||||
logo: 'https://canina.de/media/fb/d5/47/1683116813/Logo.png',
|
||||
contactPoint: {
|
||||
'@type': 'ContactPoint',
|
||||
telephone: '+98-21-88884444',
|
||||
contactType: 'customer service',
|
||||
email: 'info@canino-iran.com',
|
||||
email: 'info@canina-iran.com',
|
||||
areaServed: 'IR',
|
||||
availableLanguage: 'Persian'
|
||||
}
|
||||
|
||||
@ -1,149 +1,30 @@
|
||||
"use client";
|
||||
import type { Metadata } from "next";
|
||||
import HomeClient from "./HomeClient";
|
||||
|
||||
import { useEffect, useState } from "react";
|
||||
import Hero from "../components/Hero";
|
||||
import SmartAdvisor from "../components/SmartAdvisor";
|
||||
import FeaturedProducts from "../components/FeaturedProducts";
|
||||
import VetGallery from "../components/VetGallery";
|
||||
import Link from 'next/link';
|
||||
import { toPersian } from "../lib/utils";
|
||||
import { useSettingsStore } from "../lib/store/settingsStore";
|
||||
import api from "../lib/services/api";
|
||||
export const metadata: Metadata = {
|
||||
title: "کانینا ایران - مکملهای درمانی حیوانات خانگی با گرید دارویی اختصاصی",
|
||||
description: "تدارک هوشمندانه سلامت برای همراهان وفادار شما. کانینا ایران واردکننده انحصاری مکملهای درمانی با گرید دارویی اختصاصی از آلمان با پروانه رسمی دامپزشکی.",
|
||||
alternates: {
|
||||
canonical: "/",
|
||||
},
|
||||
openGraph: {
|
||||
title: "کانینا ایران - مکملهای درمانی حیوانات خانگی با گرید دارویی اختصاصی",
|
||||
description: "واردکننده انحصاری مکملهای درمانی با گرید دارویی اختصاصی از آلمان",
|
||||
url: "https://canina-iran.com",
|
||||
siteName: "کانینا ایران",
|
||||
locale: "fa_IR",
|
||||
type: "website",
|
||||
images: [
|
||||
{
|
||||
url: "/assets/images/regenerated_image_1779109861747.png",
|
||||
width: 1200,
|
||||
height: 630,
|
||||
alt: "کانینا ایران - مکملهای درمانی حیوانات خانگی",
|
||||
}
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
export default function Home() {
|
||||
const getText = useSettingsStore(state => state.getText);
|
||||
const [data, setData] = useState<any>(null);
|
||||
|
||||
useEffect(() => {
|
||||
api.get('/home')
|
||||
.then(res => setData(res.data))
|
||||
.catch(err => console.error('Home data fetch error:', err));
|
||||
}, []);
|
||||
|
||||
const banners = data?.heroBanners || [];
|
||||
const testimonials = data?.vetTestimonials || [];
|
||||
const rules = data?.smartAdvisorRules || [];
|
||||
|
||||
return (
|
||||
<>
|
||||
<Hero banners={banners} />
|
||||
<SmartAdvisor rules={rules} />
|
||||
<FeaturedProducts />
|
||||
<VetGallery testimonials={testimonials} />
|
||||
|
||||
{/* Navigation to Sections */}
|
||||
<section className="py-12 bg-medical-gray-50 border-y border-medical-gray-100 font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid md:grid-cols-2 gap-8">
|
||||
{/* Specialty Shop Card */}
|
||||
<Link
|
||||
href="/shop"
|
||||
className="bg-gradient-to-br from-blue-50/60 to-canina-blue/5 p-12 rounded-[2.5rem] border border-blue-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
>
|
||||
<div className="absolute -top-12 -left-12 w-32 h-32 bg-canina-blue/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
|
||||
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-canina-blue transition-colors font-lalezar tracking-wide">
|
||||
{getText('nav_card_shop_title', "فروشگاه تخصصی")}
|
||||
</h3>
|
||||
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
|
||||
{getText('nav_card_shop_desc', "دسترسی به تمامی محصولات بر اساس علائم بالینی و نیازهای پت شما.")}
|
||||
</p>
|
||||
<div className="flex items-center gap-2 text-canina-blue font-black tracking-widest uppercase text-xs font-vazir">
|
||||
{getText('nav_card_shop_cta', "کاتالوگ کامل محصولات")}
|
||||
<span className="text-lg group-hover:-translate-x-1 transition-transform">←</span>
|
||||
</div>
|
||||
</Link>
|
||||
|
||||
{/* Scientific Wiki Card */}
|
||||
<Link
|
||||
href="/wiki"
|
||||
className="bg-gradient-to-br from-emerald-50/60 to-green-50/20 p-12 rounded-[2.5rem] border border-emerald-100/60 shadow-md hover:shadow-2xl hover:-translate-y-2 transition-all cursor-pointer group block relative overflow-hidden"
|
||||
>
|
||||
<div className="absolute -top-12 -left-12 w-32 h-32 bg-emerald-500/5 rounded-full blur-2xl group-hover:scale-150 transition-transform duration-700" />
|
||||
<h3 className="text-3xl font-black text-medical-gray-900 mb-4 group-hover:text-emerald-700 transition-colors font-lalezar tracking-wide">
|
||||
{getText('nav_card_wiki_title', "دانشنامه علمی")}
|
||||
</h3>
|
||||
<p className="text-medical-gray-600 mb-8 leading-relaxed font-shabnam">
|
||||
{getText('nav_card_wiki_desc', "آشنایی با ترکیبات نایاب و استانداردهای دارویی محصولات آلمانی کانینا.")}
|
||||
</p>
|
||||
<div className="flex items-center gap-2 text-emerald-700 font-black tracking-widest uppercase text-xs font-vazir">
|
||||
{getText('nav_card_wiki_cta', "مطالعه مقالات تخصصی")}
|
||||
<span className="text-lg group-hover:-translate-x-1 transition-transform">←</span>
|
||||
</div>
|
||||
</Link>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* About Section Teaser */}
|
||||
<section className="py-16 bg-white overflow-hidden font-sans">
|
||||
<div className="max-w-7xl mx-auto px-4 grid lg:grid-cols-2 gap-16 lg:gap-24 items-center">
|
||||
<div className="relative">
|
||||
<div className="absolute -top-10 -right-10 w-40 h-40 bg-canina-blue/5 rounded-full blur-3xl" />
|
||||
<img
|
||||
src="/assets/images/regenerated_image_1779109861747.png"
|
||||
alt="Laboratory"
|
||||
className="rounded-[3rem] shadow-2xl relative z-10 grayscale-[10%]"
|
||||
/>
|
||||
<div className="absolute -bottom-6 -left-6 bg-canina-blue text-white p-8 rounded-[2rem] shadow-xl z-20">
|
||||
<div className="text-4xl font-black mb-1 font-lalezar tracking-wide">{getText('quality', "کیفیت")}</div>
|
||||
<div className="text-xs uppercase tracking-widest font-bold opacity-80 font-vazir">{getText('ultra_pharmaceutical', "استانداردهای فوقدارویی")}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div className="text-canina-blue text-xs font-bold uppercase tracking-[0.2em] mb-4 font-vazir">
|
||||
{getText('about_label', "میراث ما از آلمان")}
|
||||
</div>
|
||||
<h2 className="text-3xl lg:text-5xl font-black text-medical-gray-900 leading-[1.2] mb-12 font-lalezar tracking-wide">
|
||||
{getText('about_title', "چرا برند آلمانی Canina مرجع دامپزشکان است؟")}
|
||||
</h2>
|
||||
<div className="space-y-6">
|
||||
{[
|
||||
{ title: getText('about_item1_title', "مواد اولیه نایاب"), desc: getText('about_item1_desc', "استفاده از پودر صدف لبسبز اصل نیوزیلند و مواد ارگانیک با گرید دارویی.") },
|
||||
{ title: getText('about_item2_title', "فاقد مواد نگهدارنده"), desc: getText('about_item2_desc', "تمامی محصولات ۱۰۰٪ طبیعی و فاقد رنگهای مصنوعی و طعمدهندههای شیمیایی هستند.") },
|
||||
{ title: getText('about_item3_title', "تاییدیه اروپا"), desc: getText('about_item3_desc', "مطابق با سختگیرانهترین استانداردهای ایمنی مواد غذایی و دارویی در اتحادیه اروپا.") }
|
||||
].map((item, idx) => (
|
||||
<div key={idx} className="flex gap-4 items-center">
|
||||
<div className="w-12 h-12 rounded-2xl bg-medical-gray-50 flex items-center justify-center flex-shrink-0 text-canina-blue font-black font-lalezar text-xl shadow-sm">
|
||||
{toPersian(idx + 1)}
|
||||
</div>
|
||||
<div>
|
||||
<h4 className="text-lg font-bold text-medical-gray-900 mb-1 font-shabnam">{item.title}</h4>
|
||||
<p className="text-sm text-medical-gray-500 leading-relaxed font-medium font-sans">{item.desc}</p>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Call to Action */}
|
||||
<section className="bg-canina-blue py-12 relative overflow-hidden font-sans">
|
||||
<div className="absolute inset-0 opacity-10">
|
||||
<div className="grid grid-cols-10 h-full w-full">
|
||||
{Array.from({length: 100}).map((_, i) => (
|
||||
<div key={i} className="border border-white/20" />
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<div className="max-w-4xl mx-auto px-4 text-center relative z-10">
|
||||
<h2 className="text-3xl lg:text-5xl font-black text-white mb-8 leading-tight font-lalezar tracking-wide">
|
||||
{getText('cta_title', "میخواهید بدانید کدام محصول برای پت شما مناسبتر است؟")}
|
||||
</h2>
|
||||
<p className="text-white/80 text-lg mb-10 leading-relaxed font-shabnam">
|
||||
{getText('cta_desc', "تیم متخصص دامپزشکی کانینا ایران آماده پاسخگویی به سوالات شماست.")}
|
||||
</p>
|
||||
<div className="flex flex-wrap justify-center gap-4">
|
||||
<button className="bg-white text-canina-blue px-12 py-5 rounded-full font-black text-xl hover:scale-105 transition-transform shadow-2xl shadow-black/20 font-shabnam">
|
||||
{getText('cta_btn_primary', "دریافت رژیم مکمل رایگان")}
|
||||
</button>
|
||||
<Link
|
||||
href="/shop"
|
||||
className="bg-transparent border-2 border-white text-white px-12 py-5 rounded-full font-black text-xl hover:bg-white hover:text-canina-blue transition-all font-shabnam"
|
||||
>
|
||||
{getText('cta_btn_secondary', "پروانه دامپزشکی و اصالت کالا")}
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</>
|
||||
);
|
||||
return <HomeClient />;
|
||||
}
|
||||
|
||||
@ -2,8 +2,19 @@ import type { Metadata } from "next";
|
||||
import { Shield } from "lucide-react";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "حریم خصوصی",
|
||||
description: "سیاستهای حفاظت از اطلاعات شخصی کاربران در وبسایت کانینا ایران.",
|
||||
title: "حریم خصوصی کاربران - کانینا ایران",
|
||||
description: "سیاستهای حفاظت از اطلاعات شخصی کاربران، امنیت دادههای پزشکی و پروندههای درمانی پت در وبسایت کانینا ایران.",
|
||||
alternates: {
|
||||
canonical: "/privacy",
|
||||
},
|
||||
openGraph: {
|
||||
title: "حریم خصوصی کاربران - کانینا ایران",
|
||||
description: "سیاستهای حفاظت از اطلاعات شخصی کاربران در وبسایت کانینا ایران.",
|
||||
url: "https://canina-iran.com/privacy",
|
||||
siteName: "کانینا ایران",
|
||||
locale: "fa_IR",
|
||||
type: "website",
|
||||
}
|
||||
};
|
||||
|
||||
export default function PrivacyPage() {
|
||||
|
||||
@ -18,8 +18,8 @@ export async function generateMetadata(
|
||||
// Get raw data for custom fields if we added them (like metaTitle)
|
||||
// Since we don't have local access to raw DB object without modifying productService,
|
||||
// we can just use the mapped product fields for now.
|
||||
const title = (product as any).metaTitle || product.name;
|
||||
const description = (product as any).metaDescription || product.description;
|
||||
const title = product.name.includes("Canina") ? product.name : `${product.name} | برند کانینا آلمان`;
|
||||
const description = (product.shortDescription || product.description || '').substring(0, 150).trim();
|
||||
const keywords = (product as any).keywords ? (product as any).keywords.split(',') : product.main_ingredients;
|
||||
|
||||
return {
|
||||
@ -30,9 +30,12 @@ export async function generateMetadata(
|
||||
title,
|
||||
description,
|
||||
images: [product.image],
|
||||
url: `/shop/${resolvedParams.slug}`,
|
||||
siteName: "کانینا ایران",
|
||||
type: "music.song", // product type equivalent or website
|
||||
},
|
||||
alternates: {
|
||||
canonical: (product as any).canonicalUrl || `/shop/${product.id}`,
|
||||
canonical: `/shop/${resolvedParams.slug}`,
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -50,7 +53,7 @@ export default async function ShopProductPage({ params }: { params: Promise<{ sl
|
||||
'@type': 'Product',
|
||||
name: product.name,
|
||||
image: product.image,
|
||||
description: (product as any).metaDescription || product.description,
|
||||
description: product.shortDescription || product.description,
|
||||
sku: product.artNo,
|
||||
brand: {
|
||||
'@type': 'Brand',
|
||||
@ -58,7 +61,7 @@ export default async function ShopProductPage({ params }: { params: Promise<{ sl
|
||||
},
|
||||
offers: {
|
||||
'@type': 'Offer',
|
||||
url: `https://canino-iran.com/shop/${product.id}`,
|
||||
url: `https://canina-iran.com/shop/${resolvedParams.slug}`,
|
||||
priceCurrency: 'IRR',
|
||||
price: product.priceValue * 10, // Assuming priceValue is in Toman, converting to Rial
|
||||
availability: 'https://schema.org/InStock',
|
||||
|
||||
@ -1,5 +1,22 @@
|
||||
import type { Metadata } from "next";
|
||||
import ArchivePage from "../../components/ArchivePage";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "فروشگاه تخصصی مکملهای دارویی - کانینا ایران",
|
||||
description: "خرید آنلاین انواع مکملهای درمانی، مفاصل و استخوان، گوارش و ایمنی، ویتامینها و مراقبتهای ویژه سگ و گربه با تضمین اصالت و گواهی سلامت دامپزشکی.",
|
||||
alternates: {
|
||||
canonical: "/shop",
|
||||
},
|
||||
openGraph: {
|
||||
title: "فروشگاه تخصصی مکملهای دارویی - کانینا ایران",
|
||||
description: "خرید آنلاین انواع مکملهای درمانی، مفاصل و استخوان، گوارش و ایمنی، ویتامینها و مراقبتهای ویژه سگ و گربه.",
|
||||
url: "https://canina-iran.com/shop",
|
||||
siteName: "کانینا ایران",
|
||||
locale: "fa_IR",
|
||||
type: "website",
|
||||
}
|
||||
};
|
||||
|
||||
export default async function Shop({ searchParams }: { searchParams: Promise<{ [key: string]: string | string[] | undefined }> }) {
|
||||
const resolvedParams = await searchParams;
|
||||
const category = typeof resolvedParams.category === 'string' ? resolvedParams.category : "all";
|
||||
|
||||
@ -1,9 +1,20 @@
|
||||
import IngredientWiki from "../../components/IngredientWiki";
|
||||
import IngredientWiki from "../../components/IngredientWiki";
|
||||
import type { Metadata } from 'next';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'دانشنامه ترکیبات دارویی',
|
||||
description: 'اطلاعات کامل در مورد مواد موثره، ویتامینها و ترکیبات گیاهی به کار رفته در محصولات تخصصی کانینا ایران.',
|
||||
title: "دانشنامه ترکیبات دارویی و علمی - کانینا ایران",
|
||||
description: "اطلاعات کامل پزشکی در مورد مواد موثره، ویتامینها و ترکیبات گیاهی نایاب به کار رفته در محصولات تخصصی کانیتا آلمان.",
|
||||
alternates: {
|
||||
canonical: "/wiki",
|
||||
},
|
||||
openGraph: {
|
||||
title: "دانشنامه ترکیبات دارویی و علمی - کانینا ایران",
|
||||
description: "اطلاعات کامل در مورد مواد موثره، ویتامینها و ترکیبات گیاهی به کار رفته در محصولات تخصصی کانینا ایران.",
|
||||
url: "https://canina-iran.com/wiki",
|
||||
siteName: "کانینا ایران",
|
||||
locale: "fa_IR",
|
||||
type: "website",
|
||||
}
|
||||
};
|
||||
|
||||
export default function WikiPage() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user