@clize/clize 0.35.3 → 0.35.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/clize-seo/SKILL.md +53 -33
package/package.json
CHANGED
|
@@ -78,17 +78,32 @@ One free source comes before the paid ones: **the entry read's own gsc face** (
|
|
|
78
78
|
`gsc.topQueries` / `newQueries` are Google's list of what it already considers you relevant for.
|
|
79
79
|
On a site with history it is the best-fitted word source there is; on a new site it is empty.
|
|
80
80
|
|
|
81
|
-
### 1.1
|
|
81
|
+
### 1.1 The sweep — exhaust the competitor space once, then top it up
|
|
82
|
+
|
|
83
|
+
`competitors` is the one command that hands you keywords you did not think of, and it is cheap
|
|
84
|
+
enough to run to exhaustion — which no round had done before 2026-09-03: three sites, a dozen
|
|
85
|
+
rivals torn down in total at `--limit 25`, ledgers of 40–60 rows on sites whose honest cell
|
|
86
|
+
space is a few hundred. Do it once per site, and again whenever a product line is added:
|
|
82
87
|
|
|
83
88
|
```
|
|
84
|
-
clize seo competitors
|
|
89
|
+
clize seo competitors a.com b.com c.com --limit 100 # one call per market: --locale
|
|
85
90
|
```
|
|
86
91
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
+
| step | size | cost |
|
|
93
|
+
| --- | --- | --- |
|
|
94
|
+
| list every rival: every host on every SERP you have bought (`items[].host`) plus each product line's direct rivals — sites your size or one step up, not category leaders (their list is head terms you cannot have) | 15–25 domains | $0 |
|
|
95
|
+
| `competitors --limit 100`, per relevant market | 1,500–2,500 keywords, ~800 after dedupe | ~$0.04 a domain |
|
|
96
|
+
| `seo keywords` on all of them, one call per market | ~800 | ~$0.20 |
|
|
97
|
+
| `seo serp` on every `attackable`, `no_volume` and `no_data` survivor (§5) | ~300 | ~$6 |
|
|
98
|
+
| rows into the ledger, each with a verdict | 80–120 buildable | — |
|
|
99
|
+
|
|
100
|
+
About $8 and one session, and the ledger goes from forty rows to a hundred-plus. Read
|
|
101
|
+
`topKeywords[].keyword`, drop their brand terms, keep the rest. Two things the sweep is not: it
|
|
102
|
+
is not re-run every round (the 30-day cache makes that free and pointless — top up with the new
|
|
103
|
+
hosts each round's SERPs reveal), and it does not replace §1.2 (a rival's list is what *they*
|
|
104
|
+
rank for; your capability cells are what *you* can serve). Expect the SERP step to kill a third
|
|
105
|
+
to a half of the low-KD survivors — walls the difficulty score cannot see (§4): PDF→Excel at KD 0
|
|
106
|
+
in five markets was Adobe and iLovePDF in all five. That is the funnel working, not failing.
|
|
92
107
|
|
|
93
108
|
### 1.2 Capability-surface enumeration — cross the axes, don't brainstorm
|
|
94
109
|
|
|
@@ -126,7 +141,7 @@ A round is a funnel with a known size and a known price — and there is no such
|
|
|
126
141
|
"analysis round": every round ends in pages or in a blocker the human must clear (§10).
|
|
127
142
|
|
|
128
143
|
```
|
|
129
|
-
|
|
144
|
+
500–1,000 candidates once (§1.1 sweep), then 30–100 a round (§1.2 matrix + top-ups)
|
|
130
145
|
→ seo keywords price the whole list in one batched call
|
|
131
146
|
→ drop `wall`; keep `attackable`, `no_volume` and `no_data` (§5: the SERP decides, not the volume table)
|
|
132
147
|
→ seo serp each survivor the SERP check that KD cannot replace (§4)
|
|
@@ -140,12 +155,13 @@ A round is a funnel with a known size and a known price — and there is no such
|
|
|
140
155
|
| step | price | note |
|
|
141
156
|
| --- | --- | --- |
|
|
142
157
|
| `seo keywords`, 40 words | **~$0.10** | one batched call; per-word cost is negligible next to the fixed cost, so **always send the whole list at once** |
|
|
143
|
-
| `seo competitors`,
|
|
158
|
+
| `seo competitors`, one domain × `--limit 100` | **~$0.04** | the cheapest words you will ever buy — a 20-domain sweep is under a dollar |
|
|
144
159
|
| `seo serp`, one keyword | **~$0.02** | every survivor gets one, `no_data` cells included — 20–100 of these is $0.40–2.00 |
|
|
145
160
|
| `seo check` | **free**, plus ~$0.005/word to price words it has never priced | the metrics are reused for 30 days, so a re-check costs nothing |
|
|
146
161
|
| `seo spend` | **free** | itemized ledger of every charge — **copy it into the deliverable, never hand-tally** |
|
|
147
162
|
|
|
148
|
-
**
|
|
163
|
+
**The sweep is about $8, once; a round after it is about $1.** Those are the *cost priors* —
|
|
164
|
+
carry them.
|
|
149
165
|
|
|
150
166
|
Three behaviours follow, and all matter:
|
|
151
167
|
|
|
@@ -199,10 +215,10 @@ find out where every bet stands. `check` remembers the keyword list, the brand a
|
|
|
199
215
|
property; it does not remember whether you shipped the page or sent the pitch, and it never
|
|
200
216
|
will — it cannot measure those. That half of the state exists only here.
|
|
201
217
|
|
|
202
|
-
| keyword | locale | sv | kd | serp verdict | intent | target page | page | placement | format | priority |
|
|
218
|
+
| keyword | locale | sv | kd | serp verdict | intent | target page | page | placement | format · angle | priority |
|
|
203
219
|
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
204
|
-
| openrouter alternative | en-US | 1,300 | 1 | listicle_window | commercial | /compare/openrouter/ | shipped:/compare/openrouter/, 08-30 | pitched: apidog roundup, 08-31 | comparison + pitch 8 roundups | P0 |
|
|
205
|
-
| email api for ai agents | en-US | 0 (no_volume) | — | listicle_window | commercial | /inbox/ | shipped:/inbox/, 08-27 | none | landing + pitch 4 roundups | P0 |
|
|
220
|
+
| openrouter alternative | en-US | 1,300 | 1 | listicle_window | commercial | /compare/openrouter/ | shipped:/compare/openrouter/, 08-30 | pitched: apidog roundup, 08-31 | comparison · *the only gateway that publishes its failover log* + pitch 8 roundups | P0 |
|
|
221
|
+
| email api for ai agents | en-US | 0 (no_volume) | — | listicle_window | commercial | /inbox/ | shipped:/inbox/, 08-27 | none | landing · *an inbox the agent owns, not a Gmail it borrows* + pitch 4 roundups | P0 |
|
|
206
222
|
| メッセージストリームでエラー | ja-JP | 2,900 | 0 | definition_wall (UGC) | informational | — | none | none | skip: Reddit/Zenn own it | — |
|
|
207
223
|
|
|
208
224
|
- **`target page` is the intent; `page` and `placement` are the facts.** `target page` says which
|
|
@@ -216,8 +232,10 @@ will — it cannot measure those. That half of the state exists only here.
|
|
|
216
232
|
- **A row with a page and no placement is half a bet.** Building the page and not placing it is
|
|
217
233
|
manufacturing stock and never shipping it — the failure shape in the formula up top. The
|
|
218
234
|
`placement` column is there so that half is visible at a glance instead of buried in prose.
|
|
219
|
-
- **`target page
|
|
220
|
-
work; "write /compare/openrouter/ as a comparison page and pitch these eight
|
|
235
|
+
- **`target page`, `format` and the angle are part of the row.** "This keyword is good" is not
|
|
236
|
+
a unit of work; "write /compare/openrouter/ as a comparison page and pitch these eight
|
|
237
|
+
roundups" is — and the angle (§7.1 ①) is the one line that says why that page and not a
|
|
238
|
+
competent copy of the occupants.
|
|
221
239
|
- **Rows you decided against stay in the table**, with the reason. That is what stops the next
|
|
222
240
|
session from re-buying the same keyword — and a `skip` row with a reason is a real finding.
|
|
223
241
|
- **Opening the ledger on a site that already has analysis documents** (a plan, an older
|
|
@@ -299,6 +317,11 @@ run* — all six have been observed in real runs that read as finished.
|
|
|
299
317
|
URLs, not qualified rows; a ledger of twenty rows and two pages is a session that spent itself
|
|
300
318
|
on the analysis. Observed on kunavo: five rounds, five pages, three of the rounds at zero; and on clize.ai
|
|
301
319
|
the opposite failure — eleven weeks in which no round ran at all. If a page costs a session, the first deliverable is the generator (§7).
|
|
320
|
+
7. **Pages without a brief.** A page whose row names no occupant gap and no product asset is a
|
|
321
|
+
competent copy of the top 10, and at zero authority a competent copy does not rank: kunavo's
|
|
322
|
+
five model spec pages, built from the query alone against a page of opinion pieces, read zero
|
|
323
|
+
for three to eight weeks. The brief (§7.1 ①) is written before the page, and its angle sits in
|
|
324
|
+
the ledger row; no angle, no page.
|
|
302
325
|
|
|
303
326
|
---
|
|
304
327
|
|
|
@@ -576,7 +599,7 @@ pages built across two sessions, zero live. A session does not end with built, u
|
|
|
576
599
|
|
|
577
600
|
| step | act | it passed if |
|
|
578
601
|
| --- | --- | --- |
|
|
579
|
-
| ①
|
|
602
|
+
| ① brief | five fields, written into the row before a word of the page: **intent** — what the searcher wants, from the query, the shapes in the top 10, and Search Console when the site already earns on it (§4); **occupants** — open and *read* the top 3–5 pages, not their titles: structure, length, what each answers, promises and lacks (you fetch them yourself; there is no command for this and $0); **product truth** — what the product actually does for this intent (gate 3) and what only it has: first-party data, a working tool, a capability the occupants lack; **angle** — one sentence naming an occupant gap that a product truth fills; **form** — page type from what the top 10 is, length ≈ closest-shaped rival × 1.1–1.2, every H2 mapped to an occupant or a gap, the first 200 words, the FAQ in that market's phrasing. One brief per family; locale siblings change terminology and FAQ only | the angle names a gap *and* an asset — no angle, no page, and the row becomes `skip: no angle`. The three pages that worked had one (clize's OpenClaw page: "an inbox the agent owns" against two "borrow your Gmail" occupants; tabledi's Japanese dedupe: full-width forms, which a wall of tutorials never mentions; kunavo's 529 page: real failover numbers nobody on the page had); the five that read zero did not |
|
|
580
603
|
| ② produce | skeleton from `build site start`, judgment from here, words and code from you | first 200 words answer the query completely; your definition sentence is verbatim-identical site-wide |
|
|
581
604
|
| ③ self-check | against the spec sheet — there is deliberately no audit command | visible FAQ ↔ JSON-LD strictly 1:1; ≥2 internal links with varied anchors |
|
|
582
605
|
| ④ deploy | ship it | page live, in sitemap |
|
|
@@ -696,17 +719,13 @@ the 3–5 questions your money pages answer in the engines themselves (~15 minut
|
|
|
696
719
|
and note who gets named. Zero is a reading.
|
|
697
720
|
|
|
698
721
|
**Do not build a citation-probe cron** — a saved prompt set fired at N engines on a schedule.
|
|
699
|
-
Field-tested and rejected
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
engine name the competitor and not us?"), or a before/after comparison around a content-pack
|
|
707
|
-
launch. Until one of those fires, referrers plus the spot-check are the honest instruments.
|
|
708
|
-
And all AI-citation measurement is sampling — trust trends against your own baseline, never
|
|
709
|
-
absolute share.
|
|
722
|
+
Field-tested and rejected: self-authored prompts carry self-confirmation bias, a low-authority
|
|
723
|
+
site's probe is a flat zero line that still costs keys and upkeep, and a measurement nobody is
|
|
724
|
+
present to act on is inventory (one such cron sat dark for two weeks without a decision
|
|
725
|
+
changing). A probe earns its keep only when there is something to *attribute* — sustained AI
|
|
726
|
+
referrals, a real attribution question, a before/after around a launch. Until then, referrers
|
|
727
|
+
plus the spot-check; and all AI-citation measurement is sampling — trends against your own
|
|
728
|
+
baseline, never absolute share.
|
|
710
729
|
|
|
711
730
|
---
|
|
712
731
|
|
|
@@ -841,7 +860,8 @@ appeared, stop where none did, and keep enumerating cells the ledger has not pri
|
|
|
841
860
|
|
|
842
861
|
**A round is a pipeline, and it opens by building.** ⓪ **ship the qualified batch** — every
|
|
843
862
|
`to build` row from the last round and every plan cell with its own SERP verdict (§3), in every
|
|
844
|
-
ledger file — before reading a single number, while the
|
|
863
|
+
ledger file, each built from its brief (§7.1 ①) — before reading a single number, while the
|
|
864
|
+
session's budget is whole → ① read the
|
|
845
865
|
feedback (`check`, free) → ② allocate (double down / stop loss / new bet) → ③ execute what is
|
|
846
866
|
cheap now (siblings, retargets, placement drafts) and write the rest as the next session's
|
|
847
867
|
`to build` rows → ④ book it (§3) → ⑤ report it (two tables, below). This round's analysis
|
|
@@ -908,11 +928,11 @@ to fill in. That state lives in the ledger or nowhere.
|
|
|
908
928
|
What the human reads ends with two tables, not with findings. First, **this round's pages** —
|
|
909
929
|
every row the round touched, one line each:
|
|
910
930
|
|
|
911
|
-
| keyword | locale | serp | target URL | type | status |
|
|
912
|
-
| --- | --- | --- | --- | --- | --- |
|
|
913
|
-
| hreflang 生成 | ja-JP | open (small sites) | /ja/seo/hreflang-tag-generator/ | tool | built |
|
|
914
|
-
| open webui api key | en-US | open | /docs/integrations/open-webui | integration doc | to build: generator first |
|
|
915
|
-
| claude code preise | de-DE | official_wall | — | — | skip |
|
|
931
|
+
| keyword | locale | serp | target URL | type | angle | status |
|
|
932
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
933
|
+
| hreflang 生成 | ja-JP | open (small sites) | /ja/seo/hreflang-tag-generator/ | tool | also emits the sitemap `xhtml:link` block — no occupant does | built |
|
|
934
|
+
| open webui api key | en-US | open | /docs/integrations/open-webui | integration doc | the one setup page that states the model-routing limit | to build: generator first |
|
|
935
|
+
| claude code preise | de-DE | official_wall | — | — | — | skip |
|
|
916
936
|
|
|
917
937
|
`status` is one of `built` (shipped this round), `to build`, `exists` (a page already carries
|
|
918
938
|
it), `skip` (with the reason). A `to build` row carries a blocker, and only three exist:
|