Skip to content
Back to skills

Geo Optimize

ASecurity

Write so an answer engine can quote you — ChatGPT, Perplexity, Google AI Overviews, Claude. Use when the user says "GEO", "tối ưu GEO", "generative engine optimization", "answer engine optimization", "AEO", "làm sao để AI trích bài mình", "xuất hiện trong AI Overview", or asks why traffic fell while rankings held. Also covers the OTHER thing called GEO — geography, local and market-led content — because the two share an acronym and not much else.

  • 7 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
content-marketinggobashnodeapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add XuHo-IT/Content-Agent-Kit --skill geo-optimize --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Geo Optimize?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Geo Optimize
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/xuho-it-geo-optimize/badge)](https://www.skillsdirectory.com/skills/xuho-it-geo-optimize)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: geo-optimize
description: Write so an answer engine can quote you — ChatGPT, Perplexity, Google AI Overviews, Claude. Use when the user says "GEO", "tối ưu GEO", "generative engine optimization", "answer engine optimization", "AEO", "làm sao để AI trích bài mình", "xuất hiện trong AI Overview", or asks why traffic fell while rankings held. Also covers the OTHER thing called GEO — geography, local and market-led content — because the two share an acronym and not much else.
---

# GEO

Two different jobs are called GEO. Say which one out loud before doing anything, because the
work does not overlap.

| the user means | this is about | go to |
|---|---|---|
| Generative Engine Optimization | being **quotable** by an answer engine | §1 onward |
| geography — local, market, "near me" | being **placed** | §6 |

## Hướng dẫn từng bước cho người dùng

> Chạy lệnh `node scripts/…` ở **thư mục gốc của kit** — thư mục có `AGENTS.md`, hai cấp trên file này (nếu skill được cài bằng `install-skills.mjs --kit`, đường dẫn nằm trong file `.kit-root` cạnh file này).

Dẫn người dùng theo đúng các bước dưới, bằng lời đơn giản. Trước khi bắt đầu: một câu nói skill sẽ làm gì, mất khoảng bao lâu, cần người dùng chuẩn bị gì. Đầu mỗi bước báo **"Bước n/N — <tên bước>"** kèm một câu đang làm gì. Khi cần người dùng làm gì, chỉ hỏi đúng một việc. Kết thúc: kết quả nằm ở đâu và việc nên làm tiếp.

| Bước | Agent làm gì | Người dùng cần làm |
|---|---|---|
| 1. Hỏi rõ "GEO" nào | Hỏi: muốn AI (ChatGPT, Perplexity…) trích bài, hay muốn nổi theo địa điểm | Chọn một trong hai |
| 2. Chấm bài | Chạy `geo-audit.mjs --in <file bài>.md` (thêm `--place "Đà Nẵng"` nếu là địa điểm) | Đưa file bài viết |
| 3. Đọc lỗi | Giải thích từng lỗi bằng lời thường: câu trả lời chưa đặt đầu đoạn, số liệu thiếu nguồn… | — |
| 4. Sửa bài | Viết lại các đoạn bị lỗi | Duyệt bản sửa |
| 5. Chấm lại | Chạy lại audit đến khi không còn lỗi bắt buộc (máy báo exit 0) | — |

**Hay vướng:**
- Số liệu có nguồn nhưng nguồn nằm ở đoạn khác → phải ghi nguồn ngay trong đoạn có con số.
- Đoạn mở bằng "Nó…", "Điều này…" → nhắc lại tên chủ thể, vì AI cắt riêng từng đoạn.
- Không ai đo được AI đã trích bài hay chưa → chỉ báo những gì đã sửa, đừng hứa kết quả.

## 1. What changed, in one paragraph

SEO gets a human to click a ranked link. GEO gets a machine to lift a passage out of your page
and cite it, and the reader may never arrive at all. That makes the unit of success different:
not a page that ranks, but **a passage that still means something once it is cut out of its
page**. Everything below follows from that one sentence.

This is why a piece can hold its rankings and lose its traffic. Nothing about it got worse. It
just was not written in a shape anything could quote.

## 2. Run the audit first, not last

```bash
node scripts/geo-audit.mjs --in brain/<slug>/post.md
```

It is rule-based — no key, no network, no model. It exits `1` when a **must** rule fails, so it
works as a gate in the same place `validate-post` sits.

Read the failures before you read the draft. The rules are the shape; the draft is your
opinion about the shape.

| rule | level | what it means |
|---|---|---|
| `answer-first` | must | the sentence under a question heading answers it, in ≤30 words, with no run-up |
| `self-contained` | must | no paragraph opens on "Nó", "Điều này", "However" |
| `sourced-numbers` | must | every number says where it came from **in its own paragraph** |
| `question-headings` | should | at least a third of the H2s match something a person would type |
| `definition` | should | an "X là Y" sentence in the first screen |
| `dated` | should | a real date, not "gần đây" |
| `table` | should | at least one — tables are the most-quoted thing on a page |

## 3. The three musts, and why they are musts

**Answer first.** The paragraph under a question heading is the candidate passage. If it opens
with *"Trong bài này chúng ta sẽ cùng tìm hiểu…"*, that is what gets quoted — an announcement
that an answer exists, in place of the answer. Put the answer in the first sentence and the
reasoning after it. This is the inverted pyramid, and it is worth noticing that the shape
answer engines reward is the one newsrooms settled on a century ago for the same reason:
the reader may stop at any moment.

**Self-contained paragraphs.** A passage is quoted alone. A paragraph beginning "Nó rẻ hơn
68%" is true on the page and meaningless off it — *what* is cheaper? Name the subject again.
Repetition that reads slightly redundant to a human reading top to bottom is what makes the
paragraph survive extraction. Accept the redundancy.

**Numbers carry their source in the same breath.** "Rẻ hơn 68%" and, three paragraphs later,
"số liệu từ RAG-EVAL-VN" are two passages, and only one of them will be quoted. Write "Rẻ hơn
68%, đo trên 500 câu hỏi tiếng Việt" — the claim and its warrant travel together or the claim
travels alone and gets dropped.

## 4. What this kit already gives you, free

- **`docs/12-writing-craft.md`** — the house rules on claims, marketing hooks and evidence.
- **`frame-geo-faq-direct`** — direct Answer-First search query frame in video form (the search box, then the definition sentence <25 words with citation anchor).
- **`genre: geo-answer`** in `templates/VIDEO_GENRES.template.json` — complete video sequence for Answer Engine queries.
- **Every number in the video pipeline is measured**, not decorative — `frame-chart-bars`,
  `frame-trend-line`, `frame-review-verdict`, `frame-geo-region-stat` all compute their picture from the value.
- **`frame-myth-fact`** is a question-heading in video form: the belief, then the correction.

## 5. What NOT to do

- **Do not stuff a FAQ block at the bottom of everything.** An FAQ whose questions nobody
  asked is a list of headings with no traffic behind them. Write the questions you were
  actually asked — support tickets, comments, search console.
- **Do not write for the machine at the human's expense.** Engines quote passages humans
  found useful; the ranking signal underneath has not disappeared.
- **Do not claim a citation you cannot see.** Whether an engine cited you is not observable
  from your own logs in any reliable way. Report what you changed, not what you assume it won.
- **Do not add schema markup and call it done.** Structured data helps a crawler parse; it
  does not make a badly shaped paragraph quotable.

## 6. The other GEO — geography

When the user means *place*, the work is different and the kit has the parts:

```bash
node scripts/geo-audit.mjs --in post.md --place "Đà Nẵng"
```

That turns on one extra **must**: the locality appears in the title or the first paragraph. A
place named for the first time in paragraph nine is not what the piece is about, and both a
local search engine and an answer engine read the opening to decide what it is about.

For video, the genre is **`local`** in `templates/VIDEO_GENRES.template.json`, built on the
suite of geographic frames:

- **`frame-geo-markers`** — where you are, or where your customers are. Auto-fits the map to
  the points you give it.
- **`frame-geo-local-card`** — venue, restaurant, cafe, or business review card with verified rating,
  address, and highlight tags.
- **`frame-geo-region-stat`** — multi-region market breakdown and comparison (e.g. Miền Bắc vs Miền Nam).
- **`frame-geo-route`** — one place to another: expansion, delivery, a journey.

Both draw from `video-templates/world-path.json`, which is committed — **no map tiles are
fetched, so no attribution or API key is involved.** See `CATALOG.md` for the projection and
the auto-fit trap that produced a map of Indonesia from three Vietnamese cities.

## 7. Done means

- `geo-audit.mjs` exits 0 on the draft
- Every heading you added is a question somebody actually asks
- You can point at each number's source without scrolling
- You did not invent a metric for whether an engine cited you

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in content-marketing →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.