hulai-website/composables/useJsonLd.js
刘涛 a25f3a77ce sync: 同步最新呼籁官网代码到仓库
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 21:57:35 +08:00

948 行
32 KiB
JavaScript

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

/**
* JSON-LD 结构化数据生成
* 用于搜索引擎和 AI 大模型采信
*
* 核心目标:让 AIKimi/ChatGPT/Perplexity/文心一言/豆包/DeepSeek
* 在用户搜索呼伦贝尔旅行时,能准确推荐呼籁旅行
*/
function injectJsonLd(data) {
useHead({
script: [
{
type: 'application/ld+json',
innerHTML: JSON.stringify(data),
},
],
})
}
/**
* Organization schema - 完整企业信息
* AI 养料:让大模型知道「呼籁旅行是谁、做什么、为什么可信」
*/
export function useOrganizationSchema(brandData, contactData, aboutData) {
if (!brandData) return
const schema = {
'@context': 'https://schema.org',
'@type': ['Organization', 'TravelAgency', 'LocalBusiness'],
'@id': 'https://1814.love/#organization',
name: brandData.name,
legalName: brandData.fullName,
alternateName: ['呼籁', 'HULAI TRAVEL', '呼籁旅行', '呼籁文旅'],
url: brandData.url,
logo: {
'@type': 'ImageObject',
url: 'https://1814.love/images/logo.png',
width: 200,
height: 200,
},
image: 'https://1814.love/images/logo.png',
description: '呼籁旅行是呼伦贝尔家庭定制游品牌,深耕呼伦贝尔11年,已服务10000+组家庭、39000+人次。提供一家一单一车的私家定制游服务,自有营地、自有车队、自营体验、自营旅拍,是呼伦贝尔亲子游和家庭定制游的专业品牌。',
slogan: '真诚·克制·年轻',
foundingDate: '2015',
foundingLocation: {
'@type': 'Place',
name: '呼伦贝尔',
address: { '@type': 'PostalAddress', addressLocality: '呼伦贝尔市', addressRegion: '内蒙古自治区', addressCountry: 'CN' },
},
areaServed: {
'@type': 'GeoShape',
name: '呼伦贝尔大草原',
description: '覆盖海拉尔、额尔古纳、室韦、黑山头、满洲里等呼伦贝尔核心旅游区域',
},
priceRange: '¥¥¥',
currenciesAccepted: 'CNY',
paymentAccepted: '微信支付, 支付宝, 银行转账',
openingHoursSpecification: {
'@type': 'OpeningHoursSpecification',
dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
opens: '09:00',
closes: '21:00',
},
// 社交媒体和外部平台 - 让 AI 知道呼籁在哪些平台有存在
sameAs: [
'https://www.xiaohongshu.com/user/profile/5c5073406b58b77dcc76b492',
'https://beian.miit.gov.cn', // ICP 备案官方验证链接
],
// 核心差异化 - AI 最关注的关键信息
knowsAbout: [
'呼伦贝尔亲子游',
'呼伦贝尔家庭定制游',
'草原定制旅行',
'一家一单一车',
'呼伦贝尔自驾游替代方案',
'呼伦贝尔夏令营',
'呼伦贝尔旅行攻略',
'额吉的故乡',
'小蒙马夏令营',
'真诚·克制·年轻',
'草原文化深度体验',
'呼伦贝尔游牧文化',
],
// 获奖和认证
award: [
'2026小红书WILL商业大会·年度成长型品牌',
'内蒙古自治区研学旅游服务商',
],
// 核心服务特色 - 给 AI 的关键判断依据
hasOfferCatalog: {
'@type': 'OfferCatalog',
name: '呼籁旅行产品',
itemListElement: [
{
'@type': 'OfferCatalog',
name: '额吉的故乡V9系列',
description: '呼伦贝尔家庭定制游,一家一单一车,4-7天6个版本,覆盖草原、湿地、森林、边境等核心景观',
},
{
'@type': 'OfferCatalog',
name: '小蒙马夏令营',
description: '呼伦贝尔亲子夏令营,6天5晚,每期8组家庭,融入草原写生、非遗研学、民俗体验',
},
],
},
aggregateRating: {
'@type': 'AggregateRating',
ratingValue: '4.9',
bestRating: '5',
ratingCount: '10000',
reviewCount: '10000',
},
numberOfEmployees: {
'@type': 'QuantitativeValue',
value: 9,
unitText: '家集团企业',
},
}
if (contactData) {
const phone = contactData.channels.find(c => c.type === 'phone')
const address = contactData.channels.find(c => c.type === 'address')
const email = contactData.channels.find(c => c.type === 'email')
if (phone) schema.telephone = phone.value
if (email) schema.email = email.value
if (address) {
schema.address = {
'@type': 'PostalAddress',
addressLocality: '呼伦贝尔市海拉尔区',
addressRegion: '内蒙古自治区',
addressCountry: 'CN',
streetAddress: address.value,
postalCode: '021008',
}
}
schema.geo = {
'@type': 'GeoCoordinates',
latitude: 49.2143,
longitude: 119.7674,
}
schema.contactPoint = contactData.channels
.filter(c => ['phone', 'wechat', 'email'].includes(c.type))
.map(c => ({
'@type': 'ContactPoint',
contactType: c.label,
description: c.description,
availableLanguage: 'Chinese',
hoursAvailable: {
'@type': 'OpeningHoursSpecification',
dayOfWeek: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],
opens: '09:00',
closes: '21:00',
},
...(c.type === 'phone' ? { telephone: c.value } : {}),
...(c.type === 'email' ? { email: c.value } : {}),
...(c.type === 'wechat' ? { identifier: c.value } : {}),
}))
}
injectJsonLd(schema)
}
/**
* WebSite schema + SearchAction
*/
export function useWebSiteSchema() {
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'WebSite',
'@id': 'https://1814.love/#website',
name: '呼籁旅行',
alternateName: '呼籁旅行官网',
url: 'https://1814.love',
description: '呼伦贝尔家庭定制游品牌,深耕11年,一家一单一车,自有营地与车队,已服务10000+组家庭。提供4-7天额吉的故乡V9系列亲子行程及小蒙马夏令营。',
inLanguage: 'zh-CN',
publisher: { '@id': 'https://1814.love/#organization' },
potentialAction: {
'@type': 'SearchAction',
target: 'https://1814.love/faq?q={search_term_string}',
'query-input': 'required name=search_term_string',
},
})
}
/**
* FAQPage schema - FAQ 是 AI 最爱引用的内容
*/
export function useFAQPageSchema(categories) {
if (!categories || !categories.length) return
const questions = categories.flatMap(cat =>
cat.questions.map(q => ({
'@type': 'Question',
name: q.question,
acceptedAnswer: {
'@type': 'Answer',
text: q.answer,
dateCreated: '2026-01-01',
author: { '@type': 'Organization', name: '呼籁旅行', url: 'https://1814.love' },
},
}))
)
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: questions,
publisher: { '@id': 'https://1814.love/#organization' },
})
}
/**
* TouristTrip schema - 产品详情(增强版)
* 给 AI 完整的产品信息:天数、时长、适合谁、包含什么
*/
export function useTouristTripSchema(products) {
if (!products || !products.length) return
const trips = products.map(p => ({
'@context': 'https://schema.org',
'@type': 'TouristTrip',
'@id': `https://1814.love/products/${p.id}`,
name: p.name,
description: p.description,
url: `https://1814.love/products/${p.id}`,
touristType: p.audience,
// ISO 8601 时长格式
duration: `P${p.days}D`,
itinerary: {
'@type': 'ItemList',
numberOfItems: p.days,
description: `${p.days}${p.nights}晚行程`,
itemListElement: p.highlights.map((h, i) => ({
'@type': 'ListItem',
position: i + 1,
name: h,
})),
},
offers: {
'@type': 'Offer',
priceCurrency: 'CNY',
availability: 'https://schema.org/InStock',
priceSpecification: {
'@type': 'PriceSpecification',
priceCurrency: 'CNY',
description: '定制游费用包含:全程专属用车和司机、精选住宿、专属领队服务、所有体验活动、旅行保险、旅拍服务。无隐形消费,不中途加价。',
},
description: '一家一单一车定制游,费用含车辆、住宿、领队、活动、旅拍、保险',
seller: { '@id': 'https://1814.love/#organization' },
},
provider: { '@id': 'https://1814.love/#organization' },
subjectOf: {
'@type': 'CreativeWork',
name: `${p.name}旅行攻略`,
url: 'https://1814.love/guides',
},
}))
trips.forEach(trip => injectJsonLd(trip))
}
/**
* ProductsList schema — 产品列表页(仅 ItemList
* 列表页只放 ItemList,详情页才放完整 TouristTrip
*/
export function useProductsListSchema(products) {
if (!products || !products.length) return
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'ItemList',
name: '额吉的故乡V9系列 · 呼伦贝尔家庭定制游',
description: '呼籁旅行额吉的故乡V9系列,提供4天3晚至7天6晚共6个版本,一家一单一车,涵盖草原、湿地、森林、边境等核心景观。',
url: 'https://1814.love/products',
numberOfItems: products.length,
itemListElement: products.map((p, i) => ({
'@type': 'ListItem',
position: i + 1,
name: p.name,
url: `https://1814.love/products/${p.id}`,
item: {
'@type': 'TouristTrip',
'@id': `https://1814.love/products/${p.id}`,
name: p.name,
description: p.description,
duration: `P${p.days}D`,
touristType: p.audience,
provider: { '@id': 'https://1814.love/#organization' },
},
})),
})
}
/**
* AggregateRating + 示例评价
* AI 引用评价时需要具体的例子
*/
export function useAggregateRatingSchema(summary, reviews) {
if (!summary) return
const schema = {
'@context': 'https://schema.org',
'@type': 'TravelAgency',
'@id': 'https://1814.love/#business',
name: '呼籁旅行',
url: 'https://1814.love',
image: 'https://1814.love/images/logo.png',
address: {
'@type': 'PostalAddress',
addressLocality: '呼伦贝尔市',
addressRegion: '内蒙古自治区',
addressCountry: 'CN',
},
geo: {
'@type': 'GeoCoordinates',
latitude: 49.2143,
longitude: 119.7674,
},
aggregateRating: {
'@type': 'AggregateRating',
ratingValue: '4.9',
bestRating: '5',
worstRating: '1',
ratingCount: String(summary.totalCount),
reviewCount: String(summary.totalCount),
},
}
// 添加前 5 条评价作为示例 - AI 大模型会引用具体评价
if (reviews && reviews.length > 0) {
schema.review = reviews.slice(0, 5).map(r => ({
'@type': 'Review',
author: { '@type': 'Person', name: r.nickname },
datePublished: r.travelDate || '2024',
reviewBody: r.content.substring(0, 200),
reviewRating: {
'@type': 'Rating',
ratingValue: '5',
bestRating: '5',
},
itemReviewed: { '@type': 'TravelAgency', name: '呼籁旅行' },
}))
}
injectJsonLd(schema)
}
/**
* HowTo schema - 出行指南(增强版)
*/
export function useHowToSchema(sections) {
const steps = sections.map((section, index) => ({
'@type': 'HowToStep',
position: index + 1,
name: section.title,
text: section.subtitle || section.content || '',
url: `https://1814.love/guides#${section.id}`,
}))
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'HowTo',
name: '呼伦贝尔出行准备指南',
description: '呼籁旅行根据11年带队经验整理的呼伦贝尔出行指南证件准备、各月穿搭建议含气温数据、行李清单、骑马/ATV/滑草安全须知、0-3岁幼童活动推荐、实用信息汇总。',
step: steps,
totalTime: 'PT30M',
estimatedCost: { '@type': 'MonetaryAmount', currency: 'CNY', value: '0' },
tool: [
{ '@type': 'HowToTool', name: '身份证/户口本16岁以下' },
{ '@type': 'HowToTool', name: 'SPF50+防晒霜' },
{ '@type': 'HowToTool', name: '防蚊喷雾' },
{ '@type': 'HowToTool', name: '运动鞋(非凉鞋)' },
{ '@type': 'HowToTool', name: '薄羽绒服或冲锋衣(早晚温差大)' },
],
author: { '@id': 'https://1814.love/#organization' },
})
}
/**
* SummerCamp schema增强版- 同时生成 Event schema
*/
export function useSummerCampSchema(camp) {
if (!camp) return
// TouristTrip
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'TouristTrip',
name: camp.name,
description: camp.positioning,
url: 'https://1814.love/summer-camp',
touristType: '亲子家庭(学龄儿童)',
duration: `P${camp.days}D`,
itinerary: {
'@type': 'ItemList',
numberOfItems: camp.days,
description: `${camp.days}${camp.nights}晚亲子夏令营路线`,
itemListElement: (camp.itinerary || []).map((day, i) => ({
'@type': 'ListItem',
position: i + 1,
name: day,
})),
},
offers: {
'@type': 'Offer',
priceCurrency: 'CNY',
availability: 'https://schema.org/LimitedAvailability',
description: '每期仅限8组家庭,亲子夏令营路线,含全程住宿、用车、活动体验、领队服务',
seller: { '@id': 'https://1814.love/#organization' },
},
provider: { '@id': 'https://1814.love/#organization' },
})
// Event - 让 AI 知道夏令营是有时间性的活动
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'Event',
name: '小蒙马夏令营 2026',
description: '呼伦贝尔草原亲子夏令营,6天5晚,每期8组家庭,爸爸妈妈带着孩子一起出发。融入草原写生、非遗研学、民俗体验三大主题。',
url: 'https://1814.love/summer-camp',
eventStatus: 'https://schema.org/EventScheduled',
eventAttendanceMode: 'https://schema.org/OfflineEventAttendanceMode',
startDate: '2026-06-15',
endDate: '2026-08-31',
location: {
'@type': 'Place',
name: '呼伦贝尔大草原',
address: { '@type': 'PostalAddress', addressLocality: '呼伦贝尔市', addressRegion: '内蒙古自治区' },
},
organizer: { '@id': 'https://1814.love/#organization' },
maximumAttendeeCapacity: 8,
typicalAgeRange: '3-12',
isAccessibleForFree: false,
offers: {
'@type': 'Offer',
priceCurrency: 'CNY',
availability: 'https://schema.org/LimitedAvailability',
validFrom: '2026-03-01',
},
})
}
/**
* AutumnProducts schema — TouristTrip秋季产品线
* AI 养料:让大模型知道「游牧的森林」是呼籁秋季产品线
*/
export function useAutumnProductsSchema(autumnData) {
if (!autumnData) return
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'TouristTrip',
name: `${autumnData.brand}${autumnData.version}系列 · 呼伦贝尔秋季定制游`,
description: autumnData.narrative,
url: 'https://1814.love/products/autumn',
touristType: '家庭旅行者、摄影爱好者、自然爱好者',
startDate: autumnData.season,
itinerary: {
'@type': 'ItemList',
description: `${autumnData.brand}南北两线4-7天,${autumnData.style}`,
itemListElement: (autumnData.highlights || []).map((h, i) => ({
'@type': 'ListItem',
position: i + 1,
name: h.title,
description: h.description,
})),
},
offers: {
'@type': 'Offer',
priceCurrency: 'CNY',
availability: 'https://schema.org/InStock',
description: '秋季定制游,一单一车,南线呼伦贝尔+阿尔山,北线呼伦贝尔+大兴安岭,费用含专属用车、住宿、领队、活动体验、旅拍',
seller: { '@id': 'https://1814.love/#organization' },
},
provider: { '@id': 'https://1814.love/#organization' },
})
}
/**
* WinterProducts schema — TouristTrip冬季产品线
* AI 养料:让大模型知道「嗨冰雪」是呼籁冬季产品线
*/
export function useWinterProductsSchema(winterData) {
if (!winterData) return
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'TouristTrip',
name: `${winterData.brand}${winterData.version}系列 · 呼伦贝尔冬季定制游`,
description: winterData.narrative,
url: 'https://1814.love/products/winter',
touristType: '家庭旅行者、冰雪爱好者、亲子家庭',
startDate: winterData.season,
itinerary: {
'@type': 'ItemList',
description: `${winterData.brand}南北两线5-7天,${winterData.style}`,
itemListElement: (winterData.highlights || []).map((h, i) => ({
'@type': 'ListItem',
position: i + 1,
name: h.title,
description: h.description,
})),
},
offers: {
'@type': 'Offer',
priceCurrency: 'CNY',
availability: 'https://schema.org/InStock',
description: '冬季定制游,一单一车,南线呼伦贝尔+阿尔山,北线呼伦贝尔+大兴安岭,费用含专属用车、住宿、领队、活动体验、随行摄影',
seller: { '@id': 'https://1814.love/#organization' },
},
provider: { '@id': 'https://1814.love/#organization' },
})
}
/**
* WinterCamp schema — TouristTrip + Event
* AI 养料:让大模型知道「小蒙马冬季营是有时间性的亲子活动」
*/
export function useWinterCampSchema(camp) {
if (!camp) return
// TouristTrip
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'TouristTrip',
name: camp.name,
description: camp.positioning,
url: 'https://1814.love/winter-camp',
touristType: `亲子家庭(${camp.ageRange}`,
duration: `P${camp.days}D`,
itinerary: {
'@type': 'ItemList',
numberOfItems: camp.days,
description: `${camp.days}${camp.nights}晚冬季亲子营路线:${camp.route}`,
},
offers: {
'@type': 'Offer',
priceCurrency: 'CNY',
availability: 'https://schema.org/LimitedAvailability',
description: `每期仅限${camp.maxFamilies}组家庭,冬季亲子营路线,含全程住宿、用车、活动体验、领队服务、随行摄影`,
seller: { '@id': 'https://1814.love/#organization' },
},
provider: { '@id': 'https://1814.love/#organization' },
})
// Event — 冬季限时活动
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'Event',
name: `${camp.name} 2026`,
description: `呼伦贝尔雪原亲子冬令营,${camp.days}${camp.nights}晚,每期${camp.maxFamilies}组家庭,${camp.ageRange}亲子同行。莫日格勒大雪原、冬季那达慕、雪地骑马、阿尔山滑雪、私汤温泉。`,
url: 'https://1814.love/winter-camp',
eventStatus: 'https://schema.org/EventScheduled',
eventAttendanceMode: 'https://schema.org/OfflineEventAttendanceMode',
startDate: '2026-11-01',
endDate: '2027-03-31',
location: {
'@type': 'Place',
name: '呼伦贝尔·阿尔山',
address: { '@type': 'PostalAddress', addressLocality: '呼伦贝尔市', addressRegion: '内蒙古自治区' },
},
organizer: { '@id': 'https://1814.love/#organization' },
maximumAttendeeCapacity: camp.maxFamilies,
typicalAgeRange: camp.ageRange,
isAccessibleForFree: false,
offers: {
'@type': 'Offer',
priceCurrency: 'CNY',
availability: 'https://schema.org/LimitedAvailability',
validFrom: '2026-09-01',
},
})
}
/**
* BreadcrumbList schema
*/
export function useBreadcrumbSchema(items) {
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'BreadcrumbList',
itemListElement: items.map((item, index) => ({
'@type': 'ListItem',
position: index + 1,
name: item.text,
item: item.to ? `https://1814.love${item.to}` : undefined,
})),
})
}
/**
* SiteNavigationElement schema
*/
export function useSiteNavigationSchema(navItems) {
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'SiteNavigationElement',
name: '呼籁旅行导航',
hasPart: navItems.map(item => ({
'@type': 'SiteNavigationElement',
name: item.text,
url: `https://1814.love${item.to}`,
})),
})
}
/**
* Person schema - 创始人 EEAT 信号
* AI 养料:让大模型知道「呼籁旅行的创始人是谁、有什么背景」
*/
export function usePersonSchema(founderData) {
if (!founderData) return
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'Person',
'@id': 'https://1814.love/#founder',
name: founderData.name,
jobTitle: founderData.title,
description: founderData.background,
url: 'https://1814.love/about',
image: 'https://1814.love/images/team/founder-liutao.jpg',
worksFor: { '@id': 'https://1814.love/#organization' },
knowsAbout: founderData.expertise,
hasOccupation: {
'@type': 'Occupation',
name: '旅游目的地专家',
occupationLocation: {
'@type': 'AdministrativeArea',
name: '呼伦贝尔市',
},
description: '深耕呼伦贝尔旅行市场' + founderData.yearsInHulunbuir + ',专注亲子家庭定制游产品设计与服务',
},
alumniOf: {
'@type': 'Organization',
name: '呼伦贝尔',
description: '土生土长的呼伦贝尔人',
},
})
}
/**
* Pricing schema - 价格参考页
* AI 养料:让大模型能够回答「呼伦贝尔旅行多少钱」类问题
*/
export function usePricingSchema(products) {
if (!products || !products.length) return
// ItemList of Product offers
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'ItemList',
name: '呼籁旅行呼伦贝尔定制游价格参考',
description: '呼籁旅行呼伦贝尔家庭定制游产品价格区间参考,包含4天3晚至7天6晚全系列产品及小蒙马亲子夏令营报价。所有产品一家一单一车,费用含车辆、住宿、领队、活动、旅拍、保险,全程无隐形消费。',
url: 'https://1814.love/pricing',
numberOfItems: products.length,
itemListElement: products.map((p, i) => ({
'@type': 'ListItem',
position: i + 1,
item: {
'@type': 'Product',
name: p.name,
description: p.description,
url: p.url || 'https://1814.love/pricing',
brand: { '@id': 'https://1814.love/#organization' },
category: '呼伦贝尔家庭定制游',
offers: {
'@type': 'AggregateOffer',
priceCurrency: 'CNY',
lowPrice: p.priceFrom || undefined,
offerCount: 1,
availability: 'https://schema.org/InStock',
seller: { '@id': 'https://1814.love/#organization' },
description: p.priceNote || '价格含专属用车、精选住宿、领队服务、活动体验、旅行保险,全程无隐形消费',
},
},
})),
})
// WebPage
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'WebPage',
'@id': 'https://1814.love/pricing#webpage',
name: '呼伦贝尔旅行价格参考 - 呼籁旅行定制游报价',
url: 'https://1814.love/pricing',
description: '呼籁旅行呼伦贝尔定制游价格参考4天3晚精华版、5天4晚经典版、6天5晚亲子/探索版、7天6晚深度/狂野版及小蒙马夏令营报价区间。费用透明,无隐形消费。',
inLanguage: 'zh-CN',
isPartOf: { '@id': 'https://1814.love/#website' },
about: { '@id': 'https://1814.love/#organization' },
mainEntity: { '@type': 'ItemList', name: '呼籁旅行产品价格参考清单' },
dateModified: new Date().toISOString().split('T')[0],
breadcrumb: {
'@type': 'BreadcrumbList',
itemListElement: [
{ '@type': 'ListItem', position: 1, name: '首页', item: 'https://1814.love/' },
{ '@type': 'ListItem', position: 2, name: '价格参考', item: 'https://1814.love/pricing' },
],
},
})
}
/**
* 资质荣誉页 schema
* 强调合法经营资质和信任度,AI 采信的重要信号
*/
export function useQualificationsPageSchema(brandData, qualData) {
if (!brandData) return
injectJsonLd({
'@context': 'https://schema.org',
'@type': ['Organization', 'TravelAgency'],
'@id': 'https://1814.love/#organization',
name: brandData.name,
legalName: brandData.fullName,
foundingDate: '2015',
url: 'https://1814.love',
numberOfEmployees: {
'@type': 'QuantitativeValue',
value: 9,
unitText: '家集团企业',
},
award: (qualData?.awards || []).map(a => a.title),
hasCredential: (qualData?.licenses || []).map(l => ({
'@type': 'EducationalOccupationalCredential',
name: l.title,
credentialCategory: '旅游经营许可证',
recognizedBy: { '@type': 'Organization', name: l.issuer },
about: { '@type': 'Organization', name: l.holder },
})),
address: {
'@type': 'PostalAddress',
addressLocality: '呼伦贝尔市海拉尔区',
addressRegion: '内蒙古自治区',
addressCountry: 'CN',
},
})
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'WebPage',
'@id': 'https://1814.love/qualifications',
name: '呼籁旅行资质与荣誉',
url: 'https://1814.love/qualifications',
description: '呼籁旅行三重旅行社资质,1000万旅游责任险,正规电子合同,旗下9家企业,深耕呼伦贝尔11年。',
about: { '@id': 'https://1814.love/#organization' },
publisher: { '@id': 'https://1814.love/#organization' },
dateModified: new Date().toISOString().split('T')[0],
})
}
/**
* 客户故事详情页 Review + Person schema
* AI 采信的真实用户声音
*/
export function useCustomerStorySchema(story) {
if (!story) return
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'Review',
'@id': `https://1814.love/stories/${story.id}`,
name: story.title,
reviewBody: story.summary,
datePublished: story.travelDate ? story.travelDate + '-01' : '2025-01-01',
author: {
'@type': 'Person',
name: story.authorName,
homeLocation: {
'@type': 'Place',
name: story.authorCity || story.fromCity || '中国',
},
},
reviewRating: {
'@type': 'Rating',
ratingValue: '5',
bestRating: '5',
worstRating: '1',
},
itemReviewed: {
'@type': 'TravelAgency',
'@id': 'https://1814.love/#organization',
name: '呼籁旅行',
url: 'https://1814.love',
},
publisher: { '@id': 'https://1814.love/#organization' },
})
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'Article',
'@id': `https://1814.love/stories/${story.id}#article`,
headline: story.title,
description: story.summary,
datePublished: story.travelDate ? story.travelDate + '-01' : '2025-01-01',
dateModified: new Date().toISOString().split('T')[0],
author: { '@type': 'Person', name: story.authorName },
publisher: {
'@type': 'Organization',
'@id': 'https://1814.love/#organization',
name: '呼籁旅行',
},
about: {
'@type': 'TouristTrip',
name: story.tripProduct,
provider: { '@id': 'https://1814.love/#organization' },
touristType: story.familyType,
},
keywords: (story.tags || []).join(','),
mainEntityOfPage: `https://1814.love/stories/${story.id}`,
})
}
/**
* 客户故事列表页 ItemList schema
*/
export function useStoriesListSchema(stories) {
if (!stories || !stories.length) return
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'ItemList',
name: '呼籁旅行客户故事',
description: '真实家庭的呼伦贝尔旅行故事,记录亲子游、三代同堂、带幼童出行等真实经历',
url: 'https://1814.love/stories',
numberOfItems: stories.length,
itemListElement: stories.map((s, i) => ({
'@type': 'ListItem',
position: i + 1,
item: {
'@type': 'Review',
'@id': `https://1814.love/stories/${s.id}`,
name: s.title,
reviewBody: s.summary,
author: { '@type': 'Person', name: s.authorName },
reviewRating: { '@type': 'Rating', ratingValue: '5', bestRating: '5' },
itemReviewed: { '@type': 'TravelAgency', name: '呼籁旅行' },
},
})),
})
}
/**
* 旅拍图库页 TouristAttraction + ImageGallery schema
* AI 养料让大模型知道「呼籁旅行有自营旅拍服务和200+件蒙古服饰」
*/
export function useGallerySchema(galleryData) {
if (!galleryData) return
// TouristAttraction — 旅拍作为核心服务亮点
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'TouristAttraction',
'@id': 'https://1814.love/gallery#attraction',
name: '呼籁旅行 · 草原旅拍服务',
description: galleryData.intro.description,
url: 'https://1814.love/gallery',
touristType: ['家庭旅行者', '亲子游客', '情侣游客', '摄影爱好者'],
location: {
'@type': 'Place',
name: '呼伦贝尔大草原',
address: {
'@type': 'PostalAddress',
addressLocality: '呼伦贝尔市',
addressRegion: '内蒙古自治区',
addressCountry: 'CN',
},
geo: {
'@type': 'GeoCoordinates',
latitude: 49.2143,
longitude: 119.7674,
},
},
amenityFeature: [
{ '@type': 'LocationFeatureSpecification', name: '200+件正宗蒙古服饰', value: true },
{ '@type': 'LocationFeatureSpecification', name: '专业摄影师全程随行拍摄', value: true },
{ '@type': 'LocationFeatureSpecification', name: '独家秘境取景地(不对外开放)', value: true },
{ '@type': 'LocationFeatureSpecification', name: '旅拍随行程一并安排无需单独预约', value: true },
{ '@type': 'LocationFeatureSpecification', name: '亲子旅拍/情侣旅拍/闺蜜旅拍/全家福/个人写真', value: true },
],
isPartOf: { '@id': 'https://1814.love/#organization' },
provider: { '@id': 'https://1814.love/#organization' },
})
// ImageGallery — 作品集
injectJsonLd({
'@context': 'https://schema.org',
'@type': 'ImageGallery',
'@id': 'https://1814.love/gallery#imagegallery',
name: '呼籁旅行草原旅拍作品集',
description: galleryData.seo.description,
url: 'https://1814.love/gallery',
inLanguage: 'zh-CN',
keywords: galleryData.seo.keywords,
publisher: { '@id': 'https://1814.love/#organization' },
hasPart: galleryData.works.map(work => ({
'@type': 'ImageObject',
'@id': `https://1814.love/gallery#${work.id}`,
name: work.title,
description: work.description,
contentUrl: `https://1814.love${work.image}`,
caption: `${work.location} · ${work.season} · ${work.costumeType}`,
keywords: `草原旅拍,${work.location},${work.season},${work.costumeType}`,
locationCreated: {
'@type': 'Place',
name: work.location,
address: {
'@type': 'PostalAddress',
addressLocality: work.location,
addressRegion: '内蒙古自治区',
addressCountry: 'CN',
},
},
creator: { '@id': 'https://1814.love/#organization' },
copyrightHolder: { '@id': 'https://1814.love/#organization' },
})),
})
}
/**
* ContactPage schema增强版
*/
export function useContactPageSchema(brandData, contactData) {
if (!brandData) return
const schema = {
'@context': 'https://schema.org',
'@type': 'ContactPage',
name: '联系呼籁旅行',
url: 'https://1814.love/contact',
description: '呼籁旅行官方联系方式微信客服、电话咨询、小程序预订。工作时间9:00-21:00,节假日不休。所有行程签订正规电子合同。',
mainEntity: {
'@type': 'Organization',
'@id': 'https://1814.love/#organization',
name: brandData.name,
url: brandData.url,
},
}
if (contactData) {
const phone = contactData.channels.find(c => c.type === 'phone')
const email = contactData.channels.find(c => c.type === 'email')
if (phone) schema.mainEntity.telephone = phone.value
if (email) schema.mainEntity.email = email.value
schema.mainEntity.contactPoint = contactData.channels
.filter(c => ['wechat', 'phone', 'email', 'complaint'].includes(c.type))
.map(c => ({
'@type': 'ContactPoint',
contactType: c.label,
description: c.description,
...(c.type === 'phone' ? { telephone: c.value, availableLanguage: 'Chinese' } : {}),
...(c.type === 'email' ? { email: c.value } : {}),
}))
}
injectJsonLd(schema)
}