CCR · Frontend User · Presentation

Google Analytics 4 + SEO · เว็บเช่ารถ CCR

2 งานในรอบนี้: (1) ติด "เซ็นเซอร์" GA4 ทุกจุดสำคัญ เพื่อรู้ว่าลูกค้าเดินทางจาก ค้นหา → จอง → จ่ายเงิน อย่างไร · (2) ทำ SEO ให้ Google เก็บหน้าเว็บได้ถูกต้องและแสดงผลค้นหาได้ดีขึ้น

Measurement ID  G-HMSKD5QQ38

01 เส้นทางลูกค้า + แท็กที่ติดแต่ละจุด

แต่ละขั้นที่ลูกค้าเดินผ่าน เรายิง event ไปบอก GA ว่า "เกิดอะไรขึ้น" — นี่คือภาพรวมทั้งหมดในที่เดียว

🔍
ค้นหารถ
search
📋
ดูรายการ
view_item_list
🚗
ดูรถคันเดียว
view_item
🛒
เลือกรถ
select_itembegin_checkout
📝
กรอกข้อมูล
checkout_progress
💳
จ่ายเงิน
add_payment_infopayment_failed
สำเร็จ
purchase

← เลื่อนแนวนอนเพื่อดูทุกขั้น

02 ดูว่าแต่ละขั้นเหลือลูกค้าเท่าไร

ลูกค้าจะค่อย ๆ ลดลงทุกขั้นเป็นเรื่องปกติ (ไม่ใช่ทุกคนที่ค้นหาแล้วจะจอง) — สิ่งที่เราดูคือ ขั้นไหนลดมากผิดปกติ นั่นคือจุดที่มีปัญหาและควรปรับปรุงก่อน

ค้นหาsearch
1,000
ดูรถview_item
620
−38%
เลือกbegin_checkout
400
−35%
ถึงหน้าจ่ายadd_payment_info
240
−40%
จ่ายสำเร็จpurchase
150
−38%

* ตัวเลขเป็นตัวอย่างเพื่อให้เห็นภาพ — ของจริงจะดึงจาก GA4 หลังเก็บข้อมูล

03 รู้ลึกถึง "ทำไมถึงไม่จ่าย"

คนที่ถึงหน้าจ่ายแล้วไม่จบการจอง มี 2 สาเหตุที่ต้องแก้คนละทาง — แท็ก payment_failed แยกให้เราเห็น

💳 ถึงหน้าจ่าย add_payment_info

ไม่เกิด purchase — แต่เพราะอะไร?

🔀 payment_failed แยกได้

มี payment_failed → จ่ายไม่ผ่าน (บัตรเด้ง / QR หมดเวลา) → แก้ที่ระบบจ่าย
ไม่มี event → เปลี่ยนใจ / ราคาแพง → แก้ที่ราคา/UX

04 "ติดแท็ก" คืออะไร

🏷️

Event = การกระทำ

1 แท็ก = 1 พฤติกรรม เช่น ค้นหา, เลือกรถ, กดจ่ายเงิน

📦

Parameter = บริบท

แนบข้อมูล เช่น ราคา, ประเภทรถ, สาขา เพื่อแยกวิเคราะห์

🔄

Funnel = ลำดับขั้น

ร้อย event เป็นเส้นทาง เพื่อดูว่าคนหลุดตรงไหน

🎯

Conversion = เป้าหมาย

กำหนด event สำคัญ (purchase) เป็นเป้าวัดผล

05 หลักการที่ใช้ติด

1

Consent-gatedโหลด GA เฉพาะเมื่อผู้ใช้ยอมรับ cookie (เคารพ PDPA) ไม่ยอมรับ = ไม่มี request เลย

2

ไม่ hardcodeID อ่านจาก env สลับ dev/prod ได้โดยไม่แก้โค้ด

3

ยิง page_view เองเพราะเว็บเป็น SPA (Next.js) auto-pageview จะนับแค่ครั้งแรก

4

helper กลางตัวเดียวทุก event ยิงผ่าน trackAnalyticsEvent() มี guard กันยิงตอน gtag ยังไม่พร้อม + กันยิงซ้ำ

06 Event ทั้งหมด

