agentsclimarketplace

Seo metadata

Skill lennney/gate-all-skills/skills/website/seo-metadata

Next.js SEO 完整配置。涵盖 Metadata API、Open Graph、JSON-LD 结构化数据、Sitemap、Robots.txt。新建页面或 SEO 整改时加载。From its SKILL.md

Install
npx -y skills add lennney/gate-all-skills --skill seo-metadata

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

9.7 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it

SEO Metadata 完整指南

一、Metadata 结构

每页必须做的事

// 每个 page.tsx 顶部
import type { Metadata } from 'next'
import { getSiteConfig } from '@/lib/site'
import { generateSiteMetadata } from '@/lib/seo'   // 来自共享包

const site = getSiteConfig()

export const metadata: Metadata = generateSiteMetadata(site, {
  pageTitle: '页面标题 — 品牌名 (2026)',
  pageDescription: '描述文字 150-155 字符,含目标关键词。',
  canonicalPath: '/page-path',
  robots: { index: true, follow: true },
  // 追加关键词(非必须,但有助于长尾)
  keywords: [...(site.keywords || []), '额外长尾词1', '额外长尾词2'],
})

Metadata 规则

项规则
pageTitle含品牌名 MECCHA CHAMELEON,不拼错。格式:主题 — 子主题 (em dash,前后空格)
pageDescription150-155 字符。一段完整的描述,含 2-3 个目标关键词。不要截断、不要清单
canonicalPath必填。从 / 开始,如 /platforms。空字符串 '' 表示首页
robots内容页 { index: true, follow: true },法律页 { index: false, follow: false }
keywords只在 /platforms、/buy、/requirements 等需要大量长尾词覆盖的页面追加

首页(根 page.tsx)

首页也需要单独的 metadata 导出——不要只依赖 layout.tsx 默认值。

import { generateSiteMetadata } from '@/lib/seo'

const site = getSiteConfig()

export const metadata: Metadata = generateSiteMetadata(site, {
  pageTitle: 'Paint Yourself Invisible | Hide-and-Seek Party Game (2026)',
  pageDescription: 'MECCHA CHAMELEON is a creative hide-and-seek party game on Steam (PC). Paint to blend in. $5.99, Very Positive, 2-10 players. Tips, requirements, and guide.',
  canonicalPath: '',
  robots: { index: true, follow: true },
})

法律页面(privacy, tos, disclaimer)

必须用 generateSiteMetadata,不能手写原始 Metadata 对象。否则缺 canonical URL、OG、Twitter Card。

import { getSiteConfig } from '@/lib/site'
import { generateSiteMetadata } from '@/lib/seo'

const site = getSiteConfig()

export const metadata: Metadata = generateSiteMetadata(site, {
  pageTitle: 'Privacy Policy',
  pageDescription: 'Privacy policy for MECCHA CHAMELEON guide. Data collection, cookies, and your rights.',
  canonicalPath: '/privacy',
  robots: { index: false, follow: false },
})

layout.tsx 根配置

export const metadata: Metadata = generateSiteMetadata(site, {
  pageTitle: 'Paint Yourself Invisible | Hide-and-Seek Party Game (2026)',
})

二、Title & Description 质量检查

Title 格式

✅ MECCHA CHAMELEON Platforms — PS5, Mac, Mobile & PC Support (2026)
❌ MECCA CHAMELEON Platforms —PS5, Mac, Mobile & PC Support (2026)
❌ MECCHA CHAMELEON Platforms —PS5...   // em dash 后缺空格

规则:

  • 品牌名拼写正确(MECCHA 不是 MECCA)
  • em dash(—)前后各加一个空格
  • 尾部加 (2026) 年号
  • 长度 50-65 字符

Description 长度

状态字符数
✅ 理想150-155
⚠️ 可接受145-160
❌ 太长>165(Google 会截断)
❌ 太短<100(浪费曝光机会)

裁剪技巧:

原本: "MECCHA CHAMELEON tips and tricks —best camouflage techniques ranked S to B, Seeker search strategies, common beginner mistakes, and how to find hidden players. Master both roles with pro strategies."  (168 chars)
裁剪: "MECCHA CHAMELEON tips and tricks — ranked camouflage techniques S to B, Seeker strategies, beginner mistakes, and how to find hidden players. Master both roles."  (152 chars)

关键:删冗余副词、合并同类项、去掉不必要的修饰词。

三、JSON-LD 结构化数据

页面 -> Schema 对应表

页面类型JSON-LD Schema必须字段
首页VideoGame + WebSiteaggregateRating, offers, operatingSystem
评测Review + VideoGamereviewRating, itemReviewed, aggregateRating
FAQFAQPage(多条 Question/Answer)至少 5 个问答对
购买指南Product + Offeroffers.price, offers.availability
平台/需求/模式VideoGameaggregateRating, offers, operatingSystem
所有内容页BreadcrumbList通过 generateBreadcrumbJsonLd 自动生成

VideoGame JSON-LD 完整版

不要只写 name + url + description。aggregateRating 和 offers 是最重要的——它们触发搜索结果的星级评分和价格标签。

<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{
    __html: JSON.stringify({
      '@context': 'https://schema.org',
      '@type': 'VideoGame',
      name: data.name,
      url: 'https://meccha-chameleon.info/classes',
      description: '页面描述',
      operatingSystem: 'Windows 10/11 64-bit',
      applicationCategory: 'GameApplication',
      aggregateRating: {
        '@type': 'AggregateRating',
        ratingValue: data.rating,        // 4.3
        bestRating: data.ratingMax,       // 5
        ratingCount: data.ratingCount,    // 16348
      },
      offers: {
        '@type': 'Offer',
        price: '5.99',
        priceCurrency: 'USD',
        availability: 'https://schema.org/InStock',
        url: data.steamUrl,
      },
    }),
  }}
