searvex-seo 0.7.0 → 1.1.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +2 -2
- package/CHANGELOG.md +102 -0
- package/NOTICE +2 -0
- package/README.md +173 -170
- package/THIRD_PARTY_NOTICES.md +750 -0
- package/dist/analyze/audit.d.ts +12 -0
- package/dist/analyze/audit.js +18 -2
- package/dist/analyze/audit.js.map +1 -1
- package/dist/analyze/content.js +9 -1
- package/dist/analyze/content.js.map +1 -1
- package/dist/analyze/context.d.ts +7 -1
- package/dist/analyze/context.js +10 -1
- package/dist/analyze/context.js.map +1 -1
- package/dist/analyze/inventory.js +1 -1
- package/dist/analyze/priority.js +32 -0
- package/dist/analyze/priority.js.map +1 -1
- package/dist/analyze/structured-data.js +3 -1
- package/dist/analyze/structured-data.js.map +1 -1
- package/dist/analyze/technical.d.ts +10 -0
- package/dist/analyze/technical.js +41 -12
- package/dist/analyze/technical.js.map +1 -1
- package/dist/cli.d.ts +6 -1
- package/dist/cli.js +84 -18
- package/dist/cli.js.map +1 -1
- package/dist/commands/crux.d.ts +8 -0
- package/dist/commands/crux.js +61 -0
- package/dist/commands/crux.js.map +1 -0
- package/dist/commands/gsc.d.ts +10 -1
- package/dist/commands/gsc.js +212 -37
- package/dist/commands/gsc.js.map +1 -1
- package/dist/commands/monitor.js +71 -20
- package/dist/commands/monitor.js.map +1 -1
- package/dist/commands/optimize.js +26 -4
- package/dist/commands/optimize.js.map +1 -1
- package/dist/commands/repo.js +9 -6
- package/dist/commands/repo.js.map +1 -1
- package/dist/commands/research.js +1 -1
- package/dist/commands/research.js.map +1 -1
- package/dist/commands/review.d.ts +11 -0
- package/dist/commands/review.js +72 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/run.d.ts +2 -0
- package/dist/commands/run.js +41 -12
- package/dist/commands/run.js.map +1 -1
- package/dist/crawl/render.d.ts +4 -0
- package/dist/crawl/render.js +38 -5
- package/dist/crawl/render.js.map +1 -1
- package/dist/extract/html.d.ts +5 -0
- package/dist/extract/html.js +10 -0
- package/dist/extract/html.js.map +1 -1
- package/dist/integrations/bing.d.ts +20 -1
- package/dist/integrations/bing.js +42 -2
- package/dist/integrations/bing.js.map +1 -1
- package/dist/integrations/credentials.d.ts +51 -3
- package/dist/integrations/credentials.js +165 -1
- package/dist/integrations/credentials.js.map +1 -1
- package/dist/integrations/crux.d.ts +5 -1
- package/dist/integrations/crux.js +27 -3
- package/dist/integrations/crux.js.map +1 -1
- package/dist/integrations/google-oauth.d.ts +2 -1
- package/dist/integrations/google-oauth.js +3 -3
- package/dist/integrations/google-oauth.js.map +1 -1
- package/dist/integrations/gsc-csv.d.ts +0 -5
- package/dist/integrations/gsc-csv.js +0 -14
- package/dist/integrations/gsc-csv.js.map +1 -1
- package/dist/integrations/property.d.ts +20 -0
- package/dist/integrations/property.js +82 -0
- package/dist/integrations/property.js.map +1 -1
- package/dist/net/fetcher.d.ts +2 -2
- package/dist/net/fetcher.js +1 -1
- package/dist/net/ssrf.js +2 -1
- package/dist/net/ssrf.js.map +1 -1
- package/dist/optimize/fixes.d.ts +2 -0
- package/dist/optimize/fixes.js +76 -3
- package/dist/optimize/fixes.js.map +1 -1
- package/dist/optimize/transaction.d.ts +7 -1
- package/dist/optimize/transaction.js +48 -21
- package/dist/optimize/transaction.js.map +1 -1
- package/dist/repo/audit.js +13 -3
- package/dist/repo/audit.js.map +1 -1
- package/dist/repo/detect.d.ts +5 -0
- package/dist/repo/detect.js +34 -2
- package/dist/repo/detect.js.map +1 -1
- package/dist/repo/scan.d.ts +21 -2
- package/dist/repo/scan.js +90 -13
- package/dist/repo/scan.js.map +1 -1
- package/dist/report/brand.d.ts +4 -0
- package/dist/report/brand.js +7 -0
- package/dist/report/brand.js.map +1 -0
- package/dist/report/client.d.ts +15 -0
- package/dist/report/client.js +196 -0
- package/dist/report/client.js.map +1 -0
- package/dist/report/extras.d.ts +19 -0
- package/dist/report/extras.js +57 -0
- package/dist/report/extras.js.map +1 -0
- package/dist/report/html.d.ts +29 -3
- package/dist/report/html.js +144 -140
- package/dist/report/html.js.map +1 -1
- package/dist/report/i18n.d.ts +13 -0
- package/dist/report/i18n.js +202 -0
- package/dist/report/i18n.js.map +1 -0
- package/dist/report/markdown.d.ts +1 -1
- package/dist/report/markdown.js +2 -1
- package/dist/report/markdown.js.map +1 -1
- package/dist/report/prompt.d.ts +52 -0
- package/dist/report/prompt.js +120 -0
- package/dist/report/prompt.js.map +1 -0
- package/dist/report/remediation.d.ts +39 -0
- package/dist/report/remediation.js +83 -0
- package/dist/report/remediation.js.map +1 -0
- package/dist/rules/engine.js +4 -0
- package/dist/rules/engine.js.map +1 -1
- package/dist/searvex.mjs +4918 -3046
- package/knowledge/rules/international.json +3 -2
- package/knowledge/rules/metadata.json +5 -3
- package/knowledge/rules/structured-data.json +2 -1
- package/package.json +12 -4
- package/skills/audit/SKILL.md +12 -9
- package/skills/geo/SKILL.md +2 -1
- package/skills/monitor/SKILL.md +5 -4
- package/skills/optimize/SKILL.md +11 -2
- package/skills/research/SKILL.md +4 -1
- package/skills/searvex/SKILL.md +34 -14
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
{
|
|
7
7
|
"name": "searvex",
|
|
8
8
|
"source": "./",
|
|
9
|
-
"description": "
|
|
9
|
+
"description": "Technical SEO + GEO audits with a bilingual action-center report, repair prompts for coding agents and safe code fixes with rollback."
|
|
10
10
|
}
|
|
11
11
|
]
|
|
12
12
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "searvex",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Understand search, fix what matters: deterministic technical SEO + GEO audits with a sourced rule base, a bilingual (EN/TR) action-center report with root-cause groups and repair prompts, competitor research, and safe, verified code fixes with rollback.",
|
|
5
5
|
"author": { "name": "Cihan Topaç", "url": "https://github.com/cihantopac" },
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"homepage": "https://github.com/cihantopac/searvex#readme",
|
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,108 @@ All notable changes to this project are documented here. The format follows
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [1.1.0] - 2026-11-01
|
|
9
|
+
|
|
10
|
+
A product-experience release: the analysis engine and its evidence are unchanged; how results are presented,
|
|
11
|
+
selected and fixed is new. Release notes: [docs/release-notes-1.1.0.md](docs/release-notes-1.1.0.md).
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- **Brand identity**: the approved Searvex logo (outlined SVG, theme-aware) in every HTML report header, an SVG
|
|
15
|
+
favicon in the reports, and the logo in the README. Source files in `docs/assets/brand/`.
|
|
16
|
+
- **SEO action center** (`report.html`): Overview (health score, issue groups, affected URLs, condition by area,
|
|
17
|
+
top three priorities, limits of the run), Priorities, Issues, GEO, Search performance (only with connected
|
|
18
|
+
data), Changes (only with a previous run) and Evidence. One shell for website, repository, monitor and
|
|
19
|
+
ecosystem reports.
|
|
20
|
+
- **English / Türkçe** interface with browser-language detection, and Turkish titles and fixes for all 90
|
|
21
|
+
rules. Evidence, URLs, code, file paths and rule ids are never translated.
|
|
22
|
+
- **Light / Dark / System** theme next to the language switch; both are remembered in `localStorage` (safe
|
|
23
|
+
fallback when storage is blocked) and applied before first paint.
|
|
24
|
+
- **Root-cause groups**: findings are split by URL template, source file or — when a rule hits most page types —
|
|
25
|
+
one shared layout, with page counts covering every affected URL. Every occurrence keeps a stable reference
|
|
26
|
+
(`ruleId#hash`).
|
|
27
|
+
- **Remediation labels**: automatic (only when a dry-run plan produced a concrete patch), agent-assisted or
|
|
28
|
+
manual/operational.
|
|
29
|
+
- **Issue selection and repair prompts**: select occurrences, groups or all visible issues, then generate an
|
|
30
|
+
editable prompt (Copy / Download Markdown, English or Turkish) for a coding agent. It contains the run id,
|
|
31
|
+
references, root-cause groups, evidence, fixes, verification steps and `optimize --only …` commands for the
|
|
32
|
+
automatic part. Secrets are redacted; crawled text is fenced as untrusted data. Website-only audits get a
|
|
33
|
+
remediation brief instead.
|
|
34
|
+
- `searvex review <runId|latest> <ref|ruleId> <confirmed|rejected|fixed> [--note]`: records agent/human
|
|
35
|
+
verdicts in `reviews.json`, shown next to (never instead of) the scanner evidence.
|
|
36
|
+
- `searvex open [runId|latest]` and `--open`: open the HTML report.
|
|
37
|
+
- Automatic fixes for three more rules (12 in total): identical duplicate `<title>` and meta description in
|
|
38
|
+
static HTML (conflicting duplicates become a task), relative hreflang URLs in static HTML (with `--site-url`).
|
|
39
|
+
- `run` writes `repository-report.html`; a website report produced with a repository knows that repository
|
|
40
|
+
(prompts target it; real patches count as automatic). `gsc report --audit` refreshes the audit's HTML with
|
|
41
|
+
the verified search data.
|
|
42
|
+
- `scripts/screenshots.mjs` captures README screenshots from a real report.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
- Terminal summary: score, issue types and affected pages, three priorities, automatic fixes, limits and the
|
|
46
|
+
`file://` link of the report — instead of twelve finding lines.
|
|
47
|
+
- Claude Code skills answer in 80–150 words with the report link and one next action; no phase-by-phase
|
|
48
|
+
narration, long tables or raw JSON in the chat.
|
|
49
|
+
- README rewritten as a visual product page with real report screenshots.
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- Optimizer, monorepos: `robots.no-sitemap` generated a second sitemap for an app that already had one, and
|
|
53
|
+
used the single `--site-url` for an app served on another host (found on a real monorepo copy, where the
|
|
54
|
+
patch passed verification but would have published login routes under the wrong host). It now plans only
|
|
55
|
+
for the app the finding is about and turns ambiguous multi-app cases into a reviewed task.
|
|
56
|
+
|
|
57
|
+
## [1.0.0] - 2026-11-01
|
|
58
|
+
|
|
59
|
+
First stable release. Every capability advertised as supported has been verified end to end; Bing Webmaster
|
|
60
|
+
is the one integration shipped as experimental. Evidence: [docs/release-checklist.md](docs/release-checklist.md)
|
|
61
|
+
and [docs/quality.md](docs/quality.md).
|
|
62
|
+
|
|
63
|
+
### Security and data integrity
|
|
64
|
+
- `monitor` no longer attaches search data of another website: `--import`, `--site-url`, `SEARVEX_GSC_SITE`
|
|
65
|
+
and `--baseline` are checked against the monitored site; an export without a pages table needs `--property`.
|
|
66
|
+
- Search Console exports whose pages span several subdomains are scoped as domain properties (their totals
|
|
67
|
+
include every subdomain); an explicit `--property` that does not contain every exported page is refused.
|
|
68
|
+
- `--render`: a hard per-page deadline stops pages whose scripts never yield or allocate without bound; a
|
|
69
|
+
stuck browser is replaced. Local host names with a trailing dot are blocked.
|
|
70
|
+
- Optimizer: backups and the manifest are written before the first file (an interrupted apply is recoverable
|
|
71
|
+
with `rollback`, and new applies are refused until then); a failed verification never overwrites files
|
|
72
|
+
edited meanwhile; CRLF line endings and file modes are preserved.
|
|
73
|
+
- Credentials: opt-in OS keychain store (`SEARVEX_CREDENTIAL_STORE=keychain`: macOS Keychain, Secret Service,
|
|
74
|
+
Windows DPAPI) using the OS's own tools with secrets on stdin; entries are isolated per config directory.
|
|
75
|
+
Automated scans confirm that no token, key or client secret reaches output or run files.
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
- `searvex bing auth|status|sites|logout` and `searvex crux auth|status|logout`: keys are entered without echo,
|
|
79
|
+
checked against the API and kept in the credential store instead of environment variables.
|
|
80
|
+
- `gsc auth` opens the browser for consent (`--no-browser` to only print the URL).
|
|
81
|
+
- `THIRD_PARTY_NOTICES.md` with the licence texts of all bundled runtime packages.
|
|
82
|
+
|
|
83
|
+
### Changed
|
|
84
|
+
- Search Console API reports show property totals from the daily series (anonymised queries included), equal
|
|
85
|
+
to the CSV export of the same period. Bing reports use the daily site series for totals and explain empty
|
|
86
|
+
data. `bing report` requires a verified site of the account.
|
|
87
|
+
- "Fix first" names the likely root cause of dependent findings (e.g. a client-side language switch that
|
|
88
|
+
changes titles, canonicals and hreflang for renderers) and ranks it first.
|
|
89
|
+
- 3-letter hreflang codes without an ISO 639-1 equivalent (`ast`, `ceb`) are reported at low severity with an
|
|
90
|
+
explanation instead of as high-severity mistakes; a finding's severity is its most severe occurrence.
|
|
91
|
+
- Status commands (`gsc|bing|crux status`) exit 0 only when the integration is usable.
|
|
92
|
+
|
|
93
|
+
### Fixed
|
|
94
|
+
- Repository mode: test/fixture/benchmark/example folders, HTML fragments and server template folders are not
|
|
95
|
+
treated as the site (a repository without a website now scores n/a); static sites in workspace folders and
|
|
96
|
+
locale sub-folders are found; clean URLs; sitemap URLs without a file (unless another app routes them); all
|
|
97
|
+
Laravel route files; Blade/PHP expressions no longer hide attributes; admin views and tests skipped; error
|
|
98
|
+
pages modelled as 404/500; Next.js fill images and aspect-ratio utility classes are sized; personal sites
|
|
99
|
+
are not asked for Organization markup.
|
|
100
|
+
- Website mode: pages linked only through internal redirects are not orphans; orphans are not reported on
|
|
101
|
+
crawls stopped at the page limit; cannibalisation candidates must share a language and exclude legal pages;
|
|
102
|
+
Turkish soft-404 wording is detected (Unicode-aware boundaries).
|
|
103
|
+
|
|
104
|
+
### Verified
|
|
105
|
+
- Live: Search Console API (authorization, refresh, properties, pagination, reports), Search Console CSV
|
|
106
|
+
(real Turkish and English exports), CrUX (values identical to the raw API), Bing Webmaster (mechanics; no
|
|
107
|
+
site data yet). Real-world rounds on 13 public sites and 9 repositories; benchmarks to 50,000 pages;
|
|
108
|
+
reproducible package; clean installs on Linux, macOS and Windows.
|
|
109
|
+
|
|
8
110
|
## [0.7.0] - 2026-10-30
|
|
9
111
|
|
|
10
112
|
### Added
|
package/NOTICE
CHANGED
|
@@ -11,6 +11,8 @@ The bundled distribution (dist/searvex.mjs) includes the following third-party s
|
|
|
11
11
|
- robots-parser (MIT) https://github.com/samclarke/robots-parser
|
|
12
12
|
- @babel/parser (MIT) https://github.com/babel/babel
|
|
13
13
|
|
|
14
|
+
Full licence texts of every bundled package: THIRD_PARTY_NOTICES.md.
|
|
15
|
+
|
|
14
16
|
Rule descriptions summarise and link to official documentation from Google Search Central, Bing
|
|
15
17
|
Webmaster, Yandex, schema.org, W3C, web.dev, MDN and crawler operators. Those documents remain the
|
|
16
18
|
property of their respective owners.
|
package/README.md
CHANGED
|
@@ -1,206 +1,209 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
>
|
|
9
|
-
|
|
10
|
-
>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
**
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
1
|
+
<h1 align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/brand/primary-reversed.svg">
|
|
4
|
+
<img alt="Searvex" src="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/brand/primary-color.svg" width="320">
|
|
5
|
+
</picture>
|
|
6
|
+
</h1>
|
|
7
|
+
|
|
8
|
+
<p align="center"><strong>Understand Search. Fix What Matters.</strong></p>
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
Open-source SEO and AI-search auditor for websites and code repositories. It finds what is actually wrong,
|
|
12
|
+
groups it by root cause, explains it with official sources and fixes the safe parts in your code — with
|
|
13
|
+
verification and one-command rollback. CLI and Claude Code plugin.
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<a href="https://www.npmjs.com/package/searvex-seo"><img alt="npm" src="https://img.shields.io/npm/v/searvex-seo?color=0e4f55&label=npm"></a>
|
|
18
|
+
<a href="https://github.com/cihantopac/searvex/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/cihantopac/searvex/actions/workflows/ci.yml/badge.svg"></a>
|
|
19
|
+
<a href="LICENSE"><img alt="License: Apache-2.0" src="https://img.shields.io/badge/license-Apache--2.0-0e4f55"></a>
|
|
20
|
+
<img alt="Node ≥ 20.10" src="https://img.shields.io/badge/node-%E2%89%A5%2020.10-0e4f55">
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
<p align="center">
|
|
24
|
+
<picture>
|
|
25
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/dashboard-dark.webp">
|
|
26
|
+
<img alt="Searvex HTML report: health score, issue groups, affected URLs, condition by area and the three issues to fix first" src="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/dashboard-light.webp" width="900">
|
|
27
|
+
</picture>
|
|
28
|
+
<br><sub>Real report of a live site (ovokodo.com, 52 pages, 2026-11-01). English / Türkçe · light / dark / system.</sub>
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
## What Searvex does
|
|
32
|
+
|
|
33
|
+
<picture>
|
|
34
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/workflow-dark.svg">
|
|
35
|
+
<img alt="Workflow: Audit, Understand, Prioritize, Fix, Verify, Monitor" src="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/workflow-light.svg" width="900">
|
|
36
|
+
</picture>
|
|
37
|
+
|
|
38
|
+
- **Audit** a live site (robots.txt-compliant crawl) or a repository (Next.js, Astro, Nuxt, Laravel, WordPress, static HTML).
|
|
39
|
+
- **Understand** every finding: evidence, the official source it is based on and the date that source was checked.
|
|
40
|
+
- **Prioritize** by root cause: one broken layout on 50 pages is one task, not 50.
|
|
41
|
+
- **Fix** what can be fixed safely, in your code, after you approve a diff — or hand the rest to your coding agent with a ready-made repair prompt.
|
|
42
|
+
- **Verify** by re-auditing; failed verification rolls back automatically.
|
|
43
|
+
- **Monitor** what improved or regressed since the last run.
|
|
44
|
+
|
|
45
|
+
## From findings to fixes
|
|
46
|
+
|
|
47
|
+
<table>
|
|
48
|
+
<tr>
|
|
49
|
+
<td width="50%" valign="top">
|
|
50
|
+
|
|
51
|
+
**Select what to fix.** Issues are grouped by root cause — a URL template, a source file or a shared layout — and labelled by how they get fixed:
|
|
52
|
+
|
|
53
|
+
- **Automatic** — a deterministic Searvex optimizer produced a verified patch.
|
|
54
|
+
- **Agent-assisted** — needs source or content judgement.
|
|
55
|
+
- **Manual** — deployment, server, Search Console or business decisions.
|
|
56
|
+
|
|
57
|
+
</td>
|
|
58
|
+
<td width="50%" valign="top">
|
|
59
|
+
|
|
60
|
+
<picture>
|
|
61
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/issues-dark.webp">
|
|
62
|
+
<img alt="Issues grouped by root cause with selection checkboxes" src="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/issues-light.webp">
|
|
63
|
+
</picture>
|
|
64
|
+
|
|
65
|
+
</td>
|
|
66
|
+
</tr>
|
|
67
|
+
<tr>
|
|
68
|
+
<td width="50%" valign="top">
|
|
69
|
+
|
|
70
|
+
<picture>
|
|
71
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/prompt-dark.webp">
|
|
72
|
+
<img alt="Editable repair prompt with copy and Markdown download" src="https://raw.githubusercontent.com/cihantopac/searvex/main/docs/assets/prompt-light.webp">
|
|
73
|
+
</picture>
|
|
74
|
+
|
|
75
|
+
</td>
|
|
76
|
+
<td width="50%" valign="top">
|
|
77
|
+
|
|
78
|
+
**Generate a repair prompt** for Claude Code, Codex or any coding agent: target and run id, stable finding references, exact URLs or `file:line`, root-cause groups, evidence, the fix and how to verify it. The receiving agent is told to re-check the source, reject false positives, fix root causes once, get approval and re-audit.
|
|
79
|
+
|
|
80
|
+
Secrets are redacted and crawled text is fenced as untrusted data. Without a repository the prompt becomes a remediation brief — the report never pretends it can edit your site.
|
|
81
|
+
|
|
82
|
+
</td>
|
|
83
|
+
</tr>
|
|
84
|
+
</table>
|
|
85
|
+
|
|
86
|
+
## Capabilities
|
|
87
|
+
|
|
88
|
+
| | |
|
|
89
|
+
|---|---|
|
|
90
|
+
| **Technical SEO** | Crawlability, indexability, canonicals, redirects, hreflang, metadata, structured data (Google rich-result requirements), links, performance signals, security. |
|
|
91
|
+
| **GEO / AI search** | AI crawler access by purpose (search vs. training vs. user fetch), snippet controls, entity consistency, content clarity. AI citations are reported as *not measured*. |
|
|
92
|
+
| **Repository checks** | Findings with `file:line` for framework source code, not only rendered HTML. |
|
|
93
|
+
| **Search Console & CrUX** | Optional, read-only: Search Console API (your own OAuth client) or CSV export, Chrome UX Report field data. Measured data is kept apart from inference. |
|
|
94
|
+
| **Competitor research** | Topic and page-type coverage gaps against competitors you name — labelled as hypotheses, not demand. |
|
|
95
|
+
| **Optimization** | 12 rule types fixed automatically (e.g. missing `lang`/viewport, canonicals, sitemap + robots.txt, identical duplicate `<title>`/description, hreflang codes and relative URLs): dry run → approval → apply → verify → rollback. |
|
|
96
|
+
| **Monitoring** | Changes since the previous run in every report; `monitor` and `--fail-on high` for CI. |
|
|
97
|
+
|
|
98
|
+
## Evidence, not claims
|
|
99
|
+
|
|
100
|
+
Status: **v1.1.0** ([release notes](docs/release-notes-1.1.0.md), [changelog](CHANGELOG.md)).
|
|
101
|
+
|
|
102
|
+
- **90 rules**, each with an official source and check date: **71 verified**, **17 heuristic**, **2 unmeasurable** (reported, never scored). `searvex rules show <id>`.
|
|
103
|
+
- **Automated tests** across unit, integration, Playwright and end-to-end runs of the bundled CLI; CI on Linux, macOS and Windows with Node 20, 22 and 24 ([quality report](docs/quality.md)).
|
|
104
|
+
- **Real-world validation** on 13 public sites and 9 repositories; **live** Search Console and CrUX checks returned values identical to the official exports and raw API.
|
|
105
|
+
- **Real issues it found**, confirmed against live HTML: a 404 page listed in MDN's sitemap; two `<title>` elements on every page of an Inertia.js site; Turkish URLs that switch to English (and to "page not found") for an en-US browser.
|
|
106
|
+
- **Safety:** read-only by default, SSRF protection, robots.txt always honoured, secret files never read, changes journaled with byte-for-byte rollback, reports rendered without `innerHTML` under a strict CSP.
|
|
107
|
+
|
|
108
|
+
Searvex never promises rankings, indexing, traffic or AI citations. The health score is Searvex's own summary of its findings, not a search-engine metric.
|
|
109
|
+
|
|
110
|
+
## Quick start
|
|
111
|
+
|
|
112
|
+
Requires **Node.js ≥ 20.10**. The npm package is `searvex-seo`; the command is `searvex`.
|
|
59
113
|
|
|
60
114
|
```bash
|
|
61
115
|
npm install -g searvex-seo
|
|
62
116
|
```
|
|
63
117
|
|
|
64
118
|
```bash
|
|
65
|
-
searvex --
|
|
119
|
+
searvex audit https://example.com --open
|
|
66
120
|
```
|
|
67
121
|
|
|
68
|
-
|
|
122
|
+
```bash
|
|
123
|
+
searvex audit ./my-site --site-url https://example.com
|
|
124
|
+
```
|
|
69
125
|
|
|
70
|
-
|
|
126
|
+
```bash
|
|
127
|
+
searvex optimize ./my-site --site-url https://example.com --lang en
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Reports land in `.searvex/runs/<runId>/` (`report.html`, `.md`, `.json`, optional `.sarif`). `searvex open latest`
|
|
131
|
+
opens the newest one. Full reference: [docs/cli.md](docs/cli.md).
|
|
132
|
+
|
|
133
|
+
**Claude Code plugin** — no npm install needed:
|
|
71
134
|
|
|
72
135
|
```
|
|
73
136
|
/plugin marketplace add cihantopac/searvex
|
|
74
137
|
/plugin install searvex@searvex
|
|
75
138
|
```
|
|
76
139
|
|
|
77
|
-
Then
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
`/searvex:optimize`, `/searvex:geo`, `/searvex:monitor`. The plugin bundles the CLI
|
|
81
|
-
(`dist/searvex.mjs`), so no `npm install` is needed.
|
|
140
|
+
Then `/searvex <url> [path]` runs the whole workflow with approval checkpoints and answers with a short
|
|
141
|
+
summary plus the report link. Single steps: `/searvex:audit`, `/searvex:geo`, `/searvex:research`,
|
|
142
|
+
`/searvex:optimize`, `/searvex:monitor`.
|
|
82
143
|
|
|
83
|
-
|
|
144
|
+
**Optional search data** (read-only, asked once per site):
|
|
84
145
|
|
|
85
146
|
```bash
|
|
86
|
-
# Everything in order with one crawl: audit → GEO → change since last run → research → repo audit → fix plan (dry run)
|
|
87
|
-
searvex run https://example.com ./my-site --competitor https://rival-a.com
|
|
88
|
-
|
|
89
|
-
# Website mode: crawl (robots.txt-compliant, rate-limited) and audit
|
|
90
|
-
searvex audit https://example.com --max-pages 300
|
|
91
|
-
|
|
92
|
-
# Repository mode: detect the framework and analyse source files
|
|
93
|
-
searvex audit ./my-next-app
|
|
94
|
-
|
|
95
|
-
# Safe fixes for a repository: dry run first (default), then apply with verification
|
|
96
|
-
searvex optimize ./my-site --site-url https://example.com --lang en
|
|
97
|
-
searvex optimize ./my-site --site-url https://example.com --lang en --apply
|
|
98
|
-
searvex rollback <changeId> ./my-site
|
|
99
|
-
|
|
100
|
-
# GEO / AI-search readiness
|
|
101
|
-
searvex geo https://example.com
|
|
102
|
-
|
|
103
|
-
# Brand family / product ecosystem across related sites
|
|
104
|
-
searvex ecosystem https://company.example https://product-a.example https://product-b.example
|
|
105
|
-
|
|
106
|
-
# Competitor & content-gap research (competitors are passed explicitly)
|
|
107
|
-
searvex research https://example.com --competitor https://rival-a.com --competitor https://rival-b.com
|
|
108
|
-
|
|
109
|
-
# Regression monitoring against the previous run (optionally with Search Console data)
|
|
110
|
-
searvex monitor https://example.com --fail-on high
|
|
111
|
-
|
|
112
|
-
# Optional search performance data: Google / CSV / skip (asked once per site)
|
|
113
147
|
searvex connect https://example.com
|
|
114
|
-
searvex gsc import performance-export.zip --audit latest # Search Console CSV export, no account access
|
|
115
|
-
searvex gsc auth --client client_secret.json # your own Google OAuth "Desktop app" client
|
|
116
|
-
searvex gsc report sc-domain:example.com --audit latest
|
|
117
|
-
SEARVEX_BING_API_KEY=… searvex bing report https://example.com/
|
|
118
|
-
|
|
119
|
-
# Inspect the rule base and re-verify its official sources
|
|
120
|
-
searvex rules check-sources
|
|
121
|
-
searvex rules list
|
|
122
|
-
searvex rules show canonical.in-body
|
|
123
|
-
searvex rules validate
|
|
124
148
|
```
|
|
125
149
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
### Optional integrations (read-only, opt-in)
|
|
131
|
-
|
|
132
|
-
| Variable | Enables |
|
|
133
|
-
|---|---|
|
|
134
|
-
| `SEARVEX_CRUX_API_KEY` | Real-user Core Web Vitals (Chrome UX Report API) |
|
|
135
|
-
| `searvex gsc auth` (or `SEARVEX_GSC_TOKEN`) | Search Console query × page analysis, `monitor` performance |
|
|
136
|
-
| `SEARVEX_BING_API_KEY` | Bing Webmaster Tools query × page analysis |
|
|
137
|
-
| `searvex gsc import export.zip` | Search Console Performance CSV/ZIP exports (no account access; no query × page data) |
|
|
138
|
-
| `npm i -D playwright` | `--render`: JavaScript rendering and raw-vs-rendered comparison |
|
|
139
|
-
|
|
140
|
-
Without them, Searvex reports these metrics as **not measured** — it never estimates them.
|
|
141
|
-
|
|
142
|
-
## What it checks
|
|
150
|
+
```bash
|
|
151
|
+
searvex gsc import performance-export.zip --audit latest
|
|
152
|
+
```
|
|
143
153
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
conflicts, canonical conflicts (including canonicals pushed into `<body>` by invalid head markup),
|
|
148
|
-
hreflang reciprocity and codes, soft 404s, client-side-only rendering, duplicate and near-duplicate
|
|
149
|
-
content (template-aware), retired rich-result types (FAQ, HowTo), entity consistency, declared vs actual
|
|
150
|
-
content language, untranslated headings on localized pages.
|
|
154
|
+
```bash
|
|
155
|
+
searvex crux auth
|
|
156
|
+
```
|
|
151
157
|
|
|
152
|
-
|
|
153
|
-
URLs with check dates, how to fix and how to verify — see [docs/knowledge-base.md](docs/knowledge-base.md).
|
|
158
|
+
Without them, clicks, impressions, positions and Core Web Vitals are shown as **not measured** — never estimated.
|
|
154
159
|
|
|
155
|
-
|
|
160
|
+
<details>
|
|
161
|
+
<summary><b>More commands</b></summary>
|
|
156
162
|
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
```bash
|
|
164
|
+
searvex run https://example.com ./my-site --competitor https://rival.example # whole workflow, one crawl
|
|
165
|
+
searvex geo https://example.com # AI crawler access
|
|
166
|
+
searvex research https://example.com --competitor https://rival.example # coverage gaps
|
|
167
|
+
searvex monitor https://example.com --fail-on high # regressions in CI
|
|
168
|
+
searvex ecosystem https://company.example https://product.example # related sites
|
|
169
|
+
searvex review latest <ref> rejected --note "behind login" # record a verdict
|
|
170
|
+
searvex rollback <changeId> ./my-site
|
|
171
|
+
searvex gsc auth --client client_secret.json && searvex gsc report --audit latest
|
|
172
|
+
searvex bing auth && searvex bing report https://example.com/ # experimental
|
|
166
173
|
```
|
|
167
174
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
- SSRF protection with connection-time DNS validation (anti-rebinding), per-redirect re-validation,
|
|
176
|
-
size and time limits; private networks require `--allow-private`.
|
|
177
|
-
- robots.txt (RFC 9309) is always honoured, including for outbound link checks; per-host rate limiting,
|
|
178
|
-
`Crawl-delay`, `429/Retry-After` backoff. User agent: `SearvexBot`.
|
|
179
|
-
- Repository access never follows symlinks, never reads secret files (`.env`, keys, credentials) and
|
|
180
|
-
refuses paths outside the repository.
|
|
181
|
-
- Crawled content is treated as untrusted; HTML reports are rendered without `innerHTML` and with a CSP.
|
|
175
|
+
| Integration | Status |
|
|
176
|
+
|---|---|
|
|
177
|
+
| Search Console CSV/ZIP import | supported (verified with real TR + EN exports) |
|
|
178
|
+
| Search Console API (`gsc auth`) | supported (verified live) |
|
|
179
|
+
| CrUX API (`crux auth`) | supported (verified live) |
|
|
180
|
+
| JavaScript rendering (`--render`, Playwright) | supported |
|
|
181
|
+
| Bing Webmaster API (`bing auth`) | experimental |
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
</details>
|
|
184
184
|
|
|
185
185
|
## Limitations
|
|
186
186
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
the official sources.
|
|
192
|
-
- Repository mode is static analysis: runtime-computed metadata (CMS, i18n, data fetching) is resolved
|
|
193
|
-
conservatively. Use website mode against a deployment for rendered output.
|
|
194
|
-
- Analysis is in-memory: tested to 20,000 pages (~25 KB/page); very large sites need `--max-pages` or sections (`--include`).
|
|
187
|
+
Website mode sees public pages only. Market data (search volumes, backlinks, SERP features) and AI citations are
|
|
188
|
+
not fetched or estimated. Repository mode is static analysis: runtime-computed metadata is resolved
|
|
189
|
+
conservatively. In repositories with several apps, sitemaps are left to a reviewed task because one site URL
|
|
190
|
+
cannot tell which host serves which app. Full list: [docs/limitations.md](docs/limitations.md).
|
|
195
191
|
|
|
196
|
-
|
|
192
|
+
## Related tools
|
|
197
193
|
|
|
198
|
-
|
|
194
|
+
Complementary open-source tools by the same author — independent, not required:
|
|
195
|
+
|
|
196
|
+
| | |
|
|
197
|
+
|---|---|
|
|
198
|
+
| [**Relivaro**](https://github.com/cihantopac/relivaro) | Software reliability, security and release readiness. |
|
|
199
|
+
| [**Jourilo**](https://github.com/cihantopac/jourilo) | UX and conversion engineering in real browser journeys. |
|
|
200
|
+
| [**Markilo**](https://github.com/cihantopac/markilo) | Brand identity and vector design for Claude Code. |
|
|
199
201
|
|
|
200
|
-
|
|
201
|
-
official source and a test fixture. See [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
202
|
+
## Contributing, security, license
|
|
202
203
|
|
|
203
|
-
|
|
204
|
+
Rules, framework adapters and fixtures are the most valuable contributions — every rule needs an official source
|
|
205
|
+
and a test fixture ([CONTRIBUTING.md](CONTRIBUTING.md)). Security: [SECURITY.md](SECURITY.md),
|
|
206
|
+
[docs/security.md](docs/security.md), [docs/privacy.md](docs/privacy.md). Architecture:
|
|
207
|
+
[docs/architecture.md](docs/architecture.md).
|
|
204
208
|
|
|
205
|
-
[Apache-2.0](LICENSE).
|
|
206
|
-
(not legal trademark clearance).
|
|
209
|
+
[Apache-2.0](LICENSE). Name availability notes: [docs/research/name-availability-2026-10.md](docs/research/name-availability-2026-10.md) (not legal trademark clearance).
|