From gr-geo-cite
Jekyll blog publishing pipeline: generates posts in Iris writing style with SEO frontmatter, multilingual sync (en/ja/ko), internal links, and FAQ schema.
How this skill is triggered — by the user, by Claude, or both
Slash command
/gr-geo-cite:gr-blog-postWhen to use
Use this skill when you need to: write and publish a Jekyll blog post in Iris writing style, generate SEO frontmatter (title/canonical/hreflang/FAQ schema), sync multilingual versions (en/ja/ko), build internal links, or distribute a new article with GEO-friendly structure. Trigger phrases: "写一篇博客" | "发新文章" | "write blog post" | "Jekyll post" | "hreflang" | "同步日韩版本" | "SEO文章" | "FAQ schema"
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
本 skill 默认 dev/B2B 读者。写 **2C 教育/医疗/金融(YMYL)** 内容时:
本 skill 默认 dev/B2B 读者。写 2C 教育/医疗/金融(YMYL) 内容时:
完整 2C 渠道数据库 + 公开来源见 → gingiris-seo-geo/references/2c-adaptation.md
references/writing-voice-iris.md)——---
layout: post
title: "主关键词前置,副标题用冒号:不超过 60 字"
date: 2026-04-15 14:30:00 +0800
categories: [seo, growth]
tags: [...]
canonical_url: https://gingiris.tools/blog/2026/04/15/slug/
hreflang_ja: /blog/2026/04/15/slug-ja/
hreflang_ko: /blog/2026/04/15/slug-ko/
post_description: "150-160 字 meta description,含主关键词"
faq:
- q: "直接问句"
a: "30-50 字硬答案"
---
gr-seo-patrol 输出,找"top 30 但没 top 10"的关键词gr-competitor,找对手新打法site: 查站内是否已有)scripts/sync-i18n.py(roadmap)从英文自动产日韩草稿目标 repo:Gingiris-1031/growth-tools(真站 gingiris.tools,Vercel 部署 origin/main,写入后 ~50-90s 自动构建)
⚠️ 前置:先过 Gingiris-1031 GitHub 安全规则(memory gingiris_1031_safety_rules.md,P0):
Iris Wei <[email protected]>(不是机器名/本机 hostname)post: {slug} ({lang})——无 Claude trailer、无多段正文发布 = GitHub Contents API PUT(不要本地 git push):
# token 只从 secrets.env 读,绝不内联/硬编码进脚本或 SKILL.md
source ~/.config/gingiris/secrets.env # 提供 GITHUB_PAT
SLUG="your-post-slug"; LANG="en"
FILE="_posts/$(date +%F)-${SLUG}.md"
curl -s -X PUT \
-H "Authorization: Bearer $GITHUB_PAT" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/Gingiris-1031/growth-tools/contents/${FILE}" \
-d "{\"message\":\"post: ${SLUG} (${LANG})\",
\"content\":\"$(base64 < draft.md | tr -d '\n')\",
\"committer\":{\"name\":\"Iris Wei\",\"email\":\"[email protected]\"}}"
更新已存在的文件:先
GET .../contents/{path}拿sha,把"sha":"..."加进 PUT body。
发布后验证(按顺序全过才算发完):
curl -sI https://gingiris.tools/ 确认站点存活)curl -sI https://gingiris.tools/blog/{yyyy}/{mm}/{dd}/{slug}/ → HTTP 200(404 = permalink/date/future: true 配错,先修再往下)gr-geo-cite)背景:i18n 基线曾有多处 hreflang bug(KO self-loop、JA→EN 指
/en/首页弱链、EN 缺 alternate),后果是日韩索引长期 0(memoryi18n_baseline.md)。全站修复 commit b667208 后抽检全绿——新文章不要把 bug 加回来。
hreflang_ja / hreflang_ko / hreflang_en 指向具体对端文章(绝不指 /en/ 首页)hreflang="ko" 指自己,不能出现指自己的 hreflang="ja")x-default 存在且指 EN 版for u in "$EN_URL" "$JA_URL" "$KO_URL"; do
echo "== $u"
curl -s "$u" | grep -oE '<link rel="(alternate|canonical)"[^>]*>'
done
# 验收:每页 hreflang 完整(self + 对端 + x-default)且三页双向回链成对,canonical 自指
gr-seo-patrol 监控名单gr-social-distill)canonical_url: https://dev.to/iris1031/article-slug-xxxxcanonical_url: https://gingiris.tools/blog/...(会让 dev.to 文章被 Google 视为副本,不参与 SERP)skills/gr-geo-cite/scripts/citability-scorer.py,页面分 ≥ 75 才算过gr-seo-patrol 加监控gr-blog-post 继续产第 2 篇并设 canonical| Service | Env var | 来源 |
|---|---|---|
| GitHub PAT | GITHUB_PAT | ~/.config/gingiris/secrets.env(source 后使用,不内联) |
| DeepSeek / Teamo(翻译) | DEEPSEEK_API_KEY / TEAMOROUTER_API_KEY | 同上 |
Rationale: Verified 2026-05-07 that retrofitting old articles hits a ~65-68/100 citability ceiling no matter what (booster passages, surgical rewrites, splitting all produce diminishing returns). Writing new articles from this spec produces 75-85 baseline directly. Spec saves ~3 hours of post-hoc citability fixing per article.
Every H2/H3 section must satisfy ALL of:
Word count: 134-167 (the AI-extraction sweet spot validated by zubair-trabzada/geo-seo-claude scoring)
Opening sentence = definition pattern, one of:
[Thing] is [definition][Thing] refers to [scope][Thing] means [unpacking]In other words, [Thing] is...[Thing] can be defined as...Section contains at least ONE of each:
H1 = page title (≤ 70 chars after title-suffix fix from 2026-05-07)
H2 should be question form ~40% of the time:
Each H2 should contain primary keyword or clear question intent
last_modified_at: frontmatter (flows through to dateModified schema)Run before committing the article:
# 兼容两种安装位置:优先 monorepo 相对路径,fallback 本机安装
SCORER="skills/gr-geo-cite/scripts/citability-scorer.py"
[ -f "$SCORER" ] || SCORER="$HOME/.claude/skills/gr-geo-cite/scripts/citability-scorer.py"
python3 "$SCORER" --file /local/path/to/draft.html
Target: page score ≥ 75. If under 70, revise top 2 weakest passages.
Articles from 2026-05-07 audit (without this spec):
| Article (old, retrofit) | Score | Pattern |
|---|---|---|
| PH playbook master | 65 | Top passage 74, dragged by 62s |
| Social listening | 68 | Best of the 5 (early Citable Stats) |
| Community directory | 62 | Lifted from 54 via booster (+12% from 0 to 1 sweet-spot passage) |
Predicted from spec (NEW articles):
| Spec compliance | Predicted score |
|---|---|
| All sections 134-167 + definition pattern + 1 original signal | 78-85 |
| 80% sections compliant, 20% legacy structure | 72-77 |
| 50% compliant | 65-70 (same as retrofit ceiling) |
The marginal value of strict compliance is ~10 points vs partial compliance.
npx claudepluginhub gingiris-1031/gingiris-skills --plugin gr-backlinksManages full-lifecycle blog content with 30 sub-skills for writing, rewriting, analysis, SEO, schema, images, repurposing, and multilingual publishing. Optimized for Google rankings and AI citations.
Write, analyze, and optimize blog content with 34 sub-skills covering SEO, AI citation, multilingual support, and more. Activate with 'blog' or '/blog'.
Writes technical blog posts, tutorials, deep dives, and engineering content. Transforms brain dumps into polished content with personal voice support and AEO optimization.