npx skills add https://github.com/jezweb/claude-skills --skill seo-meta状态 : 生产就绪 ✅ 最后更新 : 2026-01-14 来源 : Schema.org, Open Graph Protocol, Twitter Developer Docs
每个页面都需要:
<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>
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
字符限制 :
页面类型公式 :
| 页面类型 | 模式 | 示例 |
|---|---|---|
| 首页 | [品牌] - [主要服务] 在 [地点] | Acme Plumbing - 24/7 紧急水管工悉尼 |
| 服务页面 | [服务] 在 [地点] | [品牌] |
| 地点页面 | [服务] [郊区] | [品牌] |
| 关于页面 | 关于 [品牌] - [标语/独特卖点] | About Acme - Licensed Plumbers Since 1995 |
| 联系页面 | 联系 [品牌] - [地点] | [电话] |
标题修饰语(增加可信度):
反面模式(避免):
字符限制 :
公式 :
[价值主张] [服务] 在 [地点]。 [差异化]。 [行动号召]。
按页面类型示例 :
首页 :
Fast, reliable plumbing services in Sydney. 24/7 emergency response, licensed plumbers, upfront pricing. Call 1300 XXX XXX for same-day service.
服务页面 :
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.
地点页面 :
Trusted plumber in Bondi. Blocked drains, leaks, hot water, gas fitting. Same-day service, upfront quotes. Call your local plumber on 1300 XXX XXX.
强力词汇(谨慎使用):
必需标签 :
<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" />
图片要求 :
按页面类型的 og:type 值 :
| 页面类型 | og:type |
|---|---|
| 首页、服务页面、地点页面 | website |
| 博客文章 | article |
| 商业资料 | business.business |
可选但推荐 :
<meta property="og:site_name" content="Brand Name" />
<meta property="og:locale" content="en_AU" />
卡片类型 :
| 类型 | 使用场景 |
|---|---|
| summary | 小方形图片(1:1),基本信息 |
| summary_large_image | 大图片(1.91:1),最常见 |
必需标签 :
<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" />
可选 :
<meta name="twitter:site" content="@yourbrand" />
<meta name="twitter:creator" content="@authorhandle" />
回退行为 :
最佳实践 : 先定义 og:* 标签,仅在值不同时添加 twitter:*。
用于首页和联系页面:
{
"@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"
]
}
特定业务类型(代替通用的 LocalBusiness):
用于服务页面:
{
"@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"
}
}
用于 FAQ 部分:
{
"@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."
}
}
]
}
用于除首页外的所有页面:
{
"@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"
}
]
}
何时使用 :
自引用规范链接 :
<!-- 始终包含,即使没有重复内容 -->
<link rel="canonical" href="https://example.com/page" />
分页 :
<!-- 在第 2 页及以后 -->
<link rel="canonical" href="https://example.com/services" />
<!-- 不是 https://example.com/services?page=2 -->
常见错误 :
检查你的实现 :
| 工具 | 用途 | URL |
|---|---|---|
| Google 富媒体搜索结果测试 | 测试结构化数据 | search.google.com/test/rich-results |
| Schema Markup Validator | 验证 JSON-LD | validator.schema.org |
| Facebook Debugger | 测试 Open Graph 标签 | developers.facebook.com/tools/debug |
| Twitter Card Validator | 测试 Twitter 卡片 | cards-dev.twitter.com/validator |
| Screaming Frog | 审计所有页面 | screamingfrog.co.uk/seo-spider |
浏览器扩展 :
每个页面都应包含:
<title>(50-60 个字符,每页唯一)<meta name="description">(150-160 个字符,每页唯一)<link rel="canonical">(绝对 URL)切勿 :
| 问题 | 原因 | 修复方法 |
|---|---|---|
| 搜索结果中无富媒体摘要 | JSON-LD 无效 | 使用 validator.schema.org,检查逗号/引号 |
| 社交分享显示错误图片 | og:image 缺失或尺寸错误 | 使用 1200x630 像素,用 Facebook Debugger 测试 |
| 搜索结果中标题被截断 | 太长 | 保持在 60 个字符以内 |
| 描述被截断 | 太长 | 保持在 160 个字符以内 |
| 多个页面针对相同关键词排名 | 重复标题 | 使每个标题唯一 |
标题标签 :
Meta 描述 :
Open Graph :
JSON-LD :
规范 URL :
生产注意事项 :
每周安装量
539
代码仓库
GitHub 星标数
652
首次出现
Jan 20, 2026
安全审计
安装于
claude-code419
opencode377
gemini-cli367
codex335
antigravity319
cursor314
Status : Production Ready ✅ Last Updated : 2026-01-14 Source : Schema.org, Open Graph Protocol, Twitter Developer Docs
Every page needs:
<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>
Character Limits :
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] |
| Location | [Service] [Suburb] | [Brand] |
| About | About [Brand] - [Tagline/USP] | About Acme - Licensed Plumbers Since 1995 |
| Contact | Contact [Brand] - [Location] | [Phone] |
Title Modifiers (add credibility):
Anti-Patterns (avoid):
Character Limits :
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):
Required Tags :
<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 :
og:type Values by Page Type :
| Page Type | og:type |
|---|---|
| Home, Service, Location | website |
| Blog Post | article |
| Business Profile | business.business |
Optional but Recommended :
<meta property="og:site_name" content="Brand Name" />
<meta property="og:locale" content="en_AU" />
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 :
<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 :
<meta name="twitter:site" content="@yourbrand" />
<meta name="twitter:creator" content="@authorhandle" />
Fallback Behavior :
Best Practice : Define og:* tags first, only add twitter:* if values differ.
Use for homepage and contact page:
{
"@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):
Use for service pages:
{
"@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"
}
}
Use for FAQ sections:
{
"@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."
}
}
]
}
Use on all pages except homepage:
{
"@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"
}
]
}
When to Use :
Self-Referencing Canonical :
<!-- Always include, even if no duplicates -->
<link rel="canonical" href="https://example.com/page" />
Pagination :
<!-- On page 2+ -->
<link rel="canonical" href="https://example.com/services" />
<!-- Not https://example.com/services?page=2 -->
Common Mistakes :
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 :
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)Never :
| 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 |
Title Tags :
Meta Descriptions :
Open Graph :
JSON-LD :
Canonical URLs :
Production Notes :
Weekly Installs
539
Repository
GitHub Stars
652
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
claude-code419
opencode377
gemini-cli367
codex335
antigravity319
cursor314
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
106,200 周安装