Files
mip-website/lib/seo.js
T

117 lines
6.6 KiB
JavaScript
Raw Normal View History

2026-10-17 17:20:59 +03:30
const SITE_URL = 'https://miphospital.ir'
const SITE_NAME = 'بیمارستان مهر پرند'
const DEFAULT_DESCRIPTION = 'وب‌سایت رسمی بیمارستان مهر ایرانیان پرند؛ معرفی بیمارستان، بخش‌های تخصصی، اخبار افتتاح، فرصت‌های شغلی و راه‌های ارتباط با ما.'
const DEFAULT_IMAGE = `${SITE_URL}/resource/logo/logo-green.png`
// This registry also defines the public, canonical pages included in the sitemap.
const PUBLIC_PAGES = {
'/': [SITE_NAME, DEFAULT_DESCRIPTION],
'/landing': ['معرفی بیمارستان مهر پرند', 'با بیمارستان مهر پرند، زیرساخت‌های درمانی، بخش‌های تخصصی، امکانات و مسیرهای ارتباط با بیمارستان آشنا شوید.'],
'/page/about': ['درباره بیمارستان', 'معرفی بیمارستان مهر ایرانیان پرند، اهداف، امکانات و آخرین وضعیت پیشرفت پروژه بیمارستان در شهر پرند.'],
'/page/contact-us': ['تماس با ما', 'آدرس بیمارستان مهر پرند در فاز ۵، بلوار شهید قاسم سلیمانی؛ شماره تماس ۰۲۱-۵۳۴۵۷۰۰۰، ایمیل و موقعیت بیمارستان روی نقشه.'],
'/page/Directors': ['تیم پروژه بیمارستان', 'آشنایی با اعضای تیم و مدیران پروژه بیمارستان مهر ایرانیان پرند.'],
'/page/docs': ['اسناد رسمی شرکت', 'دسترسی به اساسنامه و اسناد رسمی شرکت پزشکی مهر ایرانیان پرند.'],
'/page/cooperationsales': ['همکاری در فروش', 'اطلاعات و شرایط همکاری در فروش با شرکت پزشکی مهر ایرانیان پرند.'],
'/Gallery': ['گالری تصاویر بیمارستان', 'تصاویر ساختمان، فضاهای داخلی و روند پیشرفت پروژه بیمارستان مهر پرند.'],
'/News': ['اخبار و اطلاعیه‌ها', 'اخبار، اطلاعیه‌ها و فایل‌های معرفی بیمارستان مهر ایرانیان پرند.'],
'/questions': ['سوالات متداول', 'پاسخ به سوالات متداول درباره بیمارستان مهر پرند و امکانات باشگاه سهامداران.'],
'/recruitment': ['فرصت‌های شغلی و استخدام', 'مشاهده فرصت‌های شغلی و گروه‌های استخدامی بیمارستان مهر ایرانیان پرند و ارسال درخواست همکاری.'],
'/medical-equipment': ['واحد تجهیزات پزشکی', 'آشنایی با واحد تجهیزات پزشکی بیمارستان مهر پرند و راه‌های ارتباط با این واحد.'],
'/components/service': ['کلینیک‌ها و بخش‌ها', 'معرفی کلینیک‌ها و بخش‌های تخصصی بیمارستان مهر پرند و امکانات هر بخش.'],
'/stock-unit': ['واحد امور سهام', 'اطلاعات واحد امور سهام بیمارستان مهر پرند و دسترسی به خدمات و راه‌های ارتباط با این واحد.']
}
const UTILITY_TITLES = {
'/CooperationRequest': 'درخواست همکاری',
'/recruitment/inquiry': 'استعلام وضعیت درخواست استخدام',
'/stock-unit/stock-check': 'پیگیری درخواست سهام',
'/stock-unit/stock-sales': 'درخواست خرید سهام',
'/stock-unit/stock-transfer': 'درخواست انتقال سهام',
'/stock-price': 'قیمت سهام بیمارستان مهر پرند',
'/page/stock-price': 'نمودار قیمت سهام',
'/page/sales': 'ارتباط با واحد فروش',
'/smartadvice': 'مشاوره سرمایه‌گذاری'
}
function canonicalUrl(path = '/') {
const clean = String(path).split(/[?#]/)[0]
if (!clean.startsWith('/') || clean.startsWith('//') || clean.includes('\\')) return `${SITE_URL}/`
return SITE_URL + (clean.replace(/\/+$/, '') || '/')
}
function getSeo(path = '/', overrides = {}) {
const canonical = canonicalUrl(path)
const pathname = canonical.slice(SITE_URL.length)
const page = PUBLIC_PAGES[pathname]
const dynamicPublic = /^\/page\/news\/[^/]+$/.test(pathname) || /^\/recruitment\/item\/[^/]+$/.test(pathname)
return {
title: page ? page[0] : UTILITY_TITLES[pathname] || (pathname.startsWith('/recruitment/item/request/') ? 'ثبت درخواست استخدام' : SITE_NAME),
description: page ? page[1] : DEFAULT_DESCRIPTION,
image: DEFAULT_IMAGE,
type: 'website',
noindex: !page && !dynamicPublic,
...overrides,
canonical
}
}
function newsSeo(post, slug) {
const text = String(post.text || '')
.replace(/<(script|style)\b[^>]*>[\s\S]*?<\/\1>/gi, '')
.replace(/<[^>]*>/g, ' ')
.replace(/&nbsp;|&#160;/g, ' ')
.replace(/&amp;/g, '&')
.replace(/\s+/g, ' ').trim()
const description = text.slice(0, 160) || post.title
const image = post.cover ? `https://mehrara-api.iran.liara.run/panel-public/uploads/${post.cover}` : DEFAULT_IMAGE
const canonical = canonicalUrl(`/page/news/${encodeURIComponent(slug)}`)
return {
title: post.title,
description,
image,
type: 'article',
structuredData: {
'@context': 'https://schema.org',
'@type': 'NewsArticle',
headline: post.title,
description,
image: [image],
mainEntityOfPage: canonical,
publisher: { '@id': `${SITE_URL}/#hospital` }
}
}
}
const hospitalSchema = {
'@context': 'https://schema.org',
'@type': 'Hospital',
'@id': `${SITE_URL}/#hospital`,
name: SITE_NAME,
alternateName: 'بیمارستان مهر ایرانیان پرند',
url: `${SITE_URL}/`,
logo: DEFAULT_IMAGE,
telephone: '+98-21-53457000',
email: 'contact-us@miphospital.ir',
address: {
'@type': 'PostalAddress',
addressCountry: 'IR',
addressRegion: 'تهران',
addressLocality: 'پرند',
streetAddress: 'فاز ۵، بلوار شهید قاسم سلیمانی، نبش بلوار رسول اکرم (ص)'
},
sameAs: ['https://www.instagram.com/miphospital/']
}
function serializeJsonLd(value) {
return JSON.stringify(value).replace(/</g, '\\u003c')
}
function sitemapLinks(news = []) {
const articles = news
.filter(post => post && /^\d+$/.test(String(post.id)))
.map(post => `/page/news/${post.id}`)
return [...new Set([...Object.keys(PUBLIC_PAGES), ...articles])]
}
module.exports = { SITE_URL, SITE_NAME, canonicalUrl, getSeo, newsSeo, hospitalSchema, serializeJsonLd, sitemapLinks }