feat: add sitemap, tag for SEO

This commit is contained in:
2025-11-12 00:25:51 +03:30
parent e95983d9b0
commit 18da3984ae
9 changed files with 196 additions and 5 deletions
+9
View File
@@ -8,9 +8,17 @@ import FreeTrial from './components/FreeTrial';
// import ScientificBenefits from './components/ScientificBenefits';
import CallToAction from './components/CallToAction';
import Footer from './components/Footer';
import { SEOHead } from './components/SEOHead';
function App() {
return (
<>
<SEOHead
title="آرام‌لند - تمرین تنفسی و مدیتیشن"
description="اپلیکیشن آرام‌لند - همراه شما برای رسیدن به آرامش درونی با مدیتیشن‌های فارسی، تمرین‌های تنفسی و موسیقی آرامش‌بخش"
canonical="/" ogImage="../app/og-image.png" />
<div className="min-h-screen bg-gradient-to-b from-blue-50 via-white to-green-50" dir="rtl">
<Header />
@@ -44,6 +52,7 @@ function App() {
<Footer />
</div>
</div>
</>
);
}
+8 -1
View File
@@ -13,6 +13,7 @@ function Header() {
{ name: 'چرا ما', id: 'why-aramland' },
{ name: 'دانلود', id: 'download' },
{ name: 'ارتباط با ما', id: 'footer' },
{ name: 'بلاگ', id: 'blog' },
];
const handleNavClick = (sectionId) => {
@@ -38,7 +39,13 @@ function Header() {
{navigationItems.map((item) => (
<button
key={item.id}
onClick={() => handleNavClick(item.id)}
onClick={() =>{
if (item.id === 'blog') {
window.open('https://aramland.approagency.ir/blog/', '_blank');
} else {
handleNavClick(item.id);
}
}}
className="text-gray-600 hover:text-primary-500 font-medium transition-colors duration-200 relative group text-sm lg:text-base"
>
{item.name}
+33
View File
@@ -0,0 +1,33 @@
// components/SEOHead.jsx
export function SEOHead({
title,
description,
canonical,
ogImage
}) {
const siteUrl = 'https://aramland.approagency.ir/';
return (
<>
<title>{title}</title>
<meta name="description" content={description} />
{/* Canonical URL */}
<link rel="canonical" href={`${siteUrl}${canonical}`} />
{/* Open Graph */}
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:url" content={`${siteUrl}${canonical}`} />
<meta property="og:image" content={ogImage || `${siteUrl}/og-image.png`} />
<meta property="og:type" content="website" />
<meta property="og:locale" content="fa_IR" />
{/* Twitter */}
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={ogImage || `${siteUrl}/og-image.png`} />
<meta name="twitter:card" content="summary_large_image" />
</>
);
}
+100 -2
View File
@@ -4,9 +4,66 @@ import './globals.css';
export const metadata: Metadata = {
title: 'آرام‌لند | تمرین تنفسی و مدیتیشن',
description: 'لحظه‌ای آرام بگیر، زندگی را حس کن',
keywords: ['مدیتیشن فارسی', 'آرامش', 'تمرین تنفسی', 'کاهش استرس', 'ذهن‌آگاهی', 'مدیتیشن هدایت شده', 'سلامت روان', 'آرام‌لند'],
authors: [{ name: 'آرام‌لند' }],
creator: 'آرام‌لند',
publisher: 'آرام‌لند',
metadataBase: new URL('https://aramland.approagency.ir/'),
formatDetection: {
email: false,
address: false,
telephone: false,
},
icons: {
icon: '/favicon.png',
},
alternates: {
canonical: '/',
languages: {
'fa-IR': '/',
},
},
openGraph: {
title: 'آرام‌لند - دستیار آرامش و مدیتیشن فارسی',
description: 'اپلیکیشن آرام‌لند - همراه شما برای رسیدن به آرامش درونی با مدیتیشن‌های فارسی و تمرین‌های تنفسی',
url: 'https://aramland.com',
siteName: 'آرام‌لند',
images: [
{
url: '/og-image.png', // Create this image (1200x630px)
width: 1200,
height: 630,
alt: ' آرام‌لند - اپلیکیشن مدیتیشن و آرامش - تمرین تنفسی',
},
],
locale: 'fa_IR',
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'آرام‌لند - تمرین تنفسی و مدیتیشن',
description: 'اپلیکیشن آرام‌لند - همراه شما برای رسیدن به آرامش درونی',
images: ['/og-image.png'],
creator: '@aramland', // Replace with your Twitter handle
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
'max-video-preview': -1,
'max-image-preview': 'large',
'max-snippet': -1,
},
},
verification: {
// Add your verification codes here
google: 'google-site-verification=HIKgdf_siYdPxbJ2P1792opMprpxci_QjE-quk9kyi8', // From Google Search Console
// yandex: 'your-yandex-verification-code', // If targeting Iran/Russia
},
};
export default function RootLayout({
@@ -16,8 +73,49 @@ export default function RootLayout({
}) {
return (
<html lang="fa" dir="rtl">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<head>
<meta
name="google-site-verification"
content="HIKgdf_siYdPxbJ2P1792opMprpxci_QjE-quk9kyi8"
/>
{/* Favicon */}
<link rel="icon" href="/favicon.ico" sizes="any" />
<link rel="icon" href="/icon?<generated>" type="image/<generated>" sizes="<generated>" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
{/* Preload critical resources */}
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />
{/* Structured Data for SEO */}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "WebApplication",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"ratingCount": "1000"
},
"name": "آرام‌لند",
"description": "اپلیکیشن آرام‌لند - همراه شما برای رسیدن به آرامش درونی با مدیتیشن‌های فارسی و تمرین‌های تنفسی",
"url": "https://aramland.approagency.ir/",
"applicationCategory": "HealthApplication",
"operatingSystem": "Android, iOS, Web",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "IRR"
},
"author": {
"@type": "Organization",
"name": "آرام‌لند"
}
})
}}
/>
</head>
<body className="antialiased">
{children}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

+15
View File
@@ -0,0 +1,15 @@
// app/robots.txt
User-agent: *
Allow: /
Disallow: /api/
Disallow: /_next/
Disallow: /private/
Sitemap: https://aramland.approagency.ir/sitemap.xml
# Iranian search engines
User-agent: YoozBot
Allow: /
User-agent: Parsijoo
Allow: /
+30
View File
@@ -0,0 +1,30 @@
// app/sitemap.js
export default function sitemap() {
const baseUrl = 'https://aramland.approagency.ir/';
return [
{
url: baseUrl,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 1,
},
{
url: `${baseUrl}/features`,
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.9,
},
{
url: `${baseUrl}/download`,
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.8,
},
];
}
// Add this export for static generation
export async function generateSitemaps() {
return [{ id: '0' }];
}