← Week 1 / ✦ Day 6: app-ads.txt
Week 1 · Day 6 of 35
Fraud Shield

Anti-Spoofing & Authorized Digital Sellers

app-ads.txt Setup & Crawler Verification
ใบรับรองเจ้าของแอป: ป้องกันรายได้รั่วไหล & ดัน Fill Rate ให้เต็ม 100%

หนึ่งในการเตือนสีแดงยอดฮิตบนหน้าแดชบอร์ด Google AdMob คือ "To prevent significant impact to your revenue, download and set up app-ads.txt" หากปล่อยทิ้งไว้ ผู้ลงโฆษณา (Advertisers) จะถือว่าแอปของคุณอาจเป็นของปลอมที่ถูกแอบอ้าง (Ad Spoofing) และจะระงับการยิงโฆษณาราคาแพงเข้าเกมทันที

🎯 เป้าหมาย: สร้างไฟล์ app-ads.txt และทำให้ AdMob Bot สแกนเจอสถานะสีเขียว
💰 ผลกระทบ: ฟื้นฟูรายได้โฆษณา ป้องกัน Brand Safety Blacklist
🌐 วิธีการ: โฮสต์ไฟล์บน Root Domain ฟรีผ่าน GitHub Pages

The Mechanics of Ad Fraud

1. ทำไมไม่มี app-ads.txt รายได้ถึงหายไปเฉยๆ?

☠️

ปัญหา Ad Spoofing & Domain Fraud

ในอดีต มิจฉาชีพจะสร้างแอปพลิเคชันเถื่อนหรือใช้โปรแกรมบอทจำลองคำขอโฆษณา โดยแอบอ้างว่าโฆษณานั้นมาจากเกมชื่อดังของคุณ แบรนด์ใหญ่ที่จ่ายค่าโฆษณาตัวละ $30 eCPM จึงเสียเงินฟรีให้กับมิจฉาชีพ แทนที่จะส่งเงินเข้ากระเป๋าคุณ

ผลลัพธ์: IAB Tech Lab จึงออกข้อกำหนดมาตรฐาน app-ads.txt โดยแบรนด์ระดับพรีเมียม (เช่น Coca-Cola, Nike, Apple) จะตั้งค่าใน DSP ว่า "ไม่ซื้อโฆษณาจากแอปที่ไม่มี app-ads.txt เด็ดขาด"
🛡️

ห่วงโซ่การยืนยันสิทธิ์ (Verification Chain)

มาตรฐานนี้ทำให้ระบบตรวจสอบย้อนกลับได้อย่างชัดเจน 100% ว่าใครคือผู้รับเงินที่แท้จริง:

1. ผู้เล่นเปิดเกมบน Play Store / App Store
2. Ad Server อ่าน Developer Website URL ในหน้ารายละเอียดเกม
3. บอทวิ่งไปเช็คที่: website.com/app-ads.txt
4. พบรหัส Publisher ID ตรงกัน → อนุมัติให้ยิงโฆษณาราคาสูง!

IAB Standard Format

2. ไวยากรณ์และโครงสร้างเนื้อหาในไฟล์ app-ads.txt

ไฟล์ app-ads.txt คือไฟล์ Plain Text (.txt ธรรมดา ห้ามเป็น Word หรือ RTF) แต่ละบรรทัดจะแบ่งออกเป็น 4 ฟิลด์ คั่นด้วยเครื่องหมายจุลภาค (,):

// โครงสร้างหลัก: <Domain ของ Ad Network>, <Publisher ID>, <Relationship Type>, <Certification Authority ID>
// 1. บรรทัดของ Google AdMob (บังคับใส่ทุกคน)
google.com, pub-XXXXXXXXXXXXXXXX, DIRECT, f08c47fec0942fa0
// 2. บรรทัดของ AppLovin MAX (ถ้าใช้เป็นตัวกลาง Mediation)
applovin.com, XXXXXXXXXXXXXXXX, DIRECT
// 3. บรรทัดของ Unity Ads (LevelPlay Partner)
unityads.com, XXXXXXX, DIRECT
• Field 1 (Domain): โดเมนของ Ad Network ที่ได้รับอนุญาต (เช่น google.com)
• Field 2 (Publisher ID): รหัสบัญชีผู้ขายของคุณ (เช่น pub-1234567890123456) ห้ามพิมพ์ตกเด็ดขาด
• Field 3 (Relationship): DIRECT (คุณควบคุมบัญชีนี้เองโดยตรง) หรือ RESELLER (ผ่านตัวแทนจำหน่าย)
• Field 4 (Certification ID): รหัสระบุตัวตนสากลของ IAB (ของ Google คือ f08c47fec0942fa0 เสมอ)
💡
เทคนิคลัด: คุณไม่ต้องนั่งพิมพ์เองทีละบรรทัด! ให้เข้าไปที่ AdMob Dashboard → เมนู Apps → app-ads.txt จากนั้นกดปุ่ม "How to set up app-ads.txt" ระบบจะมีปุ่มให้กด Copy โค้ดทั้งหมดที่พร้อมใช้งานทันที

Zero-Cost Infrastructure

3. วิธีโฮสต์ไฟล์ฟรี 100% ด้วย GitHub Pages (ไม่มีค่าโดเมน)

หากคุณยังไม่มีเว็บไซต์สตูดิโอส่วนตัว คุณสามารถใช้ GitHub Pages เป็นโฮสติ้งฟรีที่มีความเสถียรสูงและรองรับมาตรฐานของ Google และ Apple ได้อย่างสมบูรณ์แบบ ทำตาม 5 ขั้นตอนด้านล่างนี้:

1