StageEventเก็บอะไร / ที่ไหน
Viewpage_viewทุกการเปลี่ยนหน้า (รองรับ UTM)
Searchsearch · search_submitคำค้น, วันรับ-คืน, สาขา
Searchview_item_listรายการรถที่แสดง
Checkoutview_itemดูรถคันเดียว (step-1) · items[] ครบ
Checkoutselect_item · begin_checkoutรถที่เลือก, เริ่ม checkout
Checkoutcheckout_progressสเต็ป 1-5 · แยก new / edit
Checkoutadd_payment_infoยอดเงิน, วิธีจ่าย, member/guest
Convertpayment_failedจ่ายไม่ผ่าน + reason (callback / redirect)
Convertpurchaseมูลค่า, รถ, สาขา, จำนวนวัน (เป้าหลัก)
Convertbooking_edit_completedแก้ไขสำเร็จ + flag คืนเงิน
Convertbooking_cancelled · generate_leadยกเลิกการจอง, ติดต่อ/ขอรถ
Viewselect_contentกดเมนู, ดูการจอง, Fleet Guide, แผนที่สาขา (แยกด้วย content_type)
Accountlogin · manage_booking_start · booking_manage_searchเข้าสู่ระบบ, ค้นหา/จัดการการจอง
Accountprofile_updated · add/remove_payment_method · account_linked · terms_acceptedโปรไฟล์: แก้ข้อมูล, จัดการบัตร, ผูกบัญชี, ยอมรับเงื่อนไข
Viewview_promotion · select_promotionหน้าโปรโมชัน

รายการเต็มพร้อม วิธีทดสอบทีละแท็ก สำหรับ BA / QA อยู่ที่ ข้อ 11 ด้านล่าง

07 ติดแล้วได้ประโยชน์อะไร

🔍

เห็นจุดที่คนหลุด

รู้ว่าคนหายไปตรงไหนของ funnel → โฟกัสแก้ถูกจุด

📣

วัดผลโฆษณาได้จริง

ส่ง purchase กลับ Google Ads / Meta รู้ว่าแคมเปญไหนสร้างยอดจองจริง

🚗

รู้รถ/สาขาขายดี

วิเคราะห์ดีมานด์จาก car_group + สาขา เพื่อจัดสต็อก/ตั้งราคา

⚖️

ถูกกฎ + เชื่อถือได้

เก็บเฉพาะคนยินยอม + ปกปิด IP สอดคล้อง PDPA

08 ใช้ทำอะไรต่อได้

09 ทดสอบจริงแล้ว ✓

รัน dev จริง + เปิดเบราว์เซอร์ ยอมรับ consent แล้วจับ request ที่ส่งเข้า GA — ทุก event ตอบ 204 (สำเร็จ)

Eventพารามิเตอร์ที่ส่งเข้า GA จริงผล
page_viewdp, ep.anonymize_ip=true204 ✓
view_itempr1=idECONOMY~nmToyota Yaris~pr2400~qt1, epn.value=2400204 ✓
payment_failedep.reason=payment_callback, ep.flow=new204 ✓
items[] แปลงเป็น product param ถูกต้อง — GA แปลง items เป็น pr1=... ตาม GA4 ecommerce schema เป๊ะ พร้อมขึ้นรายงาน ecommerce ได้ทันที · ยืนยันด้วย tsc ผ่าน 0 error

10 วิธีทดสอบ (สำหรับ QA)

เปิด GA4 DebugView แล้วทำตาม 4 ขั้น ก็จะเห็น event วิ่งสด ๆ พร้อมพารามิเตอร์ ตรวจเทียบกับตารางข้อ 11 ได้เลย

1

เปิด Debug

ติดตั้ง Chrome extension GA Debugger แล้วเปิด หรือใช้ Tag Assistant — เพื่อให้ event เข้า DebugView

2

ยอมรับ Cookie

เข้าเว็บแล้วกด ยอมรับ cookie analytics ก่อน — ถ้าไม่ยอมรับ GA จะไม่ทำงาน (ตามดีไซน์)

3

เปิด DebugView

GA4 → Admin → DebugView จะเห็นอุปกรณ์ที่กำลัง debug อยู่

4

ทำตาม "วิธีทดสอบ"

กดทำ action ตามคอลัมน์ขวาของตาราง → event ต้องโผล่ใน DebugView พร้อม parameter ที่ระบุ

💡
ทางลัดดูเร็ว ๆ โดยไม่ต้องเข้า GA4: เปิด DevTools → Network กรองคำว่า collect — แต่ละครั้งที่ทำ action ต้องเห็น request ใหม่ที่มี en=ชื่อ event และตอบกลับ 204

11 รายการ Tag List ทั้งหมด

ครบทุกแท็กในเว็บ แยกตามหมวด — Event (ชื่อใน GA4) · จุดที่ติด (ไฟล์) · วิธีทดสอบ (ทำอะไรให้ยิง) · พารามิเตอร์ ที่ต้องเห็น