/>

FAQPage JSON-LD

内容页是手风琴 <details>,JSON-LD 需要所有问答对:

<script
  type="application/ld+json"
  dangerouslySetInnerHTML={{
    __html: JSON.stringify({
      '@context': 'https://schema.org',
      '@type': 'FAQPage',
      mainEntity: data.faqs.map((faq) => ({
        '@type': 'Question',
        name: faq.q,
        acceptedAnswer: {
          '@type': 'Answer',
          text: faq.a,    // 纯文本,不要含 HTML 标签
        },
      })),
    }),
  }}
/>

注意: acceptedAnswer.text 里不要含 <a> 标签或 HTML。Schema 解析器偏好纯文本。

四、Sitemap & Robots

sitemap.ts

export default function sitemap(): MetadataRoute.Sitemap {
  const site = getSiteConfig()
  const baseUrl = `https://${site.domain}`

  const mainPages = ['', '/guide', '/review', '/faq', '/classes', '/tier', '/items', '/platforms', '/buy', '/requirements']
  const legalPages = ['/privacy', '/tos', '/disclaimer']

  const entries: MetadataRoute.Sitemap = [
    ...mainPages.map(path => ({
      url: `${baseUrl}${path}`,
      changeFrequency: (path === '' ? 'weekly' : 'monthly') as 'weekly' | 'monthly',
      priority: path === '' ? 1.0 : 0.8,
    })),
    ...legalPages.map(path => ({
      url: `${baseUrl}${path}`,
      changeFrequency: 'monthly' as const,
      priority: 0.3,
    })),
  ]

  return entries
}

原则:

  • 首页 priority 1.0,内容页 0.8,法律页 0.3
  • /jump(跳转中间页)不加入 sitemap
  • 新增页面时同步更新 mainPages 数组

robots.ts

export default function robots(): MetadataRoute.Robots {
  const site = getSiteConfig()
  return {
    rules: {
      userAgent: '*',
      allow: '/',
      disallow: ['/jump', '/api/'],
    },
    sitemap: `https://${site.domain}/sitemap.xml`,
  }
}

五、内部链接网络

链接密度要求

页面类型最低外链数(指向站内其他页)
首页至少 5 个
指南类页面至少 3 个(指向其他指南页)
购买/平台/需求页至少 3 个
FAQ至少 6 个(涵盖所有内容页)
法律页1-2 个即可

指南页交叉链接模式

每个指南页(guide/classes/items/tier)在底部 CTA 前加导航栏:

<section className="section" style={{ padding: '2rem 0' }}>
  <div className="container">
    <div style={{ maxWidth: '800px', margin: '0 auto' }} className="reveal">
      <p style={{ textAlign: 'center' }}>
        <strong>Related guides:</strong>{' '}
        <a href="/guide">Beginner's Guide</a> —
        <a href="/classes">Game Modes</a> —
        <a href="/items">Camouflage Guide</a>
      </p>
    </div>
  </div>
</section>

FAQ 内链

在 FAQ 的 a 答案文本中嵌入指向对应详细页面的链接:

"MECCHA CHAMELEON is currently available exclusively on PC via Steam. See our <a href="/platforms">Platform Availability Guide</a> for full breakdown."

六、关键词驱动的页面规划

从搜索数据找内容缺口

从 Google Search Console / 关键词工具导出的 CSV 中,提取:

  1. 高搜索量 + 0 覆盖 → 需要新建页面
  2. 高增长(↑%)+ 低覆盖 → 需要强化现有页面

示例优先级矩阵:

关键词搜索量增长动作
ps5, mac, mobile20+20%+新建 /platforms
steam key5+30%+新建 /buy
cloud save error1+160%+强化 /requirements
tips, how to play一致稳定已有覆盖 ✅

七、低优先级但值得做的事

项目说明
OG 图片每个页面用独立的 OG 图片(至少不同标题 overlay)。当前只有一张 capsule.jpg
favicon至少 favicon.svg + apple-touch-icon.png。考虑 PWA 的 icon-192x192.png
字体数量最多 3 个 Google Font 家族。5 个以上影响 LCP
hreflang如果支持多语言,在 alternates 中添加 hreflang 标签
WebP/AVIF图片用 WebP 格式替代 JPEG,减小传输体积

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most marketing audience skills give in ~3.0k tokens

Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07

  • Apply Poppins font to headingsin 41 of 690, across 6 files
  • Apply Lora font to body textin 41 of 690, across 6 files
  • Use Arial fallback for headingsin 39 of 690, across 4 files
  • Use Georgia fallback for body textin 39 of 690, across 4 files
  • Maintain text hierarchy and formattingin 39 of 690, across 4 files
  • Use accent colors for non-text shapesin 38 of 690, across 3 files
  • Use RGB values for precise color matchingin 38 of 690, across 3 files
  • Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
  • Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
  • Use active voice instead of passive voicein 26 of 690, across 10 files
  • Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
  • Prioritize clarity over clevernessin 22 of 690, across 8 files

Said here and by no other author read

  • Export metadata from every page file
  • Generate all metadata using the shared site helper
  • Verify brand name spelling in titles
  • Pad the em dash in page titles with spaces
  • Append the current year to page titles
  • Include aggregateRating and offers in VideoGame schema

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.