สร้าง Repository ใหม่บน GitHub

สมัครบัญชีที่ github.com กดสร้าง Repository ใหม่ โดยตั้งชื่อแบบพิเศษตามรูปแบบ:
username.github.io (แทนที่ username ด้วยชื่อบัญชี GitHub ของคุณ) และตั้งสถานะเป็น Public

2

สร้างไฟล์ app-ads.txt บน Root Directory

กดปุ่ม Add file → Create new file ตั้งชื่อไฟล์ตรงช่อง Name ว่า:
app-ads.txt จากนั้นวางโค้ด AdMob / Mediation ที่คัดลอกมาลงในช่องเนื้อหา แล้วกด Commit Changes

3

เพิ่มไฟล์ index.html สำหรับหน้า Landing Page

สโตร์บางแห่งและ Crawler ของ AdMob จะตรวจเช็คว่า Root URL เปิดได้หรือไม่ ให้สร้างไฟล์ index.html ไว้ที่หน้าแรกด้วย โดยใส่ข้อความแนะนำเกมสั้นๆ หรือใส่เนื้อหา Privacy Policy ควบคู่กันไป

4

เปิดใช้งาน GitHub Pages

เข้าไปที่แท็บ Settings → Pages ในหัวข้อ Build and deployment เลือก Source เป็น Deploy from a branch และเลือก Branch เป็น main (root) จากนั้นกด Save รอระบบบิลด์ประมาณ 1–2 นาที

5

ทดสอบเปิดผ่านเว็บเบราว์เซอร์จริง

ลองพิมพ์ URL บนเบราว์เซอร์:
https://username.github.io/app-ads.txt
หากหน้าเว็บแสดงข้อความโค้ดชัดเจน ไม่มี Error 404 แสดงว่าพร้อมนำไปใช้งานทันที!

Connecting the Dots

4. วิธีผูก Developer Website ใน Google Play & App Store

AdMob Bot ไม่ได้ค้นหาไฟล์โดยตรงจากชื่อเกม แต่จะเข้าไปอ่านจากช่อง Developer Website (เว็บไซต์ผู้พัฒนา) ใน Store Listing ดังนั้นคุณต้องนำ URL เว็บไซต์หลักไปกรอกในสโตร์ทั้งสองแห่ง:

🤖

Google Play Console

  • เข้าสู่คอนโซลเกมของคุณ → เมนู Grow → Store presence → Store settings
  • เลื่อนลงมาที่หัวข้อ Store listing contact details
  • ในช่อง Website ให้กรอก Root Domain ของคุณ เช่น:
    https://username.github.io
  • ⚠️ ห้ามใส่ /app-ads.txt ต่อท้ายในช่องนี้เด็ดขาด ให้ใส่เฉพาะโดเมนหลักเท่านั้น
  • กดปุ่ม Save ที่มุมล่างขวา
🍏

Apple App Store Connect

  • เข้าสู่ App Store Connect → เมนู Apps → เลือกเกมของคุณ
  • ในแถบด้านข้าง เลือกเวอร์ชันเกมปัจจุบัน (เช่น 1.0 Prepare for Submission)
  • เลื่อนไปที่ส่วน General App Information
  • ในช่อง Marketing URL (URL สำหรับการตลาด) หรือ Support URL ให้กรอก Root Website URL เดียวกัน
  • เมื่ออัปเดตเวอร์ชันและผ่านการตรวจ AdMob Bot จะเริ่มวิ่งเข้ามาตรวจสอบทันที

Diagnostics & Status

5. การตรวจสอบสถานะ Crawler และการแก้ปัญหาที่พบบ่อย

สถานะใน AdMob ความหมาย แนวทางแก้ไข
Authorized (สีเขียว) ระบบตรวจพบบัญชีและสิทธิ์ถูกต้อง 100% สมบูรณ์แบบ ไม่ต้องดำเนินการใดๆ เพิ่มเติม
Not Found (สีเหลือง) บอทเข้าไปที่ URL แล้วแต่หาไฟล์ไม่พบ (404) เช็คตัวสะกดชื่อไฟล์ ต้องเป็นพิมพ์เล็กทั้งหมด app-ads.txt ห้ามมีตัวพิมพ์ใหญ่
Unauthorized (สีแดง) พบบัญชี แต่ Publisher ID ไม่ตรงกับในแอป ตรวจเช็ครหัส pub-XXXXXXXXXX ให้ตรงกับ AdMob Account ID ปัจจุบัน
⚠️ 3 ข้อผิดพลาดยอดนิยมที่ทำให้ AdMob Crawler หาไฟล์ไม่เจอ:

1. Subdomain Trap: วางไฟล์ไว้ใน Sub-path ลึกเกินไป เช่น site.com/games/mygame/app-ads.txt (ผิด! บอทจะตรวจเฉพาะที่ Root Domain เท่านั้น คือ site.com/app-ads.txt)

2. Time Lag (ระยะเวลาบอททำงาน): หลังจากผูก URL ใน Store แล้ว AdMob Crawler จะใช้เวลาประมาณ 24 ถึง 72 ชั่วโมง ในการสแกนรอบถัดไป หากสถานะยังไม่เปลี่ยนทันที อย่าเพิ่งตกใจ

3. Redirect Error: เว็บไซต์มีการ Redirect วนซ้ำ หรือติดระบบ Firewall สกัดบอทของ Google ไว้ ให้ทดสอบเปิดไฟล์ผ่าน Incognito Mode ในเบราว์เซอร์ว่าเปิดได้ตรงๆ หรือไม่

Deliverables of Day 6

Checklist สิ่งที่ต้องลงมือทำวันนี้

Progress
0 / 6