Eventจุดที่ติด (ไฟล์)วิธีทดสอบ — ทำให้ยิงยังไงพารามิเตอร์ที่ต้องเห็น
🧭 หน้า & เมนู (Navigation)
page_viewanalytics-page-view.tsx (ทุกหน้า)เปิด/เปลี่ยนหน้าใด ๆ ในเว็บpage_path, page_location, page_title
select_contentheader.tsx · header/mobile-menu.tsxกดเมนูบนแถบหัว / เมนูมือถือ (เมนูหลัก, โซเชียล, ภาษา, Manage Booking, Login)content_type=ชนิดเมนู, item_id=ชื่อปุ่ม
🔍 ค้นหา (Search)
search_submithero-search.tsx · sticky-search-bar.tsxกดปุ่ม "ค้นหา" จากหน้าแรก หรือแถบค้นหาลอยด้านบนสาขารับ-คืน, วันรับ-คืน, rental_days
searchsearch-result/page.tsxหน้าผลลัพธ์โหลดเสร็จ (ทั้งกรณีเจอและไม่เจอรถ)search_term, result_count
view_item_listsearch-result/page.tsxหน้าผลลัพธ์มีรายการรถแสดงitem_list_name, result_count
🚗 ดู & เลือกรถ (Browse)
view_itembooking/step-1-car-info.tsxเข้า Step 1 หลังเลือกรถจากผลค้นหา (ไม่ยิงตอน resume การจองค้าง)items[], value, rental_days
select_itemsearch-result/car-card.tsxกดปุ่ม เลือก/จอง ที่การ์ดรถitems[], item_list_name
begin_checkoutsearch-result/car-card.tsxกดปุ่มเลือก/จองที่การ์ดรถ (ยิงคู่กับ select_item)items[], value, currency
select_contentservices/fleet-guide/page.tsxหน้า Fleet Guide กดเลือกกลุ่มรถcontent_type=fleet_guide_group, item_id=กลุ่มรถ
select_contentbranches/branch-accordion-item.tsxหน้า Branches กดเปิดแผนที่สาขาcontent_type=branch_map, item_id=ชื่อสาขา
💳 Checkout & จ่ายเงิน (Payment)
checkout_progressshared/Stepper.tsx (ทั้ง new + edit)เลื่อนสเต็ป 1→5 ระหว่างจอง (และตอนแก้ไขจอง)checkout_step, step_name, booking_flow
add_payment_infobooking/step-5-payment.tsxกดปุ่ม จ่ายเงิน ที่ Step 5 (จองใหม่)value, payment_type, customer_type
add_payment_infoedit/edit-step-5-payment.tsxกดจ่าย ส่วนต่าง ตอนแก้ไขการจองvalue=ส่วนต่าง, flow=edit
payment_failedbooking/step-5-payment.tsxจ่ายไม่ผ่าน — บัตรเด้ง/ยกเลิก หรือกลับจากหน้าธนาคารแบบไม่สำเร็จreason, value, payment_type, flow=new
payment_failededit/edit-step-5-payment.tsxจ่ายส่วนต่าง (ตอนแก้ไข) ไม่ผ่านreason, value=ส่วนต่าง, flow=edit
✅ ผลลัพธ์การจอง (Conversion)
purchasepayment-success/page.tsxจองสำเร็จ เข้าหน้า payment-success (ยิงครั้งเดียวต่อ 1 booking)transaction_id, value, items[], สาขา, rental_days
booking_edit_completedpayment-success/page.tsxแก้ไขการจองสำเร็จ (URL มี edit=true)value, refund_required
booking_cancelledcancel-booking-modal.tsx · mobile-cancel-booking-modal.tsxกดยกเลิกการจองสำเร็จ (ทั้งจอ desktop และ mobile)booking id
generate_leadcontact-form.tsx · request-car-modal.tsxส่งฟอร์ม "ติดต่อเรา" หรือ "ขอรถที่ไม่มีในระบบ" สำเร็จlead_type (contact / car_request)
👤 บัญชี & การจัดการ (Account)
loginlogin/verify-otp-modal.tsxยืนยัน OTP เข้าสู่ระบบสำเร็จmethod
manage_booking_startbooking/manage/page.tsxหน้า Manage Booking กดส่ง OTP เพื่อค้นหาการจองmethod=email_otp
booking_manage_searchlogin/verify-otp-modal.tsxค้นหาการจอง (ผ่าน OTP) แล้วเจอสำเร็จbooking id
select_contentmy-bookings/booking-card.tsxหน้า My Bookings กด "Details" ดูการจองของตัวเองcontent_type=my_booking, item_id, booking_status
select_contentbooking/[id]/booking-detail-header.tsxหน้ารายละเอียดการจอง กด "แก้ไขการจอง"content_type=booking_action, item_id=edit_booking
⚙️ โปรไฟล์ & เงื่อนไข (Profile)
profile_updatedprofile/personal-info-update-modal.tsx · profile-login-update-modal.tsxบันทึกการแก้ข้อมูลส่วนตัว / อีเมล / เบอร์โทรfield (personal_info / email / phone)
add_payment_methodprofile/payment-section.tsxเพิ่มบัตรในโปรไฟล์สำเร็จ
remove_payment_methodprofile/remove-card-dialog.tsxลบบัตรในโปรไฟล์
account_linkedprofile/available-channels-section.tsxผูกบัญชีโซเชียลสำเร็จmethod (ช่องที่ผูก)
terms_acceptedterm-condition/termcondition-acceptterm.tsxกดยอมรับข้อตกลง / เงื่อนไขis_new_user (true/false)
🎁 โปรโมชัน (Promotion)
view_promotionpromotions/promotions-page-client.tsxหน้าโปรโมชัน กดเปิดดูรายละเอียดโปรpromotion_name, promotion_code
select_promotionpromotions/promotion-card.tsxกดเลือก/ใช้โปรที่การ์ดpromotion_name, promotion_code
📌
หมายเหตุ — select_content ใช้ชื่อ event เดียวแต่แยกบริบทด้วย content_type (menu / fleet_guide_group / branch_map / my_booking / booking_action) เป็นแนวทางมาตรฐานของ GA4 · พารามิเตอร์ที่ขึ้นต้นว่า "—" คือไม่มี param เพิ่ม

