seo-meta

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

SEO 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 TypePatternExample
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
AboutAbout [Brand] - [Tagline/USP]About Acme - Licensed Plumbers Since 1995
ContactContact [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 Typeog:type
Home, Service, Locationwebsite
Blog Postarticle
Business Profilebusiness.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:
TypeUse Case
summarySmall square image (1:1), basic info
summary_large_imageLarge 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:
ToolPurposeURL
Google Rich Results TestTest structured datasearch.google.com/test/rich-results
Schema Markup ValidatorValidate JSON-LDvalidator.schema.org
Facebook DebuggerTest Open Graph tagsdevelopers.facebook.com/tools/debug
Twitter Card ValidatorTest Twitter Cardscards-dev.twitter.com/validator
Screaming FrogAudit all pagesscreamingfrog.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-LDvalidator.schema.org
Facebook调试工具测试Open Graph标签developers.facebook.com/tools/debug
Twitter Card验证器测试Twitter Cardscards-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:
  • <title>
    (50-60 chars, unique per page)
  • <meta name="description">
    (150-160 chars, unique per page)
  • <link rel="canonical">
    (absolute URL)
  • 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

每个页面都应包含:
  • <title>
    (50-60个字符,每个页面唯一)
  • <meta name="description">
    (150-160个字符,每个页面唯一)
  • <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

常见问题

IssueCauseFix
No rich snippets in searchInvalid JSON-LDUse validator.schema.org, check commas/quotes
Social share shows wrong imageog:image missing or wrong sizeUse 1200x630px, test with Facebook Debugger
Title truncated in searchToo longKeep under 60 chars
Description truncatedToo longKeep under 160 chars
Multiple pages rank for same keywordDuplicate titlesMake each title unique
问题原因修复方案
搜索结果中没有富文本片段JSON-LD无效使用validator.schema.org检查,修复逗号/引号错误
社交分享显示错误图片og:image缺失或尺寸错误使用1200x630px的图片,用Facebook调试工具测试
标题在搜索结果中被截断过长控制在60个字符以内
元描述被截断过长控制在160个字符以内
多个页面为同一关键词排名标题重复确保每个页面标题唯一

Testing Workflow

测试流程

  1. Validate HTML: Use W3C validator
  2. Test Structured Data: Google Rich Results Test
  3. Test Social Sharing: Facebook Debugger + Twitter Card Validator
  4. Mobile Preview: Google Search Console URL Inspection
  5. Cross-Browser Check: Test meta rendering in Chrome/Firefox/Safari

  1. 验证HTML: 使用W3C验证器
  2. 测试结构化数据: Google富文本结果测试工具
  3. 测试社交分享: Facebook调试工具 + Twitter Card验证器
  4. 移动端预览: Google搜索控制台URL检查工具
  5. 跨浏览器测试: 在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
  • 缓存元标签组件以提升性能
  • 监控搜索控制台的索引问题
  • 企业信息变更时更新结构化数据