@clize/clize 0.34.0 → 0.35.1
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/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/seo-pages.js +21 -13
- package/dist/core/seo-pages.js.map +1 -1
- package/dist/core/seo.js +74 -16
- package/dist/core/seo.js.map +1 -1
- package/dist/core/site-manifest.js +355 -0
- package/dist/core/site-manifest.js.map +1 -0
- package/dist/core/sites.js +211 -8
- package/dist/core/sites.js.map +1 -1
- package/dist/i18n/zh.js +2 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/lib/cloudflare.js +6 -2
- package/dist/lib/cloudflare.js.map +1 -1
- package/package.json +1 -1
- package/skills/clize-seo/SKILL.md +99 -44
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/lib/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACjC,MAAM,IAAI,GAAG,sCAAsC,CAAC;AA8CpD,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAG/B;
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/lib/cloudflare.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -225,10 +225,31 @@ will — it cannot measure those. That half of the state exists only here.
|
|
|
225
225
|
had recorded in prose that `invoice data extraction` was the site's third-best earning URL
|
|
226
226
|
despite an enterprise-looking SERP; the next day's session opened a fresh ledger, re-derived
|
|
227
227
|
the enterprise read from the SERP, and marked the page for retargeting. The rule that would
|
|
228
|
-
have caught it is in §4 ("Search Console beats the SERP read").
|
|
228
|
+
have caught it is in §4 ("Search Console beats the SERP read"). Import **skip rows and
|
|
229
|
+
cell-level lessons** only. Do not import site-level verdicts — "the content side has nothing
|
|
230
|
+
left", "the bottleneck is authority" — those expire, and are re-derived every round from the
|
|
231
|
+
cell count (§10, cadence); kunavo carried one such verdict through seven rounds, each session
|
|
232
|
+
re-confirming it instead of counting cells. And a family described in prose is not in the
|
|
233
|
+
ledger: a cluster, a locale axis or a page family with no rows and no `target page` will never
|
|
234
|
+
be built — write the rows (kunavo's nine-cell integrations family sat as a paragraph for two
|
|
235
|
+
rounds while every session executed "the existing ledger").
|
|
229
236
|
- **Narrative goes underneath as footnotes.** Two or three lines about what the pattern means.
|
|
230
237
|
Not six paragraphs of themes.
|
|
231
238
|
|
|
239
|
+
**Page batches — the second table in the ledger.** Keyword rows hold bets; the batch table holds
|
|
240
|
+
what the site's composition is doing, and it is what the batch gate and the retire rule (§7.3)
|
|
241
|
+
run on. One row per shipped batch, updated at every check from `gsc.pages`:
|
|
242
|
+
|
|
243
|
+
| batch | shipped | pages | indexed | not indexed | zero-impression windows | retired |
|
|
244
|
+
| --- | --- | --- | --- | --- | --- | --- |
|
|
245
|
+
| seo-tools-1 — llms.txt / hreflang / faq × en+de+ja | 2026-09-02 | 7 | 0 | 7 | 0 | 0 |
|
|
246
|
+
|
|
247
|
+
`indexed` / `not indexed` come from `gsc.pages.unseen[].index` (and from `latest` once a page
|
|
248
|
+
earns impressions); `zero-impression windows` counts the full windows since shipping in which the
|
|
249
|
+
batch earned nothing; `retired` counts pages noindexed, merged or redirected under §7.3. A batch
|
|
250
|
+
is found by `firstSeen` on the unseen rows — the date `check` first saw those URLs in the
|
|
251
|
+
sitemap — and `unseenTotal` says how much of the site the list is showing you.
|
|
252
|
+
|
|
232
253
|
### The pass/fail test
|
|
233
254
|
|
|
234
255
|
Six ways an analysis fails. The first is about *what you found*, the last two about *what you
|
|
@@ -259,8 +280,10 @@ run* — all six have been observed in real runs that read as finished.
|
|
|
259
280
|
discussions visible in `items` — so this costs nothing to fix: write them as rows next to
|
|
260
281
|
the pages they support. Observed in the field (2026-08-31 second run): five funded pages,
|
|
261
282
|
placement nearly invisible in the deliverable.
|
|
262
|
-
6. **Rows without pages.** Buildable rows — a serp verdict that is
|
|
263
|
-
serve — left unshipped at session end are stock, not output.
|
|
283
|
+
6. **Rows without pages — and families without rows.** Buildable rows — a serp verdict that is
|
|
284
|
+
not a wall, an intent you can serve — left unshipped at session end are stock, not output.
|
|
285
|
+
An opportunity written in prose (a cluster, a family, a locale axis) with no rows behind it
|
|
286
|
+
is test 1 wearing a different coat. The deliverable counts shipped
|
|
264
287
|
URLs, not qualified rows; a ledger of twenty rows and two pages is a session that spent itself
|
|
265
288
|
on the analysis. Observed on our own tenant zero: eleven weeks of rounds that produced ledgers
|
|
266
289
|
and no pages. If a page costs a session, the first deliverable is the generator (§7).
|
|
@@ -521,7 +544,7 @@ before the second page of any family, and never machine-translate a family page.
|
|
|
521
544
|
| ② 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 |
|
|
522
545
|
| ③ 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 |
|
|
523
546
|
| ④ deploy | ship it | page live, in sitemap |
|
|
524
|
-
| ⑤ enroll | `seo check --keywords <+this page's keyword
|
|
547
|
+
| ⑤ enroll | `seo check --keywords <+this page's keyword>` (`<keyword>@<locale>` for a non-English cell — otherwise it is priced as en-US and reads `no_data`), and write `shipped:<url>, <date>` in the ledger | the keyword shows in check output — under `pending` until a window that includes the ship date closes, then under `latest` or `unseen` |
|
|
525
548
|
|
|
526
549
|
Page type from row type: variant row → landing; `alternative`/`vs` row → comparison; action-
|
|
527
550
|
intent row → use-case; tool-intent row → tool page.
|
|
@@ -576,7 +599,8 @@ do the protecting, not experience:
|
|
|
576
599
|
whole site's classifier score, tool pages included. Distinct real content per page: a
|
|
577
600
|
locale page written in-locale, a host page whose install and config really differ;
|
|
578
601
|
- **the last batch is being indexed** — `gsc.pages.unseen` (§9) shows the previous batch's
|
|
579
|
-
`index
|
|
602
|
+
`index`; find the batch by `firstSeen`, and book the counts in the ledger's batch table (§3).
|
|
603
|
+
Mostly `indexed` → ship the next family. Mostly `Crawled - currently not indexed`
|
|
580
604
|
→ that is Google's own verdict on those pages; the round is indexing and pruning, not
|
|
581
605
|
shipping.
|
|
582
606
|
Impressions are not the gate for the next batch: at zero authority they arrive five to six
|
|
@@ -661,7 +685,9 @@ upstream calls — the only thing `check` may pay for is pricing words it has ne
|
|
|
661
685
|
side by side. `sv: 27100` at `position: 74` and `sv: 0` at `position: 4.5` are different worlds.
|
|
662
686
|
- `unseen` lists words **Search Console did not see this window**. Not "not ranking" — GSC has a
|
|
663
687
|
row only once you get impressions. A real position for one of them is a deliberate
|
|
664
|
-
`clize seo serp <keyword>` (~$0.02); never for all of them.
|
|
688
|
+
`clize seo serp <keyword>` (~$0.02); never for all of them. Non-English cells appear as
|
|
689
|
+
`word@locale`, the form you enrolled them in; `latest` / `pending` / `signals` rows carry
|
|
690
|
+
`locale` as a field.
|
|
665
691
|
- `rank: null` means the round had nothing to synthesise from (no Search Console access, or no
|
|
666
692
|
list) — read `notes`. **Competitor positions are not in `check`**; `--competitors` is remembered
|
|
667
693
|
configuration, and a head-to-head is `seo serp <keyword>`.
|
|
@@ -681,13 +707,15 @@ comparison with the ledger's `target page` (§3):
|
|
|
681
707
|
### `gsc.pages` — the page face
|
|
682
708
|
|
|
683
709
|
The question the product exists for is "how much traffic does the final page get", answered by
|
|
684
|
-
page since 0.34.0 — three facts side by side, no judgment
|
|
710
|
+
page since 0.34.0 — three facts side by side, no judgment. Reading it is the first fifteen
|
|
711
|
+
minutes of a round, not the round: the shapes below say what to fix, and the round still
|
|
712
|
+
enumerates and builds (§10).
|
|
685
713
|
|
|
686
714
|
| list | what is in it | the facts per row |
|
|
687
715
|
| --- | --- | --- |
|
|
688
716
|
| `latest` | the 20 pages with the most impressions this window | `impressions` / `clicks` and their `prev*` twins, `position`, live `status` (final HTTP status; `finalUrl` when it landed elsewhere) |
|
|
689
717
|
| `movers` | pages whose impressions halved or doubled (larger side 20+), including pages that went to zero | the same, plus `index` for the collapsed ones |
|
|
690
|
-
| `unseen` | sitemap URLs with no impressions this window,
|
|
718
|
+
| `unseen` | sitemap URLs with no impressions this window — most recently first-seen first, then `lastmod`; up to 200, `unseenTotal` says how many there are | `firstSeen` (the date `check` first saw the URL in the sitemap), `status`, `index` — Google's own words: `Submitted and indexed`, `Crawled - currently not indexed`, `Discovered - currently not indexed`, `URL is unknown to Google` |
|
|
691
719
|
|
|
692
720
|
Read it as three shapes, in this order:
|
|
693
721
|
|
|
@@ -707,10 +735,12 @@ Read it as three shapes, in this order:
|
|
|
707
735
|
|
|
708
736
|
Index status costs a quota call per URL, so `check` inspects at most 30 per run — collapsed
|
|
709
737
|
movers first, then the newest unseen sitemap URLs, then top pages — and `notes` says how many.
|
|
710
|
-
`index: null` means *not inspected this round*, never "not indexed". `unseen` order follows
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
738
|
+
`index: null` means *not inspected this round*, never "not indexed". `unseen` order follows
|
|
739
|
+
`firstSeen`, then `lastmod` — so a site-wide edit that stamps every page with today's `lastmod`
|
|
740
|
+
(clize.ai, 2026-09-02: 124 of 124) cannot push the newest batch out of the inspection budget; on
|
|
741
|
+
the first check after 0.35.0 `firstSeen` is seeded from `lastmod`, and from the next check on a
|
|
742
|
+
new URL is simply new. If `notes` says inspection is unavailable, the service account is
|
|
743
|
+
`Restricted`; `Full` unlocks it. No sitemap means no `unseen` list — publish one.
|
|
714
744
|
|
|
715
745
|
### `rank.signals` — the cross-source read, done for you
|
|
716
746
|
|
|
@@ -754,20 +784,17 @@ sentence (`authority_limited`); the roundups still come from a deliberate `seo s
|
|
|
754
784
|
|
|
755
785
|
## 10. The cycle
|
|
756
786
|
|
|
757
|
-
**The loop starts at measurement, and its purpose is allocation.**
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
the branch point: each round's only real question is **where the next unit of work goes** —
|
|
763
|
-
double down where a return signal appeared, stop where none did, discover only when the read
|
|
764
|
-
hands you something new. Measurement is the allocator, not a dashboard.
|
|
787
|
+
**The loop starts at measurement, and its purpose is allocation.** Between rounds the only
|
|
788
|
+
thing that changes is what *your* actions did to the world, and that shows up only in `check`,
|
|
789
|
+
which is free (sv/kd are monthly data, SERPs move slowly). The entry read is the branch point:
|
|
790
|
+
each round's real question is **where the next unit of work goes** — double down where a signal
|
|
791
|
+
appeared, stop where none did, and keep enumerating cells the ledger has not priced yet.
|
|
765
792
|
|
|
766
|
-
**A round is
|
|
793
|
+
**A round is five steps: ① read the feedback (`check`, free) → ② allocate (double down / stop
|
|
767
794
|
loss / new bet) → ③ execute (pages, placement, the occasional paid query) → ④ book it (write
|
|
768
|
-
what you put in back into the ledger, §3)
|
|
769
|
-
it breaks step ② two weeks later: "flat, no signal" and
|
|
770
|
-
pitched five roundups*" are different rows
|
|
795
|
+
what you put in back into the ledger, §3) → ⑤ report it (two tables, below).** Step ④ is the
|
|
796
|
+
one that gets skipped, and skipping it breaks step ② two weeks later: "flat, no signal" and
|
|
797
|
+
"flat, no signal, *and we already pitched five roundups*" are different rows, and only the
|
|
771
798
|
ledger can tell them apart.
|
|
772
799
|
|
|
773
800
|
```
|
|
@@ -775,15 +802,11 @@ clize seo check # free — every session on an existing site starts h
|
|
|
775
802
|
```
|
|
776
803
|
|
|
777
804
|
**Domain of the loop: a site that exists.** `check` needs `--domain` (or a clize project
|
|
778
|
-
directory)
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
and the entry read still pays before you spend a cent: it surfaces the GSC service-account
|
|
784
|
-
setup (a 2-minute human step — hand it to your human now, so it runs in parallel with the
|
|
785
|
-
analysis), and on a site with any history it hands you free seeds (`gsc.topQueries` /
|
|
786
|
-
`newQueries`) before you buy a single word.
|
|
805
|
+
directory). No site yet? That is pre-cycle work: discovery (§1), first batch (§7), enroll — the
|
|
806
|
+
cycle starts at that first check. **Round one is not special — it is the round that reads
|
|
807
|
+
zero.** The zeros are the baseline; the entry read still pays before you spend a cent: it
|
|
808
|
+
surfaces the GSC service-account setup (a 2-minute human step — hand it over now, in parallel),
|
|
809
|
+
and on a site with history it hands you free seeds (`gsc.topQueries` / `newQueries`).
|
|
787
810
|
|
|
788
811
|
### ②–③ Allocate, then execute — branch on what the read says
|
|
789
812
|
|
|
@@ -797,7 +820,12 @@ analysis), and on a site with any history it hands you free seeds (`gsc.topQueri
|
|
|
797
820
|
| `rank.pending` non-empty | those words are not measured yet — no branch applies to them this round; do not read their zero as "missed" |
|
|
798
821
|
| `authority_limited` | placement only **on that theme** — another page on it will not move it (§6). The label is per keyword, not per site: production continues on every other theme. If every funded theme reads this way, the site is Shape C (top of this file): re-derive the ledger toward tool, long-tail and locale rows before pitching |
|
|
799
822
|
| `gsc.newQueries` non-empty | mini-discovery: fold them into the matrix, price the new cells, extend the tracked list if they survive the SERP check |
|
|
800
|
-
| no movers two rounds running
|
|
823
|
+
| no movers two rounds running | the plan is stale, not slow — back to §1 and re-derive toward new page types; more waiting will not convert a flat line. The placement queue does not gate this: a queue that has waited on a human for two rounds is recorded as `blocked:` and handed over, and production goes on without it — placement is human-gated, building is not, and one must never hold the other (kunavo's four ready pitches held production for seven rounds) |
|
|
824
|
+
|
|
825
|
+
**Rows are not exclusive.** A round takes every branch its read matches — a technical fix, a
|
|
826
|
+
placement action and a production batch in the same session is the normal shape, not three
|
|
827
|
+
rounds. `technical round` and `indexing round` say what to do *for those pages*; they never
|
|
828
|
+
cancel the production step for the rest of the site.
|
|
801
829
|
|
|
802
830
|
### ④ Book the round
|
|
803
831
|
|
|
@@ -811,18 +839,45 @@ next round's allocation possible:
|
|
|
811
839
|
re-buying a keyword this one already ruled out.
|
|
812
840
|
- **New rows for whatever the read handed you** — `newQueries`, a keyword that just took a
|
|
813
841
|
`signals` form — with their serp verdict once you have it.
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
842
|
+
- **The batch table** (§3): for every shipped batch, `indexed` / `not indexed` from
|
|
843
|
+
`gsc.pages.unseen` (found by `firstSeen`), and whether this window was another zero. This is
|
|
844
|
+
the row the next round's batch gate and retire rule read.
|
|
845
|
+
|
|
846
|
+
The stop-loss branch above ("no movers two rounds running") is answerable only if the previous
|
|
847
|
+
round wrote down what it put in. The product does not track your side of the bet, deliberately:
|
|
848
|
+
it cannot measure whether a pitch was sent, and a field it cannot measure is just a form for you
|
|
849
|
+
to fill in. That state lives in the ledger or nowhere.
|
|
850
|
+
|
|
851
|
+
### ⑤ Report the round
|
|
852
|
+
|
|
853
|
+
What the human reads ends with two tables, not with findings. First, **this round's pages** —
|
|
854
|
+
every row the round touched, one line each:
|
|
855
|
+
|
|
856
|
+
| keyword | locale | serp | target URL | type | status |
|
|
857
|
+
| --- | --- | --- | --- | --- | --- |
|
|
858
|
+
| hreflang 生成 | ja-JP | open (small sites) | /ja/seo/hreflang-tag-generator/ | tool | built |
|
|
859
|
+
| open webui api key | en-US | open | /docs/integrations/open-webui | integration doc | to build: generator first |
|
|
860
|
+
| claude code preise | de-DE | official_wall | — | — | skip |
|
|
861
|
+
|
|
862
|
+
`status` is one of `built` (shipped this round), `to build` (buildable, not shipped — say why),
|
|
863
|
+
`exists` (a page already carries it), `skip` (with the reason). Second, **placement** — target /
|
|
864
|
+
page / status (`sent` / `drafted` / `blocked: needs human`). Then at most five lines of
|
|
865
|
+
narrative. A report that is findings and no pages table is test 1 (§3) in its final form: the
|
|
866
|
+
human cannot act on a paragraph. A round with an empty pages table says so *in* the table, with
|
|
867
|
+
the cell count that justifies it — kunavo round five delivered four findings, four
|
|
868
|
+
opportunities and no table, and the three buildable families in its own prose went unbuilt.
|
|
819
869
|
|
|
820
870
|
**Cadence**: SEO is a weeks-to-months system and the window `check` measures is 4 weeks wide —
|
|
821
|
-
checking daily just re-reads the same window. Every two weeks is plenty.
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
871
|
+
checking daily just re-reads the same window. Every two weeks is plenty. A round that re-reads
|
|
872
|
+
an unchanged window must not re-judge *existing rows*: same window, no movers, no new queries →
|
|
873
|
+
the P0s stand (tabledi 2026-09-02 re-ran discovery on the same data as 09-01 and flipped its
|
|
874
|
+
P0 — a recommendation that flips on identical data is noise). **That rule never means no new
|
|
875
|
+
cells.** Pricing a cell the ledger has never priced is not re-reading the window — the window
|
|
876
|
+
has no opinion on it. Every round, whatever the window: count the ledger's unbuilt buildable
|
|
877
|
+
rows against the site's cell space (§1.2: 100–150 for a full site); fewer than ten → this round
|
|
878
|
+
enumerates (§1) and builds. kunavo, 2026-09-02, round five: same window, ledger exhausted,
|
|
879
|
+
three markets never priced, a nine-cell family in prose — the round shipped zero pages and
|
|
880
|
+
deferred the pricing for the third time, quoting this paragraph.
|
|
826
881
|
|
|
827
882
|
---
|
|
828
883
|
|