12 งาน SEO ที่ทำเข้าไป

นอกจาก GA4 รอบนี้ยังทำ SEO ให้ Google เข้าใจเว็บได้ถูกต้อง — เก็บเฉพาะหน้าที่ควรเก็บ และแสดงผลค้นหาสวยขึ้น

🏷️

Metadata ทุกหน้า

title แบบ %s | Chic Car Rent + description ครบ 15 หน้า ทำให้ชื่อ/คำอธิบายใน Google ตรงและน่าคลิก

🗺️

Sitemap.xml

บอก Google 8 หน้า public ที่ควร index พร้อมความถี่อัปเดต + ลำดับความสำคัญ (หน้าแรกสูงสุด)

🤖

Robots.txt

เปิดให้เก็บหน้า public, บล็อกหน้าส่วนตัว/ธุรกรรม (booking, login, profile, my-bookings, search-result)

📐

Structured Data

JSON-LD 3 แบบ: Organization (ข้อมูลแบรนด์), Breadcrumb (8 หน้า), AutoRental (ข้อมูลสาขา) → มีโอกาสได้ rich result

🔗

Open Graph

เวลาแชร์ลิงก์ใน LINE / Facebook / X จะขึ้น preview รูป + ชื่อ + คำอธิบายอัตโนมัติ

🛡️

กันหน้าธุรกรรมหลุด

หน้า booking/profile/search ตั้ง robots: index:false ไม่ให้โผล่ในผลค้นหา (กันข้อมูลรั่ว + SEO สะอาด)

13 SEO — รายการ + วิธีทดสอบ

สำหรับ BA / QA ตรวจรับ — แต่ละรายการเช็กได้เองตามคอลัมน์ขวา

รายการ SEOติดที่ไฟล์ได้อะไรวิธีทดสอบ
Title + Descriptionapp/layout.tsx + 15 layoutsชื่อ/คำอธิบายใน Google SERPView Source ดู <title> และ <meta name="description">
Open Graphapp/layout.tsxpreview ตอนแชร์ลิงก์วางลิงก์ใน LINE/Facebook หรือเช็กที่ opengraph.xyz
robots.txtapp/robots.tsคุม bot ว่าเก็บหน้าไหนเปิด /robots.txt ตรง ๆ — ต้องเห็น allow/disallow + ลิงก์ sitemap
sitemap.xmlapp/sitemap.tsรายชื่อหน้าที่ Google ควร indexเปิด /sitemap.xml + submit ใน Search Console
Organization schemalib/structured-data.ts + layoutข้อมูลแบรนด์/ติดต่อใน GoogleGoogle Rich Results Test วาง URL หน้าแรก
Breadcrumb schemastructured-data.ts (8 หน้า)breadcrumb ใต้ลิงก์ใน SERPRich Results Test ดู BreadcrumbList ผ่าน
AutoRental schemabranches/page.tsxข้อมูลสาขา/ธุรกิจเช่ารถRich Results Test บนหน้า Branches
noindex หน้าส่วนตัวbooking/login/profile/... layoutsกันหน้าธุรกรรมโผล่ searchView Source หน้านั้น ต้องเห็น <meta name="robots" content="noindex">
🔎
เครื่องมือหลักที่ใช้ตรวจ SEO: Google Rich Results Test (structured data), Search Console (sitemap + index status), และ View Source / DevTools (meta tags) — ไม่ต้องรอ deploy ก็ทดสอบบน staging ได้