← Back to Plugins
Tools

Seo-operator

Nourddine Ait moussa By Nourddine Ait moussa 👁 113 views ▲ 0 votes

AI-powered SEO operations plugin for OpenClaw. Crawl and audit websites, detect technical and on-page SEO issues, analyze internal linking, connect to WordPress and Google Search Console, discover SEO opportunities, prepare controlled fixes, require approval for sensitive changes, and verify results.

Homepage GitHub

Install

openclaw plugins install git:github.com/nourddine34/openclaw-seo-operator@v0.2.0

Configuration Example

{
  plugins: {
    entries: {
      "seo-operator": {
        enabled: true,
        config: {
          dataDir: ".seo-operator/data",
          siteUrl: "https://example.com",
          automationPolicy: "APPROVAL_REQUIRED",
          urlPolicy: {
            allowPrivateNetworks: false,
            additionalAllowedPorts: []
          }
        }
      }
    }
  }
}

README

# OpenClaw SEO Operator

An OpenClaw tool plugin that turns an OpenClaw agent into an SEO operations agent: crawling,
technical/on-page audits, WordPress + Rank Math, Google Search Console, competitor/backlink/local
SEO intelligence, a unified status overview with transparent priority scoring, report generation,
change detection, and a safety-gated recommend -> approve -> execute -> verify -> rollback action
engine — across one or many isolated projects/sites in a single installation.

**This is Part 5 of 5**: production hardening. See [PRODUCTION_READINESS.md](docs/PRODUCTION_READINESS.md)
for the honest, current verdict on what's ready to run against a real site and what isn't.

## Documentation

