Add page metadata and generated SEO sitemap configuration
This commit is contained in:
@@ -47,4 +47,7 @@ User confirmed parent-domain cookies meshkee_customer_access_token and meshkee_c
|
|||||||
## Backend access rules confirmed (2026-09-05)
|
## Backend access rules confirmed (2026-09-05)
|
||||||
Profile URL: https://customer.sgemed.com/profile. Website management URL: https://business.sgemed.com/website. The account endpoint treats a user as eligible for the management link only if they are a super-admin (`isSuperAdmin` or `roles` includes `super_admin`) or hold a membership for the resolved SGE tenant (`businessId`/`id` matches tenant ID) with `isOwner: true` or `teamRole` `admin`, `editor`, or `viewer`. This decision is made server-side from the verified `/auth/me` response; it is never inferred from client data.
|
Profile URL: https://customer.sgemed.com/profile. Website management URL: https://business.sgemed.com/website. The account endpoint treats a user as eligible for the management link only if they are a super-admin (`isSuperAdmin` or `roles` includes `super_admin`) or hold a membership for the resolved SGE tenant (`businessId`/`id` matches tenant ID) with `isOwner: true` or `teamRole` `admin`, `editor`, or `viewer`. This decision is made server-side from the verified `/auth/me` response; it is never inferred from client data.
|
||||||
|
|
||||||
|
## SEO update (2026-09-05)
|
||||||
|
Source brief: https://api.meshkee.com/api/v1/public/ai-prompts/sge-medical-group/seo/700d7980abbb7920d7a95085. Added page-specific titles, descriptions and canonical URLs for home, about, contact and blog; root metadata now includes Persian Open Graph defaults and `metadataBase` for sgemed.com. Blog detail already uses CMS title/content summary and canonical `/blog/{id}/{titleSlug}`. The build-time sitemap generator now publishes `public/meshkee/sitemap-config.json` with change frequencies and priorities for public static routes only. Do not add `robots.txt` or `sitemap.xml`: production nginx proxies Meshkee’s generated versions. After deployment, run Website → Settings → Sync sitemap config in the Meshkee business dashboard to include the static routes.
|
||||||
|
|
||||||
Build-generated public/meshkee/sitemap-config.json lists public static pages. Do not ship sitemap.xml or robots.txt because production nginx delegates them to Meshkee. Test commands: node --experimental-strip-types --test tests/contact.test.mjs; node --test tests/backend.test.cjs.
|
Build-generated public/meshkee/sitemap-config.json lists public static pages. Do not ship sitemap.xml or robots.txt because production nginx delegates them to Meshkee. Test commands: node --experimental-strip-types --test tests/contact.test.mjs; node --test tests/backend.test.cjs.
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
export const metadata={title:'درباره ما'};
|
export const metadata={title:'درباره سلامت گستر اعتماد',description:'با شرکت مهندسی سلامت گستر اعتماد، مشاور و مجری استریل و کنترل عفونت، مأموریت و رویکرد ما آشنا شوید.',alternates:{canonical:'/about-us'}};
|
||||||
export default function About(){return <><section className="pagehead"><div className="wrap"><span className="eyebrow">ABOUT SGE MEDICAL GROUP</span><h1>آنچه درباره ما باید بدانید</h1><p>شرکت مهندسی سلامت گستر اعتماد</p></div></section><section className="wrap section split"><div><span className="eyebrow">از یک ایده در سال ۱۳۸۵</span><h2>هر روز، بهتر از دیروز.</h2><p>اولین ایده تشکیل شرکت در سال ۱۳۸۵، با هدف نوآوری، خلاقیت، ایجاد اشتغال و تولید ارزش افزوده شکل گرفت. تجربه کار در حوزه خدمات سلامت، بهداشت، کنترل عفونت و استریلیزاسیون، نگاه ما را تکامل داد.</p><p>باور داریم هدف غایی این است که کاری را که بر عهده میگیریم، هر روز بهتر از دیروز انجام دهیم و مشکلی از مشکلات مشتریانمان کم کنیم.</p><strong>مهندس اویسی</strong><small style={{display:'block',color:'#6c818b'}}>مدیرعامل</small></div><img src="/images/laboratory.jpg" alt="تجهیزات و فعالیت در آزمایشگاه"/></section><section className="wrap prose section" style={{paddingTop:0}}><h2>دانش و تجربه، در خدمت سلامت</h2><p>اکنون پس از تجربههای فراوان، سبدی از محصولات دارای استانداردها و تأییدیههای جهانی و مناسب اقتصاد ایران را در زمینه استریلیزاسیون و کنترل عفونت ارائه میدهیم. هدف ما بهبود مستمر در سایه دانش و تجربه است.</p><div className="quote">بهبود مستمر، کلید ماندگاری است.</div><p>اعتقادی به تبلیغات غلوآمیز «بهترین» و «بزرگترین» نداریم. معتقدیم هر روز کاری، روزی برای بهتر شدن و بزرگتر شدن است. دنیای امروز، دنیای تغییرات سریع است و نبوغ و تلاش آدمی مرز ندارد.</p><p>ما خانواده کوچکی هستیم که با تمرکز بر توسعه دانش و آموزش مهارتها، در کنار همکاران، رقبا و بهویژه شما مشتریان عزیز بهتر میشویم. تمام تلاشمان را انجام میدهیم تا کاری را که بر عهده میگیریم به بهترین شکل ممکن به انجام برسانیم و پذیرای نظرات و پیشنهادات شما هستیم.</p><Link className="button" href="/tmas-bama">با ما در ارتباط باشید ←</Link></section></>}
|
export default function About(){return <><section className="pagehead"><div className="wrap"><span className="eyebrow">ABOUT SGE MEDICAL GROUP</span><h1>آنچه درباره ما باید بدانید</h1><p>شرکت مهندسی سلامت گستر اعتماد</p></div></section><section className="wrap section split"><div><span className="eyebrow">از یک ایده در سال ۱۳۸۵</span><h2>هر روز، بهتر از دیروز.</h2><p>اولین ایده تشکیل شرکت در سال ۱۳۸۵، با هدف نوآوری، خلاقیت، ایجاد اشتغال و تولید ارزش افزوده شکل گرفت. تجربه کار در حوزه خدمات سلامت، بهداشت، کنترل عفونت و استریلیزاسیون، نگاه ما را تکامل داد.</p><p>باور داریم هدف غایی این است که کاری را که بر عهده میگیریم، هر روز بهتر از دیروز انجام دهیم و مشکلی از مشکلات مشتریانمان کم کنیم.</p><strong>مهندس اویسی</strong><small style={{display:'block',color:'#6c818b'}}>مدیرعامل</small></div><img src="/images/laboratory.jpg" alt="تجهیزات و فعالیت در آزمایشگاه"/></section><section className="wrap prose section" style={{paddingTop:0}}><h2>دانش و تجربه، در خدمت سلامت</h2><p>اکنون پس از تجربههای فراوان، سبدی از محصولات دارای استانداردها و تأییدیههای جهانی و مناسب اقتصاد ایران را در زمینه استریلیزاسیون و کنترل عفونت ارائه میدهیم. هدف ما بهبود مستمر در سایه دانش و تجربه است.</p><div className="quote">بهبود مستمر، کلید ماندگاری است.</div><p>اعتقادی به تبلیغات غلوآمیز «بهترین» و «بزرگترین» نداریم. معتقدیم هر روز کاری، روزی برای بهتر شدن و بزرگتر شدن است. دنیای امروز، دنیای تغییرات سریع است و نبوغ و تلاش آدمی مرز ندارد.</p><p>ما خانواده کوچکی هستیم که با تمرکز بر توسعه دانش و آموزش مهارتها، در کنار همکاران، رقبا و بهویژه شما مشتریان عزیز بهتر میشویم. تمام تلاشمان را انجام میدهیم تا کاری را که بر عهده میگیریم به بهترین شکل ممکن به انجام برسانیم و پذیرای نظرات و پیشنهادات شما هستیم.</p><Link className="button" href="/tmas-bama">با ما در ارتباط باشید ←</Link></section></>}
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { BookOpen, ArrowUpLeft } from 'lucide-react';
|
import { BookOpen, ArrowUpLeft } from 'lucide-react';
|
||||||
import { getBlogs, blogHref, summary, cover } from '../../lib/meshkee/blog';
|
import { getBlogs, blogHref, summary, cover } from '../../lib/meshkee/blog';
|
||||||
export const metadata = {title:'مجله سلامت گستر',description:'مقالات و تازههای سلامت گستر اعتماد در زمینه استریلیزاسیون، تجهیزات پزشکی و کنترل عفونت.'};
|
export const metadata = {title:'مجله سلامت گستر',description:'مقالات و تازههای سلامت گستر اعتماد در زمینه استریلیزاسیون، تجهیزات پزشکی و کنترل عفونت.',alternates:{canonical:'/blog'}};
|
||||||
export const dynamic = 'force-dynamic';
|
export const dynamic = 'force-dynamic';
|
||||||
export default async function BlogPage({searchParams}:{searchParams:Promise<{page?:string}>}) {
|
export default async function BlogPage({searchParams}:{searchParams:Promise<{page?:string}>}) {
|
||||||
const query=await searchParams; const page=Math.max(1,Math.min(10000,Number.parseInt(query.page||'1',10)||1));
|
const query=await searchParams; const page=Math.max(1,Math.min(10000,Number.parseInt(query.page||'1',10)||1));
|
||||||
|
|||||||
+13
-1
@@ -4,7 +4,19 @@ import Link from 'next/link';
|
|||||||
import './globals.css';
|
import './globals.css';
|
||||||
import { getFavicon } from '../lib/meshkee/api';
|
import { getFavicon } from '../lib/meshkee/api';
|
||||||
import ProductMenu from '../components/product-menu';
|
import ProductMenu from '../components/product-menu';
|
||||||
const baseMetadata: Metadata = { title: { default: 'سلامت گستر اعتماد | تجهیزات استریل و کنترل عفونت', template: '%s | سلامت گستر اعتماد' }, description: 'شرکت مهندسی سلامت گستر اعتماد؛ مشاور و مجری استریل و کنترل عفونت. محصولات تخصصی، کاتالوگها و راههای ارتباط با ما.' };
|
const baseMetadata: Metadata = {
|
||||||
|
metadataBase: new URL('https://sgemed.com'),
|
||||||
|
title: { default: 'سلامت گستر اعتماد | تجهیزات استریل و کنترل عفونت', template: '%s | سلامت گستر اعتماد' },
|
||||||
|
description: 'شرکت مهندسی سلامت گستر اعتماد؛ مشاور و مجری استریل و کنترل عفونت. محصولات تخصصی، کاتالوگها و راههای ارتباط با ما.',
|
||||||
|
alternates: { canonical: '/' },
|
||||||
|
openGraph: {
|
||||||
|
type: 'website',
|
||||||
|
locale: 'fa_IR',
|
||||||
|
siteName: 'سلامت گستر اعتماد',
|
||||||
|
title: 'سلامت گستر اعتماد | تجهیزات استریل و کنترل عفونت',
|
||||||
|
description: 'مشاور و مجری استریل و کنترل عفونت؛ محصولات تخصصی، کاتالوگها و راههای ارتباط با ما.',
|
||||||
|
},
|
||||||
|
};
|
||||||
export async function generateMetadata(): Promise<Metadata> { return { ...baseMetadata, icons: { icon: await getFavicon() } }; }
|
export async function generateMetadata(): Promise<Metadata> { return { ...baseMetadata, icons: { icon: await getFavicon() } }; }
|
||||||
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
||||||
return <html lang="fa" dir="rtl"><body><div className="topbar"><div className="wrap"><span>مشاور و مجری استریل و کنترل عفونت</span><a href="tel:02166157609">دفتر تهران <b dir="ltr">۰۲۱ − ۶۶۱۵۷۶۰۹</b></a></div></div><header className="wrap header"><Link className="brand" href="/" aria-label="سلامت گستر اعتماد، صفحه اصلی"><img src="/images/logo.png" alt="SGE Medical Group" /></Link><nav aria-label="منوی اصلی"><Link href="/">صفحه اصلی</Link><ProductMenu /><Link href="/blog">مجله</Link><Link href="/about-us">درباره ما</Link><Link href="/tmas-bama">تماس با ما</Link></nav><AccountMenu /><Link className="button small" href="/tmas-bama">مشاوره و خرید <span>↖</span></Link></header><main>{children}</main><footer><div className="wrap footergrid"><div><img className="footerlogo" src="/images/logo.png" alt="سلامت گستر اعتماد"/><h3>شرکت مهندسی سلامت گستر اعتماد</h3><p>همراه شما در مسیر استریلیزاسیون<br/>و کنترل عفونت</p></div><div><h3>دسترسی سریع</h3><Link href="/">صفحه اصلی</Link><Link href="/#products">محصولات و کاتالوگها</Link><Link href="/blog">مجله</Link><Link href="/about-us">درباره ما</Link><Link href="/tmas-bama">تماس با ما</Link></div><div><h3>با ما در ارتباط باشید</h3><a href="tel:02166157609">دفتر تهران: <b dir="ltr">۰۲۱۶۶۱۵۷۶۰۹</b></a><a href="tel:02532891573">دفتر شهرستانها: <b dir="ltr">۰۲۵۳۲۸۹۱۵۷۳</b></a><a href="mailto:sale.steril@gmail.com">sale.steril@gmail.com</a><a href="https://t.me/CCSD1" target="_blank" rel="noreferrer">تلگرام ↗</a></div></div><div className="wrap copyright"><span>تمامی حقوق برای سلامت گستر اعتماد محفوظ است.</span><span dir="ltr">SGE MEDICAL GROUP</span></div></footer></body></html>
|
return <html lang="fa" dir="rtl"><body><div className="topbar"><div className="wrap"><span>مشاور و مجری استریل و کنترل عفونت</span><a href="tel:02166157609">دفتر تهران <b dir="ltr">۰۲۱ − ۶۶۱۵۷۶۰۹</b></a></div></div><header className="wrap header"><Link className="brand" href="/" aria-label="سلامت گستر اعتماد، صفحه اصلی"><img src="/images/logo.png" alt="SGE Medical Group" /></Link><nav aria-label="منوی اصلی"><Link href="/">صفحه اصلی</Link><ProductMenu /><Link href="/blog">مجله</Link><Link href="/about-us">درباره ما</Link><Link href="/tmas-bama">تماس با ما</Link></nav><AccountMenu /><Link className="button small" href="/tmas-bama">مشاوره و خرید <span>↖</span></Link></header><main>{children}</main><footer><div className="wrap footergrid"><div><img className="footerlogo" src="/images/logo.png" alt="سلامت گستر اعتماد"/><h3>شرکت مهندسی سلامت گستر اعتماد</h3><p>همراه شما در مسیر استریلیزاسیون<br/>و کنترل عفونت</p></div><div><h3>دسترسی سریع</h3><Link href="/">صفحه اصلی</Link><Link href="/#products">محصولات و کاتالوگها</Link><Link href="/blog">مجله</Link><Link href="/about-us">درباره ما</Link><Link href="/tmas-bama">تماس با ما</Link></div><div><h3>با ما در ارتباط باشید</h3><a href="tel:02166157609">دفتر تهران: <b dir="ltr">۰۲۱۶۶۱۵۷۶۰۹</b></a><a href="tel:02532891573">دفتر شهرستانها: <b dir="ltr">۰۲۵۳۲۸۹۱۵۷۳</b></a><a href="mailto:sale.steril@gmail.com">sale.steril@gmail.com</a><a href="https://t.me/CCSD1" target="_blank" rel="noreferrer">تلگرام ↗</a></div></div><div className="wrap copyright"><span>تمامی حقوق برای سلامت گستر اعتماد محفوظ است.</span><span dir="ltr">SGE MEDICAL GROUP</span></div></footer></body></html>
|
||||||
|
|||||||
@@ -2,5 +2,10 @@ import HeroSlider from '../components/hero-slider';
|
|||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
import { FlaskConical, ShieldCheck, Package, Microscope, ArrowDownLeft, MoveLeft } from 'lucide-react';
|
import { FlaskConical, ShieldCheck, Package, Microscope, ArrowDownLeft, MoveLeft } from 'lucide-react';
|
||||||
import catalog from './catalog.json';
|
import catalog from './catalog.json';
|
||||||
|
export const metadata = {
|
||||||
|
title: 'تجهیزات استریل و کنترل عفونت',
|
||||||
|
description: 'محصولات تخصصی سلامت گستر اعتماد برای استریلیزاسیون، کنترل عفونت و بستهبندی استریل مراکز درمانی.',
|
||||||
|
alternates: { canonical: '/' },
|
||||||
|
};
|
||||||
const groups=[{title:'اندیکاتورهای شیمیایی',en:'Chemical indicators',icon:FlaskConical,start:2,end:15},{title:'اندیکاتورهای بیولوژیکال',en:'Biological indicators',icon:Microscope,start:0,end:2},{title:'بستهبندی استریل',en:'Sterile packaging',icon:Package,start:15,end:26},{title:'بهداشت و کنترل عفونت',en:'Infection control',icon:ShieldCheck,start:26,end:30}];
|
const groups=[{title:'اندیکاتورهای شیمیایی',en:'Chemical indicators',icon:FlaskConical,start:2,end:15},{title:'اندیکاتورهای بیولوژیکال',en:'Biological indicators',icon:Microscope,start:0,end:2},{title:'بستهبندی استریل',en:'Sterile packaging',icon:Package,start:15,end:26},{title:'بهداشت و کنترل عفونت',en:'Infection control',icon:ShieldCheck,start:26,end:30}];
|
||||||
export default function Home(){return <><HeroSlider /><div className="wrap categories">{groups.map((g,i)=><a href={'#group-'+i} key={g.title}><g.icon size={30} strokeWidth={1.4}/><div><strong>{g.title}</strong><small>{g.en}</small></div><ArrowDownLeft size={17}/></a>)}</div><section className="wrap section" id="products"><div className="section-heading"><div><span className="eyebrow">محصولات تخصصی ما</span><h2>دقت در انتخاب؛ اطمینان در عملکرد</h2></div><p>معرفی محصولات و دریافت کاتالوگهای تخصصی<br/>استریل، بستهبندی و کنترل عفونت</p></div><div className="catalog">{groups.map((g,i)=><details id={'group-'+i} key={g.title} open={i===0}><summary><span className="group-title"><g.icon size={24}/>{g.title}<small>{g.en}</small></span><span>مشاهده محصولات +</span></summary><div className="product-grid">{catalog.slice(g.start,g.end).map(p=><a className="product" href={p.downloaded ? p.url : '/tmas-bama'} key={p.source} target="_blank" rel="noreferrer"><span className="pdf">PDF</span><h3>{p.title}</h3><span className="download">{p.downloaded ? 'دریافت کاتالوگ' : 'درخواست کاتالوگ'} <ArrowDownLeft size={18}/></span></a>)}</div></details>)}</div></section><section className="education"><div className="wrap split"><img src="/images/care.jpg" alt="فعالیت متخصصان در محیط پزشکی"/><div><span className="eyebrow">دانش، پایهٔ مراقبت بهتر</span><h2>آموزش، کلید توسعه<br/>و تخصص ما است.</h2><p>دانش استریل و بازفرآوری ابزار پزشکی، دانشی چندبعدی و تخصصی است. کتاب راهنمای جامع استریلیزاسیون، ترجمه گایدلاین ST79، برای فعالان حوزه استریل و کارشناسان کنترل عفونت معرفی شده است.</p><Link href="/tmas-bama" className="textlink">برای تهیه کتاب با ما تماس بگیرید <MoveLeft size={20}/></Link></div></div></section><section className="wrap section info"><span className="eyebrow">استریل و کنترل عفونت</span><h2>شناخت بهتر، انتخاب آگاهانهتر</h2><div className="info-grid"><article><span>۰۱ / CHEMICAL</span><h3>اندیکاتور شیمیایی چیست؟</h3><p>این نشانگرها معمولاً جامد و کاغذیشکل هستند، داخل پکهای استریل قرار میگیرند و در طول فرایند استریلیزاسیون تغییر رنگ میدهند.</p></article><article><span>۰۲ / BIOLOGICAL</span><h3>اندیکاتور بیولوژیکال چیست؟</h3><p>این اندیکاتورها حاوی میکروارگانیسمهای زنده هستند. نتیجه کشت آنها در محیط مرتبط، برای ارزیابی عملکرد فرایند استریلیزاسیون استفاده میشود.</p></article><article><span>۰۳ / DOCUMENTATION</span><h3>مستندسازی و ردیابی استریل</h3><p>نرمافزار CSSD-DOC برای مستندسازی و ردیابی استریل؛ گذار از دنیای کاغذی به عصر الکترونیک.</p><Link href="/tmas-bama">دریافت اطلاعات بیشتر ←</Link></article></div></section><section className="contactband"><div className="wrap"><div><h2>برای انتخاب محصول مناسب، همراه شما هستیم.</h2><p>مشاوره و خرید محصولات تخصصی کنترل عفونت و استریلیزاسیون</p></div><Link href="/tmas-bama" className="button white">ارتباط با کارشناسان <MoveLeft size={20}/></Link></div></section></>}
|
export default function Home(){return <><HeroSlider /><div className="wrap categories">{groups.map((g,i)=><a href={'#group-'+i} key={g.title}><g.icon size={30} strokeWidth={1.4}/><div><strong>{g.title}</strong><small>{g.en}</small></div><ArrowDownLeft size={17}/></a>)}</div><section className="wrap section" id="products"><div className="section-heading"><div><span className="eyebrow">محصولات تخصصی ما</span><h2>دقت در انتخاب؛ اطمینان در عملکرد</h2></div><p>معرفی محصولات و دریافت کاتالوگهای تخصصی<br/>استریل، بستهبندی و کنترل عفونت</p></div><div className="catalog">{groups.map((g,i)=><details id={'group-'+i} key={g.title} open={i===0}><summary><span className="group-title"><g.icon size={24}/>{g.title}<small>{g.en}</small></span><span>مشاهده محصولات +</span></summary><div className="product-grid">{catalog.slice(g.start,g.end).map(p=><a className="product" href={p.downloaded ? p.url : '/tmas-bama'} key={p.source} target="_blank" rel="noreferrer"><span className="pdf">PDF</span><h3>{p.title}</h3><span className="download">{p.downloaded ? 'دریافت کاتالوگ' : 'درخواست کاتالوگ'} <ArrowDownLeft size={18}/></span></a>)}</div></details>)}</div></section><section className="education"><div className="wrap split"><img src="/images/care.jpg" alt="فعالیت متخصصان در محیط پزشکی"/><div><span className="eyebrow">دانش، پایهٔ مراقبت بهتر</span><h2>آموزش، کلید توسعه<br/>و تخصص ما است.</h2><p>دانش استریل و بازفرآوری ابزار پزشکی، دانشی چندبعدی و تخصصی است. کتاب راهنمای جامع استریلیزاسیون، ترجمه گایدلاین ST79، برای فعالان حوزه استریل و کارشناسان کنترل عفونت معرفی شده است.</p><Link href="/tmas-bama" className="textlink">برای تهیه کتاب با ما تماس بگیرید <MoveLeft size={20}/></Link></div></div></section><section className="wrap section info"><span className="eyebrow">استریل و کنترل عفونت</span><h2>شناخت بهتر، انتخاب آگاهانهتر</h2><div className="info-grid"><article><span>۰۱ / CHEMICAL</span><h3>اندیکاتور شیمیایی چیست؟</h3><p>این نشانگرها معمولاً جامد و کاغذیشکل هستند، داخل پکهای استریل قرار میگیرند و در طول فرایند استریلیزاسیون تغییر رنگ میدهند.</p></article><article><span>۰۲ / BIOLOGICAL</span><h3>اندیکاتور بیولوژیکال چیست؟</h3><p>این اندیکاتورها حاوی میکروارگانیسمهای زنده هستند. نتیجه کشت آنها در محیط مرتبط، برای ارزیابی عملکرد فرایند استریلیزاسیون استفاده میشود.</p></article><article><span>۰۳ / DOCUMENTATION</span><h3>مستندسازی و ردیابی استریل</h3><p>نرمافزار CSSD-DOC برای مستندسازی و ردیابی استریل؛ گذار از دنیای کاغذی به عصر الکترونیک.</p><Link href="/tmas-bama">دریافت اطلاعات بیشتر ←</Link></article></div></section><section className="contactband"><div className="wrap"><div><h2>برای انتخاب محصول مناسب، همراه شما هستیم.</h2><p>مشاوره و خرید محصولات تخصصی کنترل عفونت و استریلیزاسیون</p></div><Link href="/tmas-bama" className="button white">ارتباط با کارشناسان <MoveLeft size={20}/></Link></div></section></>}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import ContactForm from '../../components/backend/contact-form';
|
import ContactForm from '../../components/backend/contact-form';
|
||||||
import { Phone, Headphones, Mail, Send, Printer, ArrowUpLeft } from 'lucide-react';
|
import { Phone, Headphones, Mail, Send, Printer, ArrowUpLeft } from 'lucide-react';
|
||||||
|
|
||||||
export const metadata = { title: 'تماس با ما' };
|
export const metadata = { title: 'تماس با سلامت گستر اعتماد', description: 'برای مشاوره و خرید محصولات استریلیزاسیون و کنترل عفونت با کارشناسان سلامت گستر اعتماد تماس بگیرید.', alternates: { canonical: '/tmas-bama' } };
|
||||||
|
|
||||||
export default function Contact() {
|
export default function Contact() {
|
||||||
return <>
|
return <>
|
||||||
|
|||||||
@@ -3,19 +3,23 @@
|
|||||||
"staticPages": [
|
"staticPages": [
|
||||||
{
|
{
|
||||||
"path": "/about-us",
|
"path": "/about-us",
|
||||||
|
"changefreq": "monthly",
|
||||||
"priority": 0.6
|
"priority": 0.6
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "/blog",
|
"path": "/blog",
|
||||||
"priority": 0.6
|
"changefreq": "weekly",
|
||||||
|
"priority": 0.7
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "/",
|
"path": "/",
|
||||||
|
"changefreq": "daily",
|
||||||
"priority": 1
|
"priority": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"path": "/tmas-bama",
|
"path": "/tmas-bama",
|
||||||
"priority": 0.6
|
"changefreq": "monthly",
|
||||||
|
"priority": 0.5
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
import {readdir,mkdir,writeFile} from 'node:fs/promises';
|
import {readdir,mkdir,writeFile} from 'node:fs/promises';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
const staticPages=[];
|
const staticPages=[];
|
||||||
async function scan(dir,parts=[]){for(const entry of await readdir(dir,{withFileTypes:true})){if(entry.isDirectory()&&!entry.name.startsWith('[')&&!entry.name.startsWith('_')&&!['api','account','admin','login','cart','checkout'].includes(entry.name))await scan(path.join(dir,entry.name),entry.name.startsWith('(')?parts:[...parts,entry.name]);else if(entry.isFile()&&/^page\.(tsx|jsx|js|ts)$/.test(entry.name))staticPages.push({path:'/'+parts.join('/'),priority:parts.length?0.6:1})}}
|
const seoByPath={
|
||||||
|
'/':{changefreq:'daily',priority:1},
|
||||||
|
'/about-us':{changefreq:'monthly',priority:0.6},
|
||||||
|
'/tmas-bama':{changefreq:'monthly',priority:0.5},
|
||||||
|
'/blog':{changefreq:'weekly',priority:0.7},
|
||||||
|
};
|
||||||
|
async function scan(dir,parts=[]){for(const entry of await readdir(dir,{withFileTypes:true})){if(entry.isDirectory()&&!entry.name.startsWith('[')&&!entry.name.startsWith('_')&&!['api','account','admin','login','cart','checkout'].includes(entry.name))await scan(path.join(dir,entry.name),entry.name.startsWith('(')?parts:[...parts,entry.name]);else if(entry.isFile()&&/^page\.(tsx|jsx|js|ts)$/.test(entry.name)){const route='/'+parts.join('/');staticPages.push({path:route,...(seoByPath[route]||{changefreq:'monthly',priority:0.6})})}}}
|
||||||
await scan('app');await mkdir('public/meshkee',{recursive:true});await writeFile('public/meshkee/sitemap-config.json',JSON.stringify({baseUrl:'https://sgemed.com',staticPages},null,2)+'\n');
|
await scan('app');await mkdir('public/meshkee',{recursive:true});await writeFile('public/meshkee/sitemap-config.json',JSON.stringify({baseUrl:'https://sgemed.com',staticPages},null,2)+'\n');
|
||||||
|
|||||||
Reference in New Issue
Block a user