From platinum-seo-engine
Use when: kullanıcı "content prune yap", "decay action uygula", "URL retire et", "301/410 patch", "robots disallow ekle" der ya da `/pseo-content-remediation` çağırır. master.xlsx[content_decay] satırından action="prune" / "redirect" / "delete" alındığında, R-85 multi-signal threshold verify edilir, R-90 manuel approve gate zorunlu, R-91 301/410 decision tree branch'lenir, 3 sheet writer (redirect_404 + robots_txt + completed_work) atomic transaction. Also use when: consistency report FAIL trigger var ve content audit (R-44..R-54 source verification fail) sonucu URL retire gerekiyor; content_improve sheet'inde priority=HIGH FAIL durumlar legacy cleanup için; project-config[profile] enum 5-değer (e-commerce | ymyl | local-service | b2b-saas | portfolio) içinden biri sabit ve profile-aware approve gate uygulanacak (Principle 2). Do not use when: mevcut blog drift fix için (revise-content skill domain — content-remediation = RETIRE scope only); FAQ block re-render için (faq-optimization Wave 2 kullan); yeni blog üretimi için (new-blog kullan); image generation için (generate-images kullan); content_decay.action == "revise" (DURUR #4, wrong skill); R-85 multi-signal threshold satisfied değil (DURUR #1, single- signal remediation YASAK); R-90 manuel approve YOK (DURUR #2); action="redirect" + target_url=null (DURUR #3, R-91 decision tree reject).
How this skill is triggered — by the user, by Claude, or both
Slash command
/platinum-seo-engine:content-remediationThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Content RETIRE skill. master.xlsx[content_decay] satırından action=
Content RETIRE skill. master.xlsx[content_decay] satırından action=
"prune"/"redirect"/"delete" alır, R-85 multi-signal threshold verify
eder, R-90 manuel approve gate uygular, R-91 301/410 decision tree
branch'ler, 3 master.xlsx sheet'e WRITE eder (redirect_404 +
robots_txt + completed_work, transaction.update). Skill-level
enforcement: sheet schema'larında allowed_writers: null (governance
Phase 14+ defer); skill kendi disiplini ile WRITE kontrolü yapar.
Scope ayrımı: content-remediation = RETIRE scope only. Mevcut blog drift fix YASAK (revise-content skill domain); R-118 humanize sadece 410 reason text + redirect target seçimi'nde uygulanır, content revision değil.
Prune/delete kararının "decay reason" verifiable + uydurma yasak. Multi-signal cross-check zorunlu (R-85), single-signal yetmez.
note field decay reason + signal list
belirtir, fabricate yasak.Skill behavior project.config.json[profile] enum'una göre değişir.
Enum 5-value: e-commerce | ymyl | local-service | b2b-saas |
portfolio. Remediation context'inde R-90 manual approve gate
profile'a göre sıkılaşır:
profile == "ymyl" → R-90 manual approve gate DAHA SIKI:
legal/medical/financial content prune ek belge gerekli; hatalı
410 = lost authority signal (irreversible).profile == "e-commerce" → product page prune dikkat (out-of-stock
vs permanent removal ayrımı; out-of-stock = 301 to category,
permanent removal = 410).profile == "local-service" → location-specific care (geographic
SEO authority, NAP consistency), location page prune redirect to
parent service area.profile == "b2b-saas" → tolerant (feature deprecation routine);
301 to changelog/docs.profile == "portfolio" → minimal prune (rare); showcase entity
preserve, project removal manuel manager onay.R-118 humanize + R-117 uniqueness + AI signature blocklist (tone_phrases_blocklist consume) → uygulanır 410 reason text + redirect target page seçimi'nde (cheap content sayfaya 301 yasak).
master.xlsx[content_decay].action schema'da type/enum/
description null. Bu skill action enum'unu R-86/R-87/R-90/R-91
rules'tan rule-derived consume eder (string compare):
prune / redirect / delete (action="revise" → DURUR #4 wrong
skill; revise-content domain)._state/events.jsonl event_kind enum 4-value (ADR-020):
provenance | work | audit | workflow. content-remediation
output = production work → event_kind=work.master.xlsx[redirect_404] 5 col [url, inlinks, action,
target_url, status]; allowed_writers null + protected_columns null
→ schema-level governance gate YOK; skill-level enforcement intact
(transaction.update OK, governance Phase 14+ defer).master.xlsx[robots_txt] 5 col [id, level, issue,
detail, resolution]; allowed_writers null → skill-level
enforcement intact.master.xlsx[completed_work] 6 col [id, task_or_content,
url, date, category, note]; allowed_writers null + protected_
columns null → skill-level enforcement intact.^[a-z][a-z0-9-]*$; event_type 10-enum içinde:
event_type=content_removeevent_type=redirect_deployedmaster.xlsx[content_improve] 8 col; allowed_writers
null → READ-ONLY consume (consistency report FAIL trigger için
optimization sheet read).Row read where url == {input.url}. Action string compare
(schema'da enum null, R-86/R-87/R-90/R-91 rules'tan derive):
action == "prune" → Step 2 trigger.action == "redirect" → Step 2 trigger.action == "delete" → Step 2 trigger.action == "revise" → DURUR #4 (revise-content skill domain,
wrong skill).action != prune/redirect/delete/revise → DURUR #4 trigger.Input action override: input.action parametresi
content_decay.action ile cross-check; mismatch durumunda RED
(input drift, content_decay authority).
GSC data cross-check (master.xlsx[content_decay] sütunları +
content_improve sheet F-15 READ-ONLY):
clicks_delta < -20% (significant drop)delta_pct < -15%position_delta > +5 (position drop)impressions_delta < -10%trend == "down" (3-month rolling)Multi-signal threshold: minimum 3/5 signal satisfied gerekli (single- signal remediation YASAK — Principle 1 Layer 2).
DURUR #1 trigger: R-85 threshold satisfied değil → manual approve gerekli (Süleyman onayı), single-signal remediation YASAK.
Süleyman onayı zorunlu (autonomy.confidence: MEDIUM, requires_
approval: true). project.config.json read → profile field
profile-aware gate sıkılaştırması:
profile == "ymyl" → DAHA SIKI: legal/medical/financial content
prune için ek belge gerekli (irreversible 410 = lost authority
signal).profile == "e-commerce" → product page prune dikkat (out-of-stock
vs permanent removal ayrımı; default = 301 to category).profile == "local-service" → location page redirect to parent
service area (geographic authority preserve).profile == "b2b-saas" → tolerant (feature deprecation routine);
301 to changelog/docs preferred.profile == "portfolio" → minimal prune (rare); manager manuel
onay.DURUR #2 trigger: R-90 manuel approve YOK → STOP.
R-91 decision tree branch:
Senaryo 1 — action="prune" + organic traffic VAR (R-85 GSC clicks > 0):
[url, inlinks, "301", target_url, "active"].Senaryo 2 — action="prune" + organic traffic YOK (R-85 GSC clicks == 0):
[id, "warning", "disallow_404", url, "robots Disallow:"].[url, inlinks, "410", null, "permanent"].Senaryo 3 — action="redirect":
[url, inlinks, "301", target_url, "active"].Senaryo 4 — action="delete":
[id, "critical", "disallow_410", url, "robots Disallow: + 410"].[url, inlinks, "410", null, "permanent"].R-118 humanize skill-content ölçeği — content-remediation context'inde:
Step 4 decision'a göre 3 sheet'e WRITE (transaction.update, skill-level enforcement intact, schema-level allowed_writers null = governance Phase 14+ defer):
master.xlsx[redirect_404] (transaction.update F-10) — 5 col:
url, inlinks, action ("301"|"410"), target_url, status.master.xlsx[robots_txt] (transaction.update F-11) — 5 col: id,
level (severity), issue, detail (URL), resolution.Atomic transaction discipline: write batch (3 sheet) tek commit window içinde rollback-able; partial failure → tüm sheet revert.
Entry append (transaction.update F-12, 6 col):
id: UUID v4task_or_content: "remediation: {action}"url: {input.url}date: UTC ISO 8601 today (YYYY-MM-DD)category: action enum value ("prune" | "redirect" | "delete")note: "R-91 decision: {decision_path}; R-85 signals: {satisfied_signals}; profile: {profile}"Principle 1 Layer 3 audit trail: note field decay reason + signal
list verifiable (GSC actual data kaynak), fabricate yasak.
Event entry (5 required field F-14 strict):
schema_version = "1.0" (F-14 const).event_kind = "work" (F-9 ADR-020 4-enum içinden, production
output).event_id = UUID v4.timestamp = UTC ISO 8601.project_id = {input.project_slug} (F-14 pattern: ^[a-z] [a-z0-9-]*$).event_type:
action == "prune" veya "delete" → content_remove (F-14
enum 10-value).action == "redirect" → redirect_deployed (F-14 enum).actor = "skill:content-remediation".target = {input.url}.action = {input.action}.decision_path = R-91 senaryo (1|2|3|4).signals_satisfied = list (R-85 multi-signal).clicks_delta + delta_pct + position_delta + impressions_delta + trend 3/5 minimum sağlanmıyor → single-signal remediation YASAK
(P1 Layer 2). Manual approve gerekli (Süleyman onayı). Default
path: STOP, master_task close suggestion.content_decay.action != "prune" / "redirect" / "delete" → wrong skill domain. action="revise" →
revise-content skill (Wave 1 W-F2); action enum dışı değer →
schema drift report.completed_work sheet schema-level allowed_writers: null →
schema-level gate YOK; skill-level enforcement intact (write OK,
governance Phase 14+ defer). Bu DURUR aktif değil — informational
gate, write proceed.Bu skill 3 master.xlsx sheet'e WRITE eder (skill-level enforcement intact, schema-level allowed_writers null = governance Phase 14+ defer):
master.xlsx[redirect_404] (F-10, 5 col, transaction.update).master.xlsx[robots_txt] (F-11, 5 col, transaction.update).master.xlsx[completed_work] (F-12, 6 col, transaction.update —
audit trail).READ-ONLY consume (write yapılmaz):
master.xlsx[content_decay] (F-2 — action read).master.xlsx[content_improve] (F-15 — consistency report read).project.config.json (P2 profile read).Output artifacts:
_state/events.jsonl (append, F-9 + F-14 enum).URL canonical mismatch detection + branch matrix paterni (cross-skill convention: revise-content + verify-indexing + content-remediation cooperative resolution, intra-wave investigation paterni Phase 14 W3-W2-C-b doğum belgesi Q-W3W2Cb-001 in-wave RESOLVED /main-page duplicate-canonical example).
GSC index_inspect coverage state ile canonical drift surface edilir:
coverageState == "DUPLICATE_REDIRECT" veya googleCanonical != userCanonical → drift confirmed.coverageState == "MOVED_PERMANENTLY" veya googleCanonical points to different URL → canonical drift implicit.(a) Duplicate via canonical — googleCanonical başka URL'ye işaret ediyor, kaynak URL duplicate:
action == redirect_deployed (R-91 Senaryo 3 paterni reuse).target = googleCanonical (GSC authoritative source).event_type = redirect_deployed (F-14 direct match), note = "duplicate_via_canonical_GSC_inspect"./main-page → / 301 deploy.(b) Canonical drift — userCanonical doğru ama site internal link/sitemap drift'i nedeniyle Google başka URL'yi tercih etmiş:
action == redirect_deployed + target = primary_url (R-91 Senaryo 1 + Senaryo 3 birleşim).event_type = redirect_deployed, note = "canonical_drift_primary_url_restored".(c) Manual review — drift surface ama düz redirect yetersiz (örn. content materially differs, cluster-level rerouting gerekli):
action == manual_review (skill spec event_type=skill_content_remediation + note explanation).note = "[event_type_intent=canonical_review explanation=...]" (canonical event_type per v1.6-Phase-2 H-E; replaces legacy DSL workaround event_type=manual + note=[skill=content-remediation ...]; rules/events-writer.md Section 4 cross-ref).İntra-wave cooperative resolution paterni:
index_inspect ile drift confirm/refute (authoritative source).Skill content'inde proje slug hardcode YASAK. Tüm proje referansları
runtime input ({input.project_slug}, {input.url}, {input.target_url})
üzerinden çözümlenir. URL örnekleri SKILL.md'de generic placeholder
(https://example.com/blog/post-slug) kullanır.
version: "1.0" (Phase 11 Wave 2 ilk shipping).status: wip (Phase 12 stabilizasyon sonrası active promote).1.0 (events.jsonl payload + master.xlsx
3-sheet write contract kontratı).autonomy.confidence: MEDIUM (R-90 manual approve gate enforced;
HIGH promotion 3 başarılı remediation cycle sonrası, profile-aware
ymyl gate intact).npx claudepluginhub popiliadam/platinum-seo-engine --plugin platinum-seo-engineUse when: kullanıcı "blog revize et", "içerik güncelle", "decay düzelt", "section revise et", "blog tazele", "post güncelle", "article refresh" der ya da `/pseo-revise` çağırır. master.xlsx [content_decay] satırından action="revise" alındığında, R-87 section-targeted diff workflow uygulanır, R-88 freshness theater preempt edilir, R-89 canonical preserve edilir. Also use when: GSC clicks delta drop > threshold detect edildiğinde (R-85 multi-signal: clicks_delta < -20%, delta_pct < -15%, trend "down" 3-month rolling); manuel revise request var ve mevcut blog outputs/blog/{slug}/article.html olarak diskten okunabiliyor; project-config[profile] enum 5-değer (e-commerce | ymyl | local-service | b2b-saas | portfolio) içinden biri sabit ve revize sırasında profile-aware tone preserve edilecek (Principle 2). Do not use when: yeni blog için (new-blog skill kullan); FAQ block re-render için (faq-optimization Wave 2 kullan); decay action "prune"/"redirect"/"delete" için (content-remediation Wave 2 domain); image generation için (generate-images kullan); existing HTML diskte yok (DURUR #1, R-89 canonical preserve enforce edilemez); R-85 multi-signal threshold satisfied değil (DURUR #3, revize gereksiz); R-87 section-targeted yasak ve scope=full manuel approve olmadan (DURUR #5).
Audit site content to decide whether to keep, update, merge, redirect, or delete each page. Automatically activated for content audit, cannibalization, pruning, and traffic decline investigations.
Audits content quality and strategy: thin/duplicate content, cannibalization, service/location pages, blog posts, FAQ content, and schema triggers.