본문으로 건너뛰기
cccskills
무료GitHub에 공개

content-seo

Use when creating or editing pages, blog posts, or content files, adding meta tags, or when Lighthouse SEO drops below 90.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

holger1411/astrodeck스타 80(GitHub 80 + cccskills 0)
연동 도구X (Twitter)

실행 점수 미검증

설치 방법 보기

포함된 파일(2)

  • SKILL.md5.0 KB
  • LEARNINGS.md652 B

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

Content & SEO Skill

Canonical Sources

This skill references the following globals — read them BEFORE starting work:

  • system/globals/imagery.md — Alt text conventions, image formats

Domain

Content Collections, Meta Tags, OpenGraph, Structured Data, RSS, Sitemap

KPIs

MetricTargetMeasurement
Lighthouse SEO>90Lighthouse JSON → categories.seo.score * 100
Pages without Description0npm run check:kpis
Pages without OG-Image0HTML check in dist/

Rules

Content Collections Schema

// src/content.config.ts
import { defineCollection } from 'astro:content';
import { z } from 'astro/zod';
import { glob } from 'astro/loaders';

const blog = defineCollection({
  loader: glob({ pattern: '**/*.{md,mdx}', base: './src/content/blog' }),
  schema: z.object({
    title: z.string(),
    description: z.string().max(160),
    pubDate: z.coerce.date(),
    updatedDate: z.coerce.date().optional(),
    heroImage: z.string().optional(),
    draft: z.boolean().default(false),
    tags: z.array(z.string()).default([]),
    author: z.string().default('Team'),
  }),
});

SEO Component Usage

---
import BaseLayout from '@/layouts/BaseLayout.astro';

const title = "Page Title — Brand Name";
const description = "Page description, 150-160 characters, relevant keyword at the start.";
---

<BaseLayout title={title} description={description}>
  <!-- Content -->
</BaseLayout>

Meta-Description Best Practices

  • Length: 150-160 characters (Google truncates at ~160)
  • Keyword: Relevant keyword at the beginning
  • Unique: Every page needs its own description
  • Actionable: Call-to-action or value proposition
  • No duplicates: Never the same description for multiple pages

OpenGraph Tags

<meta property="og:title" content="{title}" />
<meta property="og:description" content="{description}" />
<meta property="og:image" content="{siteUrl}/og-image.png" />
<meta property="og:url" content="{canonicalUrl}" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="{siteName}" />
  • OG image: 1200x630px, PNG or JPG
  • Always use absolute URLs

Twitter Cards

<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="{title}" />
<meta name="twitter:description" content="{description}" />
<meta name="twitter:image" content="{siteUrl}/og-image.png" />

Canonical URLs

<link rel="canonical" href={Astro.url.href} />
  • Every page needs a canonical URL
  • Prevents duplicate content issues
  • AstroDeck sets this automatically in BaseLayout

Sitemap

// astro.config.mjs
import sitemap from '@astrojs/sitemap';

export default defineConfig({
  site: 'https://example.com',  // REQUIRED for sitemap
  integrations: [sitemap()],
});
  • site in astro.config.mjs MUST be set
  • Sitemap is generated automatically on npm run build
  • Output: dist/sitemap-index.xml

RSS Feed

// src/pages/rss.xml.ts
import rss from '@astrojs/rss';
import { getCollection } from 'astro:content';

export async function GET(context) {
  const blog = await getCollection('blog');
  return rss({
    title: 'Blog Title',
    description: 'Blog Description',
    site: context.site,
    items: blog.map((post) => ({
      title: post.data.title,
      pubDate: post.data.pubDate,
      description: post.data.description,
      link: `/blog/${post.id}/`,
    })),
  });
}

Structured Data (JSON-LD)

<script type="application/ld+json" set:html={JSON.stringify({
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": siteName,
  "url": siteUrl,
})} />

For blog posts:

<script type="application/ld+json" set:html={JSON.stringify({
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": title,
  "description": description,
  "datePublished": pubDate,
  "author": { "@type": "Person", "name": author },
})} />

Non-Negotiable

These rules always apply — even under time pressure, even when "SEO isn't that important":

  • Every page needs a meta description. "It's just an internal page" — Google indexes everything that's publicly accessible.
  • Every page needs exactly one <h1>. Zero or multiple h1s destroy heading hierarchy and cost SEO points.
  • No duplicate titles. "AstroDeck ... | AstroDeck" happens when the page title includes the brand — the layout appends it automatically.
  • Canonical URL is mandatory. Even for "simple" pages. Without canonical, crawlers create duplicate content issues.
  • Don't guess structured data. JSON-LD schema must be valid. Better to omit than to ship invalid schema — Google penalizes invalid markup.

Before Applying

Read LEARNINGS.md in this directory to avoid known anti-patterns.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

Use when creating or modifying any UI element visible to the user, reviewing HTML markup, adding interactive elements, or when Lighthouse Accessibility drops below 90.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

holger1411/astrodeck802026년 9월 5일 업데이트

astro

무료

Use when creating or modifying .astro/.tsx files, configuring astro.config.mjs, working with Content Collections, or when TypeScript or build errors occur.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

holger1411/astrodeck802026년 9월 5일 업데이트

qa

무료

Use when completing any task (final validation step), running audits, preparing for deployment, or when ESLint/TypeScript/build errors occur.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

holger1411/astrodeck802026년 9월 5일 업데이트

readme

무료

Use when starting work on an AstroDeck project, needing to understand the project structure, or looking up available components, sections, and layouts.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

holger1411/astrodeck802026년 9월 5일 업데이트

tailwind

무료

Use when writing or reviewing any CSS class, changing colors, modifying globals.css, or when hardcoded colors or inline styles are detected.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

holger1411/astrodeck802026년 9월 5일 업데이트

ui-design

무료

Use when creating or modifying any visible UI element, adjusting spacing or typography, reviewing visual consistency, or when Lighthouse Performance drops below 90.

한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.

holger1411/astrodeck802026년 9월 5일 업데이트

holger1411의 스킬 모두 보기

이 스킬의 문제 신고