seo-meta
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSEO Meta Tags
SEO元标签
Status: Production Ready ✅
Last Updated: 2026-01-14
Source: Schema.org, Open Graph Protocol, Twitter Developer Docs
状态: 可用于生产环境 ✅
最后更新: 2026-01-14
来源: Schema.org、Open Graph Protocol、Twitter开发者文档
Quick Start
快速开始
Every page needs:
tsx
<head>
{/* Basic SEO */}
<title>Service in Location | Brand Name</title>
<meta name="description" content="Value prop. Differentiator. Call to action." />
<link rel="canonical" href="https://example.com/page" />
{/* Open Graph */}
<meta property="og:title" content="Service in Location" />
<meta property="og:description" content="Value prop. Differentiator. CTA." />
<meta property="og:image" content="https://example.com/og-image.jpg" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="website" />
{/* Twitter Card */}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Service in Location" />
<meta name="twitter:description" content="Value prop. Differentiator. CTA." />
<meta name="twitter:image" content="https://example.com/og-image.jpg" />
{/* JSON-LD Structured Data */}
<script type="application/ld+json">
{JSON.stringify({
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Business Name",
"description": "What we do",
"@id": "https://example.com",
"url": "https://example.com",
"telephone": "+61-XXX-XXX-XXX",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Sydney",
"addressRegion": "NSW",
"postalCode": "2000",
"addressCountry": "AU"
}
})}
</script>
</head>每个页面都需要:
tsx
<head>
{/* 基础SEO标签 */}
<title>Service in Location | Brand Name</title>
<meta name="description" content="Value prop. Differentiator. Call to action." />
<link rel="canonical" href="https://example.com/page" />
{/* Open Graph标签 */}
<meta property="og:title" content="Service in Location" />
<meta property="og:description" content="Value prop. Differentiator. CTA." />
<meta property="og:image" content="https://example.com/og-image.jpg" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="website" />
{/* Twitter Card标签 */}
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Service in Location" />
<meta name="twitter:description" content="Value prop. Differentiator. CTA." />
<meta name="twitter:image" content="https://example.com/og-image.jpg" />
{/* JSON-LD结构化数据 */}
<script type="application/ld+json">
{JSON.stringify({
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Business Name",
"description": "What we do",
"@id": "https://example.com",
"url": "https://example.com",
"telephone": "+61-XXX-XXX-XXX",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Sydney",
"addressRegion": "NSW",
"postalCode": "2000",
"addressCountry": "AU"
}
})}
</script>
</head>Title Tag Patterns
标题标签格式
Character Limits:
- Google: 50-60 characters (desktop), 78 (mobile)
- Social: 60-70 characters
Page Type Formulas:
| Page Type | Pattern | Example |
|---|---|---|
| Home | [Brand] - [Primary Service] in [Location] | Acme Plumbing - 24/7 Emergency Plumber Sydney |
| Service | [Service] in [Location] | [Brand] | Hot Water Repairs Sydney | Acme Plumbing |
| Location | [Service] [Suburb] | [Brand] | Plumber Bondi | Acme Plumbing |
| About | About [Brand] - [Tagline/USP] | About Acme - Licensed Plumbers Since 1995 |
| Contact | Contact [Brand] - [Location] | [Phone] | Contact Acme Plumbing - Sydney | 1300 XXX XXX |
Title Modifiers (add credibility):
- 24/7 Emergency
- Licensed & Insured
- Free Quotes
- Same Day Service
- Family Owned
- Award Winning
Anti-Patterns (avoid):
- ❌ "Welcome to..." (wastes characters)
- ❌ Keyword stuffing (plumber plumbing plumbers)
- ❌ ALL CAPS (looks spammy)
- ❌ Special characters (★ § ¶)
字符限制:
- Google:50-60个字符(桌面端),78个字符(移动端)
- 社交平台:60-70个字符
页面类型公式:
| 页面类型 | 格式 | 示例 |
|---|---|---|
| 首页 | [品牌] - [核心服务] in [地区] | Acme Plumbing - 悉尼24小时紧急管道工 |
| 服务页 | [服务项目] in [地区] | [品牌] | 悉尼热水维修 | Acme Plumbing |
| 地区页 | [服务项目] [郊区] | [品牌] | 邦代管道工 | Acme Plumbing |
| 关于我们 | About [品牌] - [标语/独特卖点] | About Acme - 1995年成立的持证管道服务商 |
| 联系我们 | Contact [品牌] - [地区] | [电话] | Contact Acme Plumbing - 悉尼 | 1300 XXX XXX |
标题修饰词(提升可信度):
- 24小时紧急服务
- 持证上岗且有保险
- 免费报价
- 当日服务
- 家族经营
- 屡获殊荣
避坑指南(请勿使用):
- ❌ "欢迎来到..."(浪费字符)
- ❌ 关键词堆砌(如 plumber plumbing plumbers)
- ❌ 全大写(看起来像垃圾信息)
- ❌ 特殊字符(★ § ¶)
Meta Description Patterns
元描述格式
Character Limits:
- Desktop: 155-160 characters
- Mobile: 120-130 characters
Formula:
[Value prop] [Service] in [Location]. [Differentiator]. [CTA].Examples by Page Type:
Home Page:
Fast, reliable plumbing services in Sydney. 24/7 emergency response, licensed plumbers, upfront pricing. Call 1300 XXX XXX for same-day service.Service Page:
Expert hot water repairs in Sydney. Fix or replace electric, gas & solar systems. Licensed technicians, 1-year warranty. Book online or call 1300 XXX XXX.Location Page:
Trusted plumber in Bondi. Blocked drains, leaks, hot water, gas fitting. Same-day service, upfront quotes. Call your local plumber on 1300 XXX XXX.Power Words (use sparingly):
- Trust: Licensed, Certified, Insured, Guaranteed, Trusted
- Speed: Fast, Quick, Same Day, Emergency, 24/7, Instant
- Value: Affordable, Competitive, Upfront, No Hidden Fees, Free Quote
- Local: Local, Nearby, Your Area, [Suburb Name]
- Quality: Expert, Professional, Experienced, Award Winning
字符限制:
- 桌面端:155-160个字符
- 移动端:120-130个字符
公式:
[价值主张] [服务项目] in [地区]。[差异化优势]。[行动号召]。按页面类型示例:
首页:
悉尼地区快速可靠的管道服务。24小时紧急响应、持证管道工、明码标价。立即致电1300 XXX XXX获取当日服务。服务页:
悉尼专业热水维修服务。维修或更换电、气、太阳能系统。持证技术人员、1年质保。在线预约或致电1300 XXX XXX。地区页:
邦代值得信赖的管道工。提供疏通下水道、漏水维修、热水系统、燃气安装服务。当日服务、明码报价。致电本地管道工1300 XXX XXX。强力词汇(谨慎使用):
- 信任类:持证、认证、有保险、质保、值得信赖
- 速度类:快速、即时、当日服务、紧急、24小时、即刻
- 价值类:实惠、性价比高、明码标价、无隐藏费用、免费报价
- 本地类:本地、附近、您所在地区、[郊区名称]
- 品质类:专家、专业、经验丰富、屡获殊荣
Open Graph Tags
Open Graph标签
Required Tags:
html
<meta property="og:title" content="Service in Location" />
<meta property="og:description" content="Value prop. Differentiator. CTA." />
<meta property="og:image" content="https://example.com/og-image.jpg" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="website" />Image Requirements:
- Dimensions: 1200x630px (1.91:1 ratio)
- Format: JPG or PNG (JPG preferred for file size)
- File size: <1MB (ideally <300KB)
- Text overlay: Keep important text center (safe zone: 1000x530)
og:type Values by Page Type:
| Page Type | og:type |
|---|---|
| Home, Service, Location | website |
| Blog Post | article |
| Business Profile | business.business |
Optional but Recommended:
html
<meta property="og:site_name" content="Brand Name" />
<meta property="og:locale" content="en_AU" />必填标签:
html
<meta property="og:title" content="Service in Location" />
<meta property="og:description" content="Value prop. Differentiator. CTA." />
<meta property="og:image" content="https://example.com/og-image.jpg" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="website" />图片要求:
- 尺寸:1200x630px(1.91:1比例)
- 格式:JPG或PNG(优先JPG以减小文件大小)
- 文件大小:<1MB(理想情况下<300KB)
- 文字覆盖:重要文字放在中间安全区域(1000x530px)
按页面类型的og:type值:
| 页面类型 | og:type |
|---|---|
| 首页、服务页、地区页 | website |
| 博客文章 | article |
| 企业资料 | business.business |
可选但推荐添加:
html
<meta property="og:site_name" content="品牌名称" />
<meta property="og:locale" content="en_AU" />Twitter Cards
Twitter Cards
Card Types:
| Type | Use Case |
|---|---|
| summary | Small square image (1:1), basic info |
| summary_large_image | Large image (1.91:1), most common |
Required Tags:
html
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Service in Location" />
<meta name="twitter:description" content="Value prop. Differentiator. CTA." />
<meta name="twitter:image" content="https://example.com/og-image.jpg" />Optional:
html
<meta name="twitter:site" content="@yourbrand" />
<meta name="twitter:creator" content="@authorhandle" />Fallback Behavior:
- If twitter:title missing, uses og:title
- If twitter:description missing, uses og:description
- If twitter:image missing, uses og:image
Best Practice: Define og:* tags first, only add twitter:* if values differ.
卡片类型:
| 类型 | 适用场景 |
|---|---|
| summary | 小正方形图片(1:1)、基础信息展示 |
| summary_large_image | 大尺寸图片(1.91:1)、最常用类型 |
必填标签:
html
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Service in Location" />
<meta name="twitter:description" content="Value prop. Differentiator. CTA." />
<meta name="twitter:image" content="https://example.com/og-image.jpg" />可选标签:
html
<meta name="twitter:site" content="@yourbrand" />
<meta name="twitter:creator" content="@authorhandle" />降级行为:
- 如果缺少twitter:title,将使用og:title
- 如果缺少twitter:description,将使用og:description
- 如果缺少twitter:image,将使用og:image
最佳实践:先定义og:*标签,仅当值不同时再添加twitter:*标签。
JSON-LD Structured Data
JSON-LD结构化数据
LocalBusiness Schema (Most Important)
LocalBusiness Schema(最重要)
Use for homepage and contact page:
json
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Acme Plumbing",
"description": "Licensed plumbing services in Sydney",
"@id": "https://acmeplumbing.com.au",
"url": "https://acmeplumbing.com.au",
"logo": "https://acmeplumbing.com.au/logo.png",
"image": "https://acmeplumbing.com.au/og-image.jpg",
"telephone": "+61-XXX-XXX-XXX",
"email": "info@acmeplumbing.com.au",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "Sydney",
"addressRegion": "NSW",
"postalCode": "2000",
"addressCountry": "AU"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": -33.8688,
"longitude": 151.2093
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "17:00"
}
],
"sameAs": [
"https://facebook.com/acmeplumbing",
"https://instagram.com/acmeplumbing"
]
}Specific Business Types (instead of generic LocalBusiness):
- Plumber, Electrician, Locksmith, HVAC (HVACBusiness)
- Dentist, Attorney, Accountant
- Restaurant, Cafe, FoodEstablishment
- Store, AutoRepair, BeautySalon
适用于首页和联系我们页面:
json
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Acme Plumbing",
"description": "悉尼持证管道服务提供商",
"@id": "https://acmeplumbing.com.au",
"url": "https://acmeplumbing.com.au",
"logo": "https://acmeplumbing.com.au/logo.png",
"image": "https://acmeplumbing.com.au/og-image.jpg",
"telephone": "+61-XXX-XXX-XXX",
"email": "info@acmeplumbing.com.au",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main Street",
"addressLocality": "Sydney",
"addressRegion": "NSW",
"postalCode": "2000",
"addressCountry": "AU"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": -33.8688,
"longitude": 151.2093
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "07:00",
"closes": "17:00"
}
],
"sameAs": [
"https://facebook.com/acmeplumbing",
"https://instagram.com/acmeplumbing"
]
}特定企业类型(替代通用LocalBusiness):
- 管道工、电工、锁匠、暖通空调(HVACBusiness)
- 牙医、律师、会计师
- 餐厅、咖啡馆、食品商家
- 商店、汽车维修、美容院
Service Schema
Service Schema
Use for service pages:
json
{
"@context": "https://schema.org",
"@type": "Service",
"name": "Hot Water Repairs",
"description": "Fast hot water system repairs in Sydney",
"provider": {
"@type": "Plumber",
"name": "Acme Plumbing",
"url": "https://acmeplumbing.com.au"
},
"areaServed": {
"@type": "City",
"name": "Sydney"
},
"availableChannel": {
"@type": "ServiceChannel",
"serviceUrl": "https://acmeplumbing.com.au/hot-water-repairs",
"servicePhone": "+61-XXX-XXX-XXX"
}
}适用于服务页面:
json
{
"@context": "https://schema.org",
"@type": "Service",
"name": "热水维修",
"description": "悉尼快速热水系统维修服务",
"provider": {
"@type": "Plumber",
"name": "Acme Plumbing",
"url": "https://acmeplumbing.com.au"
},
"areaServed": {
"@type": "City",
"name": "Sydney"
},
"availableChannel": {
"@type": "ServiceChannel",
"serviceUrl": "https://acmeplumbing.com.au/hot-water-repairs",
"servicePhone": "+61-XXX-XXX-XXX"
}
}FAQ Schema (Rich Snippets)
FAQ Schema(富文本片段)
Use for FAQ sections:
json
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How much does a plumber cost in Sydney?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Plumbing rates in Sydney typically range from $100-$150 per hour for standard work. Emergency callouts may incur higher rates. We provide upfront quotes before starting work."
}
},
{
"@type": "Question",
"name": "Do you offer same-day service?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes, we offer same-day plumbing service across Sydney for urgent repairs. Call us before 2pm for same-day availability."
}
}
]
}适用于FAQ板块:
json
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "悉尼管道工的收费标准是多少?",
"acceptedAnswer": {
"@type": "Answer",
"text": "悉尼管道服务的时薪通常在100-150澳元之间。紧急上门服务可能会收取更高费用。我们在开工前会提供明码报价。"
}
},
{
"@type": "Question",
"name": "你们提供当日服务吗?",
"acceptedAnswer": {
"@type": "Answer",
"text": "是的,我们为悉尼地区的紧急维修提供当日服务。请在下午2点前致电预约以确保当日可用。"
}
}
]
}BreadcrumbList Schema
BreadcrumbList Schema
Use on all pages except homepage:
json
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://acmeplumbing.com.au"
},
{
"@type": "ListItem",
"position": 2,
"name": "Services",
"item": "https://acmeplumbing.com.au/services"
},
{
"@type": "ListItem",
"position": 3,
"name": "Hot Water Repairs",
"item": "https://acmeplumbing.com.au/hot-water-repairs"
}
]
}适用于除首页外的所有页面:
json
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://acmeplumbing.com.au"
},
{
"@type": "ListItem",
"position": 2,
"name": "服务项目",
"item": "https://acmeplumbing.com.au/services"
},
{
"@type": "ListItem",
"position": 3,
"name": "热水维修",
"item": "https://acmeplumbing.com.au/hot-water-repairs"
}
]
}Canonical URLs
规范网址(Canonical URLs)
When to Use:
- Every page should have a self-referencing canonical
- Duplicate content (pagination, filters, print versions)
- Syndicated content
- Cross-domain duplicates
Self-Referencing Canonical:
html
<!-- Always include, even if no duplicates -->
<link rel="canonical" href="https://example.com/page" />Pagination:
html
<!-- On page 2+ -->
<link rel="canonical" href="https://example.com/services" />
<!-- Not https://example.com/services?page=2 -->Common Mistakes:
- ❌ Missing canonical (Google chooses for you)
- ❌ Relative URLs (use absolute URLs)
- ❌ Canonical pointing to different content
- ❌ Multiple canonicals (only one per page)
适用场景:
- 每个页面都应添加自引用规范网址
- 重复内容(分页、筛选、打印版本)
- 联合发布的内容
- 跨域名重复内容
自引用规范网址:
html
<!-- 始终添加,即使没有重复内容 -->
<link rel="canonical" href="https://example.com/page" />分页场景:
html
<!-- 第2页及以后的页面 -->
<link rel="canonical" href="https://example.com/services" />
<!-- 不要使用 https://example.com/services?page=2 -->常见错误:
- ❌ 缺少规范网址(Google会自行选择)
- ❌ 相对路径(请使用绝对路径)
- ❌ 规范网址指向不相关内容
- ❌ 多个规范网址(每个页面只能有一个)
Validation Tools
验证工具
Check Your Implementation:
| Tool | Purpose | URL |
|---|---|---|
| Google Rich Results Test | Test structured data | search.google.com/test/rich-results |
| Schema Markup Validator | Validate JSON-LD | validator.schema.org |
| Facebook Debugger | Test Open Graph tags | developers.facebook.com/tools/debug |
| Twitter Card Validator | Test Twitter Cards | cards-dev.twitter.com/validator |
| Screaming Frog | Audit all pages | screamingfrog.co.uk/seo-spider |
Browser Extensions:
- SEO Meta in 1 Click (Chrome)
- META SEO inspector (Firefox)
检查你的实现:
| 工具 | 用途 | 链接 |
|---|---|---|
| Google富文本结果测试工具 | 测试结构化数据 | search.google.com/test/rich-results |
| Schema标记验证器 | 验证JSON-LD | validator.schema.org |
| Facebook调试工具 | 测试Open Graph标签 | developers.facebook.com/tools/debug |
| Twitter Card验证器 | 测试Twitter Cards | cards-dev.twitter.com/validator |
| Screaming Frog | 全站审计 | screamingfrog.co.uk/seo-spider |
浏览器扩展:
- SEO Meta in 1 Click(Chrome)
- META SEO inspector(Firefox)
Quick Reference Checklist
快速参考清单
For every page, include:
- (50-60 chars, unique per page)
<title> - (150-160 chars, unique per page)
<meta name="description"> - (absolute URL)
<link rel="canonical"> - Open Graph tags (og:title, og:description, og:image, og:url, og:type)
- Twitter Card tags (twitter:card, twitter:title, twitter:description, twitter:image)
- JSON-LD structured data (LocalBusiness on homepage, Service on service pages)
- BreadcrumbList schema (all pages except homepage)
- Mobile viewport meta tag
- Charset meta tag (UTF-8)
Never:
- ❌ Duplicate titles across pages
- ❌ Use "Welcome to..." in titles
- ❌ Omit og:image (critical for social sharing)
- ❌ Use generic @type (LocalBusiness instead of Plumber)
- ❌ Skip CTA in meta description
每个页面都应包含:
- (50-60个字符,每个页面唯一)
<title> - (150-160个字符,每个页面唯一)
<meta name="description"> - (绝对路径)
<link rel="canonical"> - Open Graph标签(og:title、og:description、og:image、og:url、og:type)
- Twitter Card标签(twitter:card、twitter:title、twitter:description、twitter:image)
- JSON-LD结构化数据(首页用LocalBusiness,服务页用Service)
- BreadcrumbList Schema(除首页外的所有页面)
- 移动端视口meta标签
- 字符集meta标签(UTF-8)
绝对不要:
- ❌ 页面间重复标题
- ❌ 标题中使用"欢迎来到..."
- ❌ 省略og:image(对社交分享至关重要)
- ❌ 使用通用@type(比如用LocalBusiness代替Plumber)
- ❌ 元描述中省略行动号召
Error Prevention
错误预防
Common Issues
常见问题
| Issue | Cause | Fix |
|---|---|---|
| No rich snippets in search | Invalid JSON-LD | Use validator.schema.org, check commas/quotes |
| Social share shows wrong image | og:image missing or wrong size | Use 1200x630px, test with Facebook Debugger |
| Title truncated in search | Too long | Keep under 60 chars |
| Description truncated | Too long | Keep under 160 chars |
| Multiple pages rank for same keyword | Duplicate titles | Make each title unique |
| 问题 | 原因 | 修复方案 |
|---|---|---|
| 搜索结果中没有富文本片段 | JSON-LD无效 | 使用validator.schema.org检查,修复逗号/引号错误 |
| 社交分享显示错误图片 | og:image缺失或尺寸错误 | 使用1200x630px的图片,用Facebook调试工具测试 |
| 标题在搜索结果中被截断 | 过长 | 控制在60个字符以内 |
| 元描述被截断 | 过长 | 控制在160个字符以内 |
| 多个页面为同一关键词排名 | 标题重复 | 确保每个页面标题唯一 |
Testing Workflow
测试流程
- Validate HTML: Use W3C validator
- Test Structured Data: Google Rich Results Test
- Test Social Sharing: Facebook Debugger + Twitter Card Validator
- Mobile Preview: Google Search Console URL Inspection
- Cross-Browser Check: Test meta rendering in Chrome/Firefox/Safari
- 验证HTML: 使用W3C验证器
- 测试结构化数据: Google富文本结果测试工具
- 测试社交分享: Facebook调试工具 + Twitter Card验证器
- 移动端预览: Google搜索控制台URL检查工具
- 跨浏览器测试: 在Chrome/Firefox/Safari中测试元标签渲染效果
Best Practices Summary
最佳实践总结
Title Tags:
- 50-60 characters maximum
- Include primary keyword + location + brand
- Unique for every page
- Use modifiers (24/7, Licensed, Free) sparingly
Meta Descriptions:
- 150-160 characters maximum
- Include value prop + differentiator + CTA
- Write for humans, not search engines
- Every page needs unique description
Open Graph:
- Always include og:image (1200x630px)
- Use absolute URLs
- Keep og:title under 60 chars
- Test with Facebook Debugger before launch
JSON-LD:
- Use specific @type (Plumber, not LocalBusiness)
- Include all contact info (phone, address, email)
- Add openingHoursSpecification for better display
- Validate with schema.org validator
Canonical URLs:
- Every page needs canonical
- Always use absolute URLs
- Self-referencing is good practice
- Only one canonical per page
Production Notes:
- Use react-helmet-async for React apps (SSR-safe)
- Generate JSON-LD dynamically from CMS/database
- Cache meta tag components for performance
- Monitor Search Console for indexing issues
- Update structured data when business details change
标题标签:
- 最多50-60个字符
- 包含核心关键词 + 地区 + 品牌
- 每个页面唯一
- 谨慎使用修饰词(24小时、持证、免费等)
元描述:
- 最多150-160个字符
- 包含价值主张 + 差异化优势 + 行动号召
- 面向用户而非搜索引擎写作
- 每个页面使用唯一的元描述
Open Graph:
- 始终添加og:image(1200x630px)
- 使用绝对路径
- og:title控制在60个字符以内
- 上线前用Facebook调试工具测试
JSON-LD:
- 使用特定@type(比如Plumber而非LocalBusiness)
- 包含所有联系信息(电话、地址、邮箱)
- 添加openingHoursSpecification以优化展示
- 用schema.org验证器验证
规范网址:
- 每个页面都需要规范网址
- 始终使用绝对路径
- 自引用是最佳实践
- 每个页面只能有一个规范网址
生产环境注意事项:
- React应用请使用react-helmet-async(支持SSR)
- 从CMS/数据库动态生成JSON-LD
- 缓存元标签组件以提升性能
- 监控搜索控制台的索引问题
- 企业信息变更时更新结构化数据