suggest-negativesHướng dẫn đọc output của lệnh npm run ads -- suggest-negatives và quyết định approve/reject từng candidate.
Negative keyword = từ khóa cấm. Khi user search query chứa negative keyword thì Google KHÔNG hiển thị ad của mình — bất kể positive keyword có match hay không.
Ví dụ: campaign có positive keyword kiss tour. Nếu không có negative, search "koncerty kiss" (fan Ba Lan của band KISS) cũng trigger ad. Click về → 0% khả năng book tour → đốt tiền.
Add koncerty làm negative → từ đó Google không serve ad cho bất kỳ search nào chứa "koncerty". Tiết kiệm budget.
Positive keyword dùng match type BROAD và PHRASE rất "rộng" — Google match cả variations, misspellings, synonyms, và đôi khi sai intent. Negative keyword là cách subtract cái không muốn ra khỏi cái rộng đó.
File .suggestions/YYYY-MM-DD-negatives.md có 3 phần:
Mỗi ad group là 1 section. Cùng 1 search term nếu xuất hiện ở 2 ad group khác nhau → list 2 lần (ở 2 section khác nhau), vì negative keyword được thêm vào ở level ad group hoặc campaign.
Lấy ví dụ trên, giải thích từng field:
| Field | Giá trị | Ý nghĩa |
|---|---|---|
[ ] | empty checkbox | Chưa approve. Bạn sửa thành [x] để approve. |
| Search term | koncerty kiss | User thực sự gõ gì lên Google |
| Cost | 263,119 VND | Budget đã chi cho click của search term này trong period |
| Clicks | 2 | Số người click ad sau khi search |
| Impressions | 2 | Số lần ad hiển thị (với search này) |
| CTR | 100.00% | Click-through rate = clicks / impressions × 100. 100% = mọi người thấy ad đều click |
| triggered by | kiss tour | Positive keyword nào làm Google match search term này |
| [PHRASE] | match type | Match type của positive keyword → giải thích tại sao lại match. PHRASE nghĩa là query chứa cụm "kiss tour" (không cần exact) |
| suggested match | EXACT | Gợi ý match type khi add negative. EXACT an toàn nhất (chỉ block đúng chuỗi này) |
Cost cao + clicks ít = CPC cao. Ví dụ koncerty kiss chỉ 2 clicks mà 263k VND = 131k/click. Cao bất thường, có thể do positive keyword EXACT "kiss tour" có bid cao.
Với mỗi candidate, hỏi 3 câu theo thứ tự:
KissTour bán tour xe máy Saigon/Da Nang, airport fast track, food tour. Nếu search term rõ ràng tìm thứ KHÁC:
Ví dụ: best beaches in vietnam — user muốn đi biển, không phải tour HCM. Dù triggered qua broad match, conversion = 0 là đúng. Approve.
KissTour có nhiều cách viết: kiss tour, kisstour, kiss tours, kiss tour vietnam, kiss tour ho chi minh, kiss tour saigon... Nếu candidate là variation:
Ví dụ: kiss tour fast track — user đang tìm dịch vụ Airport Fast Track của KissTour. 0 conv trong period này không có nghĩa keyword xấu — có thể book qua kênh khác (chat, WhatsApp) không track được. Bỏ tick [ ] khỏi file, thay vì add negative thì add làm exact positive keyword trong Brand campaign.
Ví dụ: xo tours, vespa adventures, back of the bike. KissTour đã chủ động bid vào competitor trademark qua campaign "Competitors-*" nên KHÔNG negative.
Nhưng nếu competitor name xuất hiện trong Brand campaign → có thể nên negative ở Brand để tránh Brand budget bị pull vào Competitor intent. Tuỳ strategy.
Khi approve 1 candidate, chọn match type đúng ảnh hưởng lớn đến phạm vi block:
| Match type | Block gì | Rủi ro | Khi nào dùng |
|---|---|---|---|
Negative EXACT[koncerty kiss] |
Chỉ search đúng chuỗi này (hoặc close variation như số ít/nhiều, typo) | Thấp — block hẹp, an toàn | Default an toàn cho mọi candidate. Công cụ suggest match này. |
Negative PHRASE"koncerty" |
Mọi search chứa cụm từ này (đúng thứ tự) | Trung bình — có thể vô tình block phrase tương tự | Khi nhiều variation đều chứa 1 chữ vô nghĩa (vd Ba Lan koncerty xuất hiện trong koncerty kiss, koncerty rock, koncerty warsaw...). Block cả cụm tiết kiệm effort. |
Negative BROADkoncerty |
Mọi search chứa TẤT CẢ các từ này (bất kỳ thứ tự) | Cao — dễ over-block | Hiếm dùng. Chỉ dùng với từ cực rõ ràng irrelevant (vd job, free, download). |
Default EXACT. Chỉ nâng lên PHRASE/BROAD khi thấy rõ pattern lặp (vd 5+ search terms khác nhau cùng chứa 1 từ vô nghĩa, thì add PHRASE 1 từ đó thay vì add EXACT 5 lần).
Nếu search-terms report cho thấy:
koncerty kiss
koncerty rock warsaw
koncerty polska
kiss koncerty
Thay vì add 4 negative EXACT → add 1 negative PHRASE "koncerty" — block toàn bộ.
Vì sao: User tìm biển, không phải tour HCM. 189 clicks × 0 conv × 847k VND = waste rõ ràng. Broad match đã lạc intent.
Action: Tick [x], add negative EXACT best beaches in vietnam. Hoặc mạnh hơn: negative PHRASE "beaches" hoặc "beach" vì Nonbrand HCM không bán tour biển.
Vì sao: "Koncerty" tiếng Ba Lan = "concerts". User fan của band KISS tìm lịch diễn. Không liên quan tour Việt Nam.
Action: Tick [x]. Match type nên PHRASE "koncerty" để block mọi variation tương lai.
Vì sao: Đây là brand search cho dịch vụ Airport Fast Track. CTR 72% = user rõ ràng muốn KissTour. 0 conv có thể do: (a) user book qua kênh khác không track, (b) landing page chưa tối ưu cho fast track. Block là mất opportunity.
Action: Bỏ qua candidate này trong file negatives. Thay vào đó: vào Google Ads UI, add kiss tour fast track làm EXACT positive trong Brand campaign (hoặc tạo ad group mới "Airport Fast Track" trong Brand).
Vì sao: Brand variation. User tìm KissTour cho HCM — đúng target. Đã có Brand-HCMC campaign → add làm positive ở đó.
Action: Skip trong file. Add kiss tour ho chi minh EXACT positive vào Brand-HCMC (id 23782413982).
Vì sao: User tìm dịch vụ thuê xe riêng (taxi/transfer) — KissTour không bán. 27 clicks × 0 conv.
Action: Tick [x]. EXACT saigon private car hoặc PHRASE "private car" (nếu muốn block rộng).
Vì sao: Query informational (research) — user đang tìm hiểu chứ chưa muốn book. Nhưng cũng có thể là travel agent tìm partner.
Action: Approve nếu muốn cut research traffic. Hoặc skip nếu nghĩ cơ hội educate → conv sau đó. Thường approve.
Hiện tại (Phase 2): Tick [x] trong file .md = chỉ là annotation. Không có gì đẩy lên Google Ads. File là work in progress.
Phase 3 (chưa build): Sẽ có command apply-negatives <file.md>:
- [x]AdGroupCriterionService.Mutate để add negative keyword--apply flag mới thực sự call APIĐến lúc đó, workflow đầy đủ:
# Weekly workflow
npm run ads -- suggest-negatives --days 7
# → .suggestions/2026-05-01-negatives.md
# Human review trong editor, tick [x] trên items approved
# Dry-run preview
npm run ads -- apply-negatives .suggestions/2026-05-01-negatives.md
# Apply thật
npm run ads -- apply-negatives .suggestions/2026-05-01-negatives.md --apply
Trong lúc chờ Phase 3: Add negatives thủ công qua Google Ads UI (Tools & Settings → Shared Library → Negative keyword lists, hoặc ở cấp campaign/ad group).
Search term vừa là positive (ADDED) vừa là negative (EXCLUDED). Thường do setup lộn xộn — 1 ad group có kiss tour làm positive, 1 ad group khác có kiss tour làm negative. → Skip, chỉnh lại ad group setup thay vì add thêm negative.
Ví dụ kiss tour ho chi minh có thể xuất hiện 3 lần trong file (3 ad group khác nhau đều trigger). Quyết định từng cái theo context ad group đó:
7 ngày data đôi khi quá ít để kết luận. Nếu search term chỉ 5 clicks trong 7 ngày và không conv → có thể chỉ là sample nhỏ. Dùng period 30 ngày để kết luận vững hơn.
CTR cao (>30%) + conv=0 = user bị thu hút ad (headline tốt) nhưng landing page không deliver. Hoặc intent mismatch: headline promise X, user tìm Y, click vì headline hấp dẫn nhưng bounce ngay. → Vẫn là waste, approve negative.
CTR thấp (<5%) + conv=0 = ad copy không match ý user. Có thể fix bằng viết lại ad chứ không phải negative. Cân nhắc trước khi block.
Tạo bởi kisstour-ads · Cập nhật 2026-04-24 · Chi tiết commands xem README