Skip to content
Skill Authoring
Skill

/search-optimizer

Optimize a site or app for SEO, AI-bot search and app-store search in one run: detect web vs store, run each audit once, merge one prioritized report; fixes only via member gates. Don't use for one fix (seo-ai-optimizer, aso-marketing).

BOOST
From plugin
luongnv89-skills
13645 skills4 agents
Install
$ npx -y skills add luongnv89/skills --skill search-optimizer --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/search-optimizer

Context preview

The summary Claude sees to decide when to auto-load this skill.

Optimize a site or app for SEO, AI-bot search and app-store search in one run: detect web vs store, run each audit once, merge one prioritized report; fixes only via member gates. Don't use for one fix (seo-ai-optimizer, aso-marketing).

SKILL.md

search-optimizer.SKILL.md
name: search-optimizer
description: "Optimize a site or app for SEO, AI-bot search and app-store search in one run: detect web vs store, run each audit once, merge one prioritized report; fixes only via member gates. Don't use for one fix (seo-ai-optimizer, aso-marketing)."
license: MIT
effort: high
dependencies:
  - seo-ai-optimizer
  - website-agent-readiness
  - viral-product-evaluator
  - aso-marketing
metadata:
  version: 1.1.0
  author: "Luong NGUYEN <luongnv89@gmail.com>"
  architecture: "orchestrator (detect target → web and/or store branch → member audits with skip-checks → merged report)"

Search Optimizer

One invocation for "optimize for SEO / AI-bot search / app-store search". This skill does no auditing of its own: it detects the target type; evidence is captured once, the live scan runs at most once, overlapping checks are skipped where the member supports skip-checks, and remaining overlaps are merged into one row per defect in **one** prioritized report. It is **audit-first**: every write happens inside a member's own approval gate. This file stays short to protect the context budget; load `references/` files only at the phase that names them.

Members

| Branch | Member | Owns | Required? | |---|---|---|---| | web | `seo-ai-optimizer` | `meta-tags,robots-sitemap,structured-data,llms-txt,crawler-access` + all codebase fixes | required | | web | `website-agent-readiness` | `agent-readiness-scan,markdown-pages` (plans only, never fixes) | optional | | web, store | `viral-product-evaluator` | `virality` (skips `meta-tags` on the web branch) | optional | | store | `aso-marketing` | the store listing: keywords, metadata, localization | required |

Matrix, fallback cases and per-member `skip-checks`: `references/check-ownership.md`.

Detect the target

| Signal | Branch | |---|---| | Public URL, or a repo with HTML/templates, `next.config.*`, `astro.config.*`, `public/robots.txt`, `sitemap*` | **web** | | `Info.plist`, `*.xcodeproj`, `build.gradle*` with `applicationId`, `fastlane/metadata/`, an App Store / Play listing URL | **store** | | Both kinds of signal, or the user asks for both | **both** — web branch, then store branch; viral-product-evaluator runs **once** | | Neither | Ask one question: "Website search, app-store search, or both?" — wait for the answer |

Prerequisites

  • A target: URL, repo path, or store listing. Ask when none is given.
  • `curl` and `python3` for web intake.
  • Output dir: user-supplied, else `${TMPDIR:-/tmp}/search-optimizer/<slug>-<UTC stamp>/` —

outside the checkout, so the orchestrator itself never writes into the repo.

Dependency Preflight (mandatory)

This skill invokes the four members declared in frontmatter `dependencies`. Run this once, in Phase 1 after branch detection and before intake:

if command -v asm >/dev/null && asm deps --help >/dev/null 2>&1; then
  asm deps discover search-optimizer --json || echo "discover failed; acquire still runs" >&2
  echo "so_mode=lease"
else
  echo "asm deps unavailable: npm install -g agent-skill-manager@latest" >&2
  echo "so_mode=installed"
fi
printf 'so_session=%s\n' "search-optimizer-$(date +%s)-$$"   # record it; reuse it verbatim

1. Check only the members of the detected branch: web → seo-ai-optimizer, viral-product-evaluator, and website-agent-readiness when the target has a public URL; store → aso-marketing, viral-product-evaluator; both → the union. Never acquire a member whose branch the run does not reach. 2. With `so_mode=lease`, run `asm deps acquire <member> --session <so_session> --json` for each member from step 1. Record each returned `skillMdPath` and read that file directly. 3. With `so_mode=installed`, test each member from step 1 with `test -f "$HOME/.claude/skills/<member>/SKILL.md" || test -f "$HOME/.agents/skills/<member>/SKILL.md"`, falling back to `asm list -p claude --json | grep '"<member>"'`, because same-repo skills can be installed without the registry knowing the bare name. Record the path that exists. 4. seo-ai-optimizer (web) and aso-marketing (store) are **required** for their branch. If one fails step 2 or 3, print `Missing skill: <member> — install: asm install github:luongnv89/skills:skills/<member> -p claude --yes` and stop before intake; write nothing. In a "both" run, offer to rerun with only the branch whose required member is installed. 5. website-agent-readiness and viral-product-evaluator are **optional**: a miss is fail-soft. Skip the member, fall back per `references/check-ownership.md`, and list its checks under "Not covered" with the install line. 6. **Release in `finally`.** If any acquire ran, run `asm deps release --session <so_session> --json` once at every terminal outcome, stops included, before the Final response. List a failed release under `Uncertainty:`.

Never substitute one member for another or hand-run a member's workflow inline. Members run their own preflights for their own dependencies (seo-ai-optimizer checks website-agent-readiness for its Step 8); this preflight covers only what search-optimizer invokes directly.

Repo Sync Before Edits (mandatory)

The orchestrator writes only to the output dir. Members that write into a git repo (seo-ai-optimizer Step 6, aso-marketing Phase 4) — or an output dir the user placed in a repo — sync first:

git remote get-url origin >/dev/null || { echo "No origin remote — stop and ask" >&2; exit 1; }
branch="$(git rev-parse --abbrev-ref HEAD)"
stashed=0
if [ -n "$(git status --porcelain)" ]; then
  git stash push -u -m "pre-search-optimizer" || { echo "Stash failed — stop and ask" >&2; exit 1; }
  stashed=1
fi
git fetch origin && git pull --rebase origin "$branch" || {
  echo "Sync failed — stop and ask (stashed=$stashed: changes are in the pre-search-optimizer stash)" >&2; exit 1; }
if [ "$stashed" = 1 ]; then
  git stash pop || { echo "Stash pop conflict — stop and ask" >&2; exit 1; }
fi

On any `stop a

Read more
Ships withluongnv89-skills

One command drops a tested, versioned skill into your agent. No more ad-hoc prompts. The same rigorous steps run every time. Skills are independent files.

Get the whole plugin

Other skills on luongnv89-skills.