| | |
|---|---|
| [INSTALLATION.md](docs/INSTALLATION.md) | Build, load, verify |
| [QUICKSTART.md](docs/QUICKSTART.md) | Shortest path from zero to a fix executed |
| [ONBOARDING.md](docs/ONBOARDING.md) | The full guided setup flow |
| [CONFIGURATION.md](docs/CONFIGURATION.md) | Config shape, credentials, single vs. multi-site |
| [ARCHITECTURE.md](docs/ARCHITECTURE.md) | Layer-by-layer code map |
| [SECURITY.md](docs/SECURITY.md) | SSRF protection, credential handling, injection/traversal review |
| [AGENT_SECURITY.md](docs/AGENT_SECURITY.md) | Treating crawled content as untrusted input |
| [MULTI_SITE.md](docs/MULTI_SITE.md) | Project/credential/data isolation, verified |
| [PRIORITY_ENGINE.md](docs/PRIORITY_ENGINE.md) | The transparent scoring formula |
| [CHANGE_DETECTION.md](docs/CHANGE_DETECTION.md) | Comparing two audits without false alarms |
| [WORDPRESS_SETUP.md](docs/WORDPRESS_SETUP.md) | Application Password setup, what's actually writable |
| [GSC_SETUP.md](docs/GSC_SETUP.md) | OAuth setup |
| [CRAWLER_CONFIGURATION.md](docs/CRAWLER_CONFIGURATION.md) | Crawl parameters and what's respected automatically |
| [AUDIT_RULES.md](docs/AUDIT_RULES.md) | Every rule, by category |
| [ACTION_APPROVAL_MODEL.md](docs/ACTION_APPROVAL_MODEL.md) | The full DETECT..ROLLBACK lifecycle |
| [BACKLINKS.md](docs/BACKLINKS.md) | What backlink discovery actually does (and doesn't) |
| [LOCAL_SEO.md](docs/LOCAL_SEO.md) | NAP consistency, local audit, what's NOT verified |
| [PLUGIN_UX.md](docs/PLUGIN_UX.md) | Human-friendly error messages, before/after |
| [SCHEDULING.md](docs/SCHEDULING.md) | Why this plugin can't self-schedule, and what to do instead |
| [PERFORMANCE.md](docs/PERFORMANCE.md) | What's bounded, the one real bottleneck, why it's untouched |
| [TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md) | Common errors and what they mean |
| [DEVELOPMENT.md](docs/DEVELOPMENT.md) | Conventions for extending this plugin |
| [TESTING.md](docs/TESTING.md) | How the suite is organized, what's not covered |
| [CONTRIBUTING.md](docs/CONTRIBUTING.md) | Contribution checklist |
| [EXAMPLE_USE_CASE.md](docs/EXAMPLE_USE_CASE.md) | A full worked conversation |
| [KNOWN_LIMITATIONS.md](docs/KNOWN_LIMITATIONS.md) | The consolidated, honest gap list |
| [ROADMAP.md](docs/ROADMAP.md) | What's next, in priority order |
| [PRODUCTION_READINESS.md](docs/PRODUCTION_READINESS.md) | The verdict |
| [RELEASE_NOTES.md](RELEASE_NOTES.md) | This release |

## Architecture (short version — see [ARCHITECTURE.md](docs/ARCHITECTURE.md))

```
src/
  index.ts          Plugin entry point (defineToolPlugin), registers 34 tools
  config/           TypeBox config schema — single-site + multi-project
  domain/           Typed domain models
  projects/         Multi-project scope resolution
  priority/         Priority-scoring engine
  safety/           Action safety classification
  security/         SSRF guard, IP-range checks, credential redaction, untrusted-content fencing
  errors/           Typed error hierarchy + human-friendly message mapping
  logging/          Structured, redacting operation logger
  storage/          Repository interface + JSON-file implementation
  adapters/         HTTP fetch with SSRF validation, timeout, retry, size cap
  crawler/          BFS crawler, robots.txt, sitemap, HTML extraction, link graph
  audit-engine/     Rules, health score, comparison, change detection
  integrations/     wordpress/ search-console/ backlinks/ local-seo/ website/
  services/         Orchestration — every function takes an explicit projectId
  action-engine/    Recommend -> prepare -> approve -> execute -> verify -> rollback
  tools/            One thin file per model-facing tool
```

## Tools (34)

**Overview & reporting**: `seo_health`, `seo_status` (Command Center), `seo_report_generate`

**Crawl & audit**: `seo_crawl_site`, `seo_site_inspect`, `seo_audit_run`, `seo_audit_summary`,
`seo_issues_list`, `seo_issue_get`, `seo_page_info`, `seo_audit_compare`, `seo_change_detect`

**WordPress**: `wordpress_test_connection`, `wordpress_pages`, `wordpress_page_analysis`

**Search Console**: `search_console_test_connection`, `search_console_opportunities`

**Intelligence**: `competitor_add`, `competitor_list`, `competitor_analyze`, `backlinks_discover`,
`backlinks_list`, `backlinks_qualify`, `local_audit`, `content_opportunities`,
`internal_link_recommendations`

**Actions**: `action_plan_prepare`, `action_plan_list`, `action_plan_show`, `action_decide`,
`action_modify`, `action_execute`, `action_verify`, `action_rollback`

All read-only except the intelligence-tracking writes (local plugin storage only, never the live
site — `competitor_add`, `backlinks_discover`, `backlinks_qualify`, `local_audit`'s optional
upsert) and the action-engine writes, which are approval-gated by default. See
[ACTION_APPROVAL_MODEL.md](docs/ACTION_APPROVAL_MODEL.md).

## What's new in Part 5

- **Multi-project isolation** (`projects/`) — the substantial gap closed this part: every
  service/tool now takes an explicit `projectId`, every stored record carries one, credentials
  never fall back across projects. See [MULTI_SITE.md](docs/MULTI_SITE.md).
- **`seo_status`** — the SEO Command Center: one call for health, prioritized problems,
  opportunity counts, and action status.
- **Priority Engine** (`priority/priority-engine.ts`) — documented, transparent scoring; never
  predicts traffic.
- **`seo_report_generate`** — the full report (executive summary through change history) as
  JSON + markdown.
- **`seo_change_detect`** — structural change detection between two audits, designed to avoid
  false alarms.
- **Human-friendly errors** (`errors/human-message.ts`) — plain language plus a next step,
  in place of raw error codes.
- **Untrusted-content fencing** wired into `seo_page_info` and `wordpress_page_analysis`.
- A full documentation set (this table), an honest [KNOWN_LIMITATIONS.md](docs/KNOWN_LIMITATIONS.md),
  and the [PRODUCTION_READINESS.md](docs/PRODUCTION_READINESS.md) verdict.

## Build

```bash
npm install
npm run build            # tsc -p tsconfig.json
npm test                 # vitest — 530 tests as of this release
npm run plugin:build      # build, then `openclaw plugins build --entry ./dist/index.js`
npm run plugin:validate   # build, then `openclaw plugins validate --entry ./dist/index.js`
```

See [INSTALLATION.md](docs/INSTALLATION.md) to load it into OpenClaw.
seo technical-seo wordpress crawler seo-audit automation search-console ai

Comments

Sign in to leave a comment

Loading comments...