กรอบฟื้นฟูและป้องกันความเสียหายระดับองค์กรเมื่อ Re-platforming หรือ Redesign เว็บไซต์ ผสานหลักการวิเคราะห์เชิงลึก (Decision Logic) คู่กับเช็กลิสต์ปฏิบัติการ 24 จุด
จุดเสี่ยงสูงสุดที่ทำลายทราฟฟิกและรายได้องค์กร 50% - 80% ในชั่วข้ามคืน หากไม่มีการตรวจสอบก่อน-หลัง Launch
เมื่อย้าย CMS หรือปรับ URL Structure เก่าที่มี Backlink และประวัติอันดับมาหลายปีกลับหลุดเป็น 404 หรือทำ Redirect Loop ส่งผลให้คะแนนความน่าเชื่อถือที่สะสมมาทั้งหมดสูญสิ้นทันที
ทีม Dev ลืมปลดคำสั่ง noindex หรือลืมปลดบล็อกใน robots.txt เมื่อขึ้น Production ทำให้ Google ทยอยลบเว็บออกจากดัชนีทั้งโดเมน หรือปล่อยให้โดเมน Dev หลุดเข้า Index แย่งคะแนนเว็บจริง
X-Robots-Tag และ HTML Robots ทันทีในวินาทีแรกที่ย้าย DNS พร้อมใส่รหัสผ่านล็อก Staging ห้ามบอทเข้าเด็ดขาดการเปลี่ยนผ่านสู่ Headless CMS / Frontend สมัยใหม่ (Next.js, Nuxt, React) หากตั้งค่า SSR หรือ SSG ผิดพลาด บอทจะมองเห็นเฉพาะโครง HTML เปล่าที่ไม่มีเนื้อหา ไม่มีข้อความ และไม่มี Internal Links
โค้ด GTM, GA4 หรือ DataLayer หลุดหาย หรือปุ่มคอนเวอร์ชัน (CTA, Form, LINE, Phone) ผูก Event ผิดพลาด ทำให้ธุรกิจสูญเสียข้อมูลสำคัญในการประเมินประสิทธิภาพหลังขึ้นระบบใหม่
เมื่อเปิดใช้ 2 Page Builder คู่กันในเว็บเดียวกัน หน้าเว็บจะโหลดไฟล์ CSS/JS ของทั้งสองระบบพร้อมกัน ทำให้ Core Web Vitals (LCP, INP) ตกอย่างรุนแรง นอกจากนี้การแปลงหน้าอาจทำให้โครงสร้าง <h1>, <h2> หลุดหาย จนกระทบต่ออันดับบน Google
ตรวจสอบทั้งในระดับ HTML Document และ HTTP Response Header ว่าไม่มีคำสั่งห้ามบอทเข้าเก็บ
ระหว่างการพัฒนาบน Staging ทีม Dev มักตั้งค่า noindex, nofollow เพื่อป้องกัน Google เข้าเก็บข้อมูลก่อนเปิดตัว หากขั้นตอน Deploy ขึ้น Production ลืมปลดออก Googlebot จะเริ่มลบ URL ออกจาก Index ภายใน 24-72 ชั่วโมง และหากเป็น HTTP Header X-Robots-Tag จะมองไม่เห็นผ่าน View Source ปกติ
<meta name="robots" content="index, follow">
X-Robots-Tag: noindex แฝงมากับ Nginx/Cloudflare
เคยพบบางโปรเจกต์ทีม Dev แก้ไขแท็กใน HTML เรียบร้อยแล้ว แต่ที่ Cloudflare Worker หรือ WAF มีการเซ็ต Header Rule ทับไว้ ทำให้ทุก Request ที่ยิงเข้าเว็บยังคงพ่น X-Robots-Tag: noindex ออกมาโดยไม่รู้ตัว ส่งผลให้อันดับหลุดหมดทั้งเว็บภายใน 3 วันหลัง Launch
curl -sI https://example.com/ | grep -E -i "(HTTP/|x-robots-tag|robots)"
Canonical Tag ต้องเป็น Absolute URL บนโดเมน Production ป้องกันการโอนพลังกลับไปยังเซิร์ฟเวอร์พัฒนา
Canonical Tag เป็นตัวกำหนด Master URL ให้ Google ทราบว่าควร index หน้าใด หากในกระบวนการ Build หรือ Environment Variable มีการดึงค่า Host ผิดพลาด เช่น อ้างอิง http://localhost:3000 หรือ staging.domain.com Googlebot จะเพิกเฉยต่อหน้าจริงและไม่แสดงในผลการค้นหา
https://example.com/category/product
เว็บไซต์ Headless E-Commerce ย้ายจาก Magento ไป Shopify/Next.js เกิดข้อผิดพลาดใน process.env.NEXT_PUBLIC_SITE_URL ค่าว่างเปล่า ทำให้แท็กออกมาเป็น <link rel="canonical" href="undefined/slug"> ส่งผลให้ Google มองว่าโครงสร้างลิงก์พังทั้ง 10,000 URLs
curl -s https://example.com/services/seo | grep -i "rel=\"canonical\""
ตรวจสอบความถูกต้องของ Title Tag ไม่ให้เกิดบั๊กซ้ำซ้อน หรือข้อความ Template ค้าง
Title และ Description เป็นประตูบานแรกที่ตัดสินใจอัตราการคลิก (CTR) หากระบบใหม่มีบั๊กต่อชื่อแบรนด์เบิ้ล (เช่น "หน้าแรก - ชื่อแบรนด์ - ชื่อแบรนด์") หรือดึงค่าว่างเปล่า (Empty Meta) จะทำให้ Google นำข้อความจากเนื้อหามั่วๆ มาแสดงแทน ส่งผลให้ CTR ดิ่งลงทันที
ในการย้ายระบบ WordPress มักเกิดปัญหาปลั๊กอิน SEO สองตัวทำงานซ้อนกัน (เช่น Yoast + Rank Math หรือ ธีมมีระบบ SEO ในตัว) ส่งผลให้แท็ก <title> ถูกพ่นออกมา 2 ครั้งในโค้ดเดียวกัน ทำให้บอทสับสน
curl -s https://example.com/ | grep -o -E "<title>([^<]+)</title>"
ตรวจสอบภาพและข้อมูลเมื่อแชร์ลง Social Media (LINE, Facebook) ต้องตรงกับเนื้อหาหน้านั้นๆ
Social Referral Traffic มีบทบาทสูงในการกระตุ้น Brand Signals หากภาพพรีวิวเป็นรูปสีเทา รูปไม่ขึ้น หรือเป็นรูปโลโก้ภาพเดียวทั้งเว็บ ผู้ใช้งานที่ได้รับแชร์ผ่านแชทหรือโซเชียลมีเดียจะมองข้ามและไม่กดเข้ามาดูเนื้อหา
og:image ขนาดมาตรฐาน 1200 x 630 px
twitter:card แบบ summary_large_image
เว็บที่ย้ายไปใช้ Next.js Image Optimization มักเผลอใช้ Relative Path เช่น /images/og.jpg บราวเซอร์แสดงผลได้ แต่ Facebook Crawler และ LINE Scraper จะปฏิเสธทันทีเพราะต้องการ URL เต็มที่มี Domain
curl -s https://example.com/ | grep -E -i "property=\"og:|name=\"twitter:"
ตรวจเช็คคำสั่ง Disallow และชี้เป้า Sitemap Index ให้ Search Engine ทราบอย่างเป็นทางการ
robots.txt คือเอกสารฉบับแรกที่บอทจะร้องขอเมื่อเข้าสู่เว็บไซต์ หากมีคำสั่ง Disallow: / บอทจะไม่พยายามเดินเก็บหน้าใดๆ เลย ทำให้กระบวนการ Index หยุดชะงัก 100%
User-agent: * อนุญาตให้เข้าถึงหน้าสาธารณะได้
/wp-admin/ หรือ /api/
Sitemap: https://domain.com/sitemap_index.xml ต่อท้าย
เคยมีเคสทีม Dev ตั้งใจบล็อกโฟลเดอร์สคริปต์ แต่เขียนคำสั่งผิดเป็น Disallow: /js/ หรือ Disallow: /_next/ ส่งผลให้ Googlebot เรนเดอร์หน้าเว็บไม่ได้ (CSS/JS ถูกบล็อก) หน้าเว็บจึงกลายเป็นหน้าขาวในสายตาบอท
curl -s https://example.com/robots.txt
ตรวจสอบไฟล์ไซท์แมปทุกประเภทรวมถึง sitemap index ต้องมีรายการ URL จริง และตอบสถานะ 200 OK
ระบบย้ายเว็บหลายตัวสร้าง Sitemap Index ขึ้นมาได้สวยงาม แต่พอกดเข้าไปใน sub-sitemap กลับพบว่าเป็นไฟล์ว่างเปล่า (Empty XML) หรือมีขนาดน้อยกว่า 200 bytes ทำให้ Google เข้าใจว่าเว็บไซต์ไม่มีเนื้อหาอัปเดต และไม่ส่งบอทมาเก็บข้อมูล
<loc> ในแต่ละไฟล์ต้องตรงกับจำนวนหน้าจริง
200 OK (ห้ามมี 404 หรือ 301)
เคยพบเคสเว็บไซต์ 50,000 หน้า ปลั๊กอินสร้าง Sitemap พยายาม Query ข้อมูลทั้งหมดในรอบเดียว ทำให้เกิด PHP Memory Timeout ส่งผลให้ไฟล์ sitemap กลายเป็นข้อความ Error 500 ทางแก้คือแบ่งพาร์ติชันไฟล์ละไม่เกิน 1,000 URLs
ตรวจสอบโค้ด Schema Markup ผ่าน Schema.org Validator และ Google Rich Results Test ห้ามมี Error แดง
Google อาศัย Schema แบบ JSON-LD ในการทำความเข้าใจโครงสร้างความหมาย หากโค้ดมีเครื่องหมายตกหล่นเพียงตัวเดียว (เช่น ลืมปิดปีกกา หรือมีลูกน้ำเกิน) Parser ของ Google จะหยุดการอ่านทันที ทำให้สูญเสียสิทธิ์การแสดงผล Rich Snippets ทั้งหมด
ในภาษาไทยมักพบปัญหาข้อความมีเครื่องหมายอัญประกาศคู่ ("...") ในชื่อสินค้า แล้วระบบไม่ได้ทำการ Escape Character (\") ส่งผลให้โครงสร้าง JSON พังทั้งแถบ
curl -s https://example.com/ | grep -E -A 10 "<script type=\"application/ld\+json\""
หน้ารายละเอียดบริการหรือสินค้า ต้องมี offers, price, currency: THB และ availability ครบถ้วน
Google Shopping และผลการค้นหาสินค้าต้องการข้อมูลราคาสินค้า สถานะในสต็อก และรูปภาพที่ชัดเจน การใส่ Schema Product / Service ที่สมบูรณ์จะทำให้ได้รับ Rich Snippet แสดงราคาและคะแนนรีวิว ซึ่งช่วยเพิ่ม Click-Through Rate ได้ถึง 30%
offers, price และ priceCurrency: "THB"
availability: "https://schema.org/InStock"
aggregateRating ที่ตรงกับความจริง
บางโปรเจกต์ตั้งราคาใน Schema เป็น 0 หรือใส่สกุลเงินเป็น USD ผิดพลาด ส่งผลให้ Google Merchant Center ระงับการแสดงผลผลิตภัณฑ์เนื่องจากราคาในโค้ดไม่ตรงกับราคาที่แสดงบนหน้าเว็บจริง
curl -s https://example.com/products/item-1 | grep -i -E "priceCurrency|price|InStock"
ลำดับตำแหน่ง position: 1, 2, 3 ใน JSON-LD ต้องสะท้อนเส้นทาง Home > Category > Target Page
Breadcrumb Schema ช่วยให้ Google แสดงผล Breadcrumb Path บน SERP แทนที่จะเป็น URL ยาวๆ ที่อ่านยาก ช่วยตอกย้ำโครงสร้างหมวดหมู่แบบ Silo Structure ทำให้บอทจัดกลุ่มความเชี่ยวชาญของเนื้อหาได้อย่างแม่นยำ
itemListElement เริ่มจากตำแหน่ง 1 คือหน้าแรก
พบบ่อยในเว็บที่เปลี่ยนธีมใหม่ ตัวเลข position ในโค้ดรันผิด เช่น มีเลข 1 ซ้ำกันสองครั้ง หรือข้ามจาก 1 ไป 3 ส่งผลให้ Google แจ้งเตือน Invalid Breadcrumbs ใน Search Console
curl -s https://example.com/blog/article-1 | grep -i "BreadcrumbList"
ระบุชื่อทางการ, โลโก้, เบอร์โทรติดต่อ, ที่อยู่ และลิงก์ sameAs ชี้ไปยัง Social Media เพื่อสร้าง Entity Authority
แกนหลักของ E-E-A-T และ Knowledge Graph ของ Google คือการระบุว่า "ใครเป็นเจ้าของเว็บไซต์นี้" ผ่าน Schema Organization ที่เชื่อมโยง Social Profiles ด้วยฟิลด์ sameAs เพื่อให้ระบบ AI และ Knowledge Graph จดจำแบรนด์เป็น Entity ที่น่าเชื่อถือ
name, url, logo ของบริษัท
sameAs ชี้ไปยัง Facebook, YouTube, LinkedIn, X
address และ telephone ให้ตรงกับ Google Business Profile
ย้ายระบบแล้วลืมอัปเดต URL ของโลโก้ ทำให้ Schema ดึงลิงก์จากเซิร์ฟเวอร์เก่าที่กำลังจะปิดตัวลง ส่งผลให้รูปภาพใน Google Knowledge Panel หายไปในเวลาต่อมา
curl -s https://example.com/ | grep -i -A 6 "\"sameAs\""
คำถามและคำตอบใน Schema ต้องตรงกับเนื้อหาที่แสดงบนหน้าเว็บ ห้ามแอบใส่ข้อความสแปมคีย์เวิร์ด
Google มีนโยบายต่อต้านการซ่อนเนื้อหา (Hidden Content Policy) ข้อความคำถาม-คำตอบใน Schema FAQPage จะต้องสามารถอ่านได้โดยตรงบนหน้าเว็บ หากพบว่าใน Schema มีคำตอบ แต่บนหน้าเว็บไม่มี หรือซ่อนไว้ อาจโดนบทลงโทษแบบ Manual Action ด้าน Structured Data Spam
FAQPage มี Accordion หรือข้อความบนหน้าเว็บจริง
เคยพบเคสย้ายเว็บแล้วระบบ CMS นำคำถาม FAQ มาแสดงผล แต่ลืมแก้ ID ของ Accordion ทำให้ผู้ใช้คลิกเปิดอ่านคำตอบไม่ได้ ส่งผลกระทบต่อทั้ง User Experience และความถูกต้องของการตรวจสอบ Schema
curl -s https://example.com/services/seo | grep -i "FAQPage"
URL เก่าที่มีทราฟฟิกหรือ Backlink ต้องทำ 301 ตรงสู่ปลายทางใหม่ทันทีในทอดเดียว ห้ามมี Chain
นี่คือจุดที่ทำให้ทราฟฟิกหลังย้ายระบบพังทลายมากที่สุด URL เก่าที่มีประวัติคะแนน Backlink และอันดับ หากเปลี่ยน URL ใหม่ ต้องทำ 301 Permanent Redirect ส่งตรงแบบ 1:1 ทันที หากปล่อยให้หลุดเป็น 404 คะแนน Link Equity จะหายไปทั้งหมด และหากทำเป็น Redirect Chain หลายทอด บอทจะหยุดเดินกลางคัน
เคยพบเคสย้ายระบบแล้วทีมงานตั้งกฎ redirect ทับซ้อน: http://site.com/old → 301 ไป https://site.com/old → 301 ไป https://www.site.com/old → 301 ไป https://www.site.com/new/ (รวม 4 hops) ทำให้บอทตัดงบ Crawl Budget ทิ้ง และอันดับร่วงลง 40% ในสัปดาห์แรก
curl -sIL https://example.com/old-page-slug | grep -E "^(HTTP/|Location:)"
เมนู Header, Footer, Breadcrumbs และ In-content links ต้องไม่มีลิงก์ตายไปยังหน้า 404
ลิงก์ภายใน (Internal Links) คือเส้นเลือดใหญ่ในการส่งผ่านคะแนน PageRank และช่วยให้บอทค้นพบหน้าต่างๆ การมี Broken Links ใน Header หรือ Footer จะทำให้บอทเดินไปติดทางตัน (Dead End) และสร้างประสบการณ์ที่เลวร้ายอย่างรุนแรงแก่ผู้ใช้
มักพบบ่อยตอนย้ายระบบ ทีม Dev แก้ไข URL สินค้าใหม่หมดแล้ว แต่ในเนื้อหาบล็อกเก่ายังคงฝังลิงก์โครงสร้างเดิม ทำให้ผู้ใช้ที่อ่านบทความแล้วคลิกลิงก์ไปซื้อของพบหน้า 404 สูญเสีย Conversion ไปอย่างน่าเสียดาย
python scripts/run_post_deploy_audit.py --url https://example.com/ --check-links
กำหนดมาตรฐานมีหรือไม่มี Slash ท้าย URL ให้ชัดเจน ป้องกันปัญหา Duplicate Content และ Redirect Loop
Google มอง /service และ /service/ เป็นสองหน้าต่างหาก หากเซิร์ฟเวอร์เปิดให้เข้าถึงได้ทั้งสองรูปแบบพร้อมกัน จะเกิดปัญหา Duplicate Content และคะแนนอันดับจะถูกแบ่งครึ่งระหว่างสอง URL
เมื่อย้ายจาก WordPress (ที่มี slash ท้าย) ไปยังระบบใหม่ที่ไม่มี slash หากไม่ทำ 301 URL เก่าทั้งหมดที่มี backlink จะกลายเป็น 404 ทันที และถ้าเซิร์ฟเวอร์ตั้งค่า Nginx ชนกับ Framework อาจเกิดลูปเด้งไม่มีวันสิ้นสุด
เมื่อเข้า URL ที่ไม่มีอยู่จริง เซิร์ฟเวอร์ต้องตอบ Header 404 Not Found ห้ามตอบ 200 OK (ป้องกัน Soft 404)
หน้า 404 ที่ตอบสถานะ 200 OK จะทำให้ Google เข้าใจผิดคิดว่าเป็นหน้าที่มีเนื้อหาปกติ และพยายามจัดทำดัชนี (Index) เข้ามาเรื่อยๆ จนเกิดปัญหา Soft 404 ท่วม Search Console และผลาญงบประมาณ Crawl Budget ไปอย่างมหาศาล
/random-check-404-error
404 Not Found จริง
เคยพบบางเว็บไซต์ทำ Redirect 302 ส่ง URL ที่ไม่มีอยู่จริงทั้งหมดกลับไปหน้าแรก (Home Page) ทำให้ Google Index หน้าแรกด้วยคีย์เวิร์ดของ URL ขยะ ส่งผลให้อันดับคำค้นหาหลักของหน้าแรกตกฮวบ
curl -sI https://example.com/page-does-not-exist-check | grep "HTTP/"
ลิงก์ภายนอกต้องมีแท็กความปลอดภัยป้องกัน Tabnabbing และระบุ rel="sponsored" หากเป็นลิงก์พันธมิตร
การเชื่อมโยงออกสู่ภายนอก (Outbound Links) มีผลต่อความปลอดภัยและการส่งต่อ PageRank หากลิงก์เปิดหน้าต่างใหม่ (target="_blank") โดยไม่มี noopener noreferrer หน้าเว็บปลายทางอาจเข้าควบคุมหน้าต่างบราวเซอร์เดิมได้ (Reverse Tabnabbing)
rel="noopener noreferrer" ทุกจุดที่เปิดแท็บใหม่
rel="sponsored" หรือ nofollow
เคยพบบางเว็บไซต์ทำลิงก์พันธมิตรหลายร้อยจุดแต่ไม่ได้ใส่แท็ก sponsored ทำให้ Google มองว่าเว็บไซต์มีพฤติกรรมขายแบ็กลิงก์ (Unnatural Outbound Links) และส่งข้อความแจ้งเตือน Manual Action
python scripts/diagnose_url.py --url https://example.com/ --audit-external
ตรวจรหัส GTM Container (GTM-XXXXXXX) ต้องเป็น Production Account ไม่ใช่ Container ทดสอบ
บ่อยครั้งที่กระบวนการ Deploy ยกโค้ดมาจาก Staging แล้วลืมสลับ GTM Container ID ทำให้สถิติการเข้าชมและข้อมูลการซื้อขายบน Production จริงถูกส่งไปยังบัญชีทดสอบ ส่งผลให้ทีมการตลาดและผู้บริหารตาบอดมองไม่เห็นข้อมูลทราฟฟิกจริง
<head> และ <noscript> ใน <body>
เคยมีโปรเจกต์ Launch ระบบใหม่แล้วผู้บริหารตกใจว่าทำไมทราฟฟิกกลายเป็น 0 ในสัปดาห์แรก เมื่อตรวจสอบพบว่าทีมผู้พัฒนาใส่ Container ID ชั่วคราวของเอเจนซี่ภายนอกทิ้งไว้ในโค้ด
curl -s https://example.com/ | grep -o -E "GTM-[A-Z0-9]+" | head -n 2
ตรวจสอบ Google Analytics 4 ในหน้า Realtime ต้องบันทึกจำนวนผู้ใช้งานและ Event ได้ทันที
เมื่อเปิดใช้งานเว็บใหม่ ข้อมูลการเข้าชมของผู้ใช้งานจะต้องเริ่มบันทึกเข้าระบบทันที หากมีปัญหาเรื่อง Cookie Banner หรือ Content Security Policy (CSP) บล็อกการส่งข้อมูลไปยัง Google Analytics จะทำให้ขาดช่วงของข้อมูลประวัติ (Data Continuity)
page_view ถูกส่งออกอย่างถูกต้อง
บางโปรเจกต์ตั้งค่า Single Page Application (SPA) บน React แล้วส่ง page_view เฉพาะครั้งแรกที่โหลดเว็บ แต่พอเปลี่ยนหน้าผ่าน Router ด้านใน กลับไม่มีการส่ง Virtual Pageview ทำให้ Bounce Rate พุ่งเป็น 100%
curl -s https://example.com/ | grep -o -E "G-[A-Z0-9]+" | head -n 1
ปุ่มรับเงินและช่องทางติดต่อต้องทำงานได้จริง 100% ป้องกันลูกค้ารั่วไหลหลังขึ้นระบบใหม่
เป้าหมายสูงสุดของ SEO คือ Conversion ต่อให้อันดับยังอยู่ครบ แต่ถ้าปุ่มติดต่อพัง หรือฟอร์มกรอกแล้วไม่ส่งอีเมลเข้าบริษัท ธุรกิจจะสูญเสียรายได้ทันที (Leads Blackout) การทดสอบปุ่มทุกจุดบนมือถือจึงเป็นขั้นตอนที่สำคัญที่สุด
tel:08XXXXXXXX ที่ถูกต้อง
เคยพบบ่อยตอนย้ายเซิร์ฟเวอร์ SMTP Mail Server ไม่ได้ตั้งค่าการยืนยันตัวตน ทำให้ฟอร์มติดต่อหน้าเว็บขึ้นข้อความ "ส่งสำเร็จ" แต่ในความเป็นจริงอีเมลของลูกค้าตกหล่นและไม่เคยส่งถึงทีมขายตลอด 2 สัปดาห์แรก
curl -s https://example.com/contact | grep -E -i "(tel:|mailto:|line.me)"
แท็ก Meta Verification หรือ DNS TXT ยืนยันสิทธิ์ใน Search Console และ Meta Business ต้องยังอยู่ครบ
การเปลี่ยน Theme หรือ Codebase ใหม่ มักทำให้ HTML Meta Tag ที่เคยแปะไว้ใน header หลุดหาย ส่งผลให้สิทธิ์การจัดการโดเมนใน Google Search Console หรือ Facebook Ads Manager ถูกระงับการยืนยัน ทำให้ไม่สามารถมอนิเตอร์ข้อมูลหรือยิงแอดคอนเวอร์ชันได้
<meta name="google-site-verification">
<meta name="facebook-domain-verification">
พบบ่อยในบริษัทที่มีแคมเปญ Meta Ads วิ่งอยู่ พอ Meta Verification หลุดจาก Header แคมเปญโฆษณาที่ยิงไปยัง Conversion Event จะหยุดทำงานทันที ทำให้เสียโอกาสทางธุรกิจ
curl -s https://example.com/ | grep -i "verification"
ตรวจไฟล์บันเดิลของเฟรมเวิร์ก (Next.js, WordPress) ทุกไฟล์ต้องโหลดติดครบถ้วน ไม่มีไฟล์แตก 404
เว็บแอปพลิเคชันสมัยใหม่ทำงานแบบ Code Splitting หากไฟล์ JS Chunk หรือ CSS สไตล์ตอบสถานะ 404 บราวเซอร์จะไม่สามารถประกอบหน้าเว็บ (Hydration Failed) และ Googlebot จะมองเห็นหน้าเว็บพัง หรือไม่แสดงเนื้อหาหลัก
ใน Next.js หากตั้งค่า assetPrefix ไม่ตรงกับโดเมน CDN หรือลืมดีพลอยโฟลเดอร์ .next/static ผู้ใช้ที่เข้าเว็บหลังดีพลอยจะเจอหน้าขาวและติด Error ChunkLoadError
python scripts/run_post_deploy_audit.py --url https://example.com/ --check-assets
ใส่ preload ฟอนต์หลัก และกำหนด font-display: swap เพื่อควบคุมค่า Cumulative Layout Shift (CLS)
ฟอนต์ภาษาไทยมีสัดส่วนขนาดกว้างและวรรณยุกต์สูง-ต่ำต่างจากฟอนต์ระบบ หากไม่มีการ Preload เมื่อฟอนต์ดาวน์โหลดเสร็จ ข้อความจะขยับกระโดดเปลี่ยนขนาดทันที (Layout Shift) ส่งผลให้คะแนน Core Web Vitals (CLS) ตก และผู้ใช้รู้สึกรำคาญ
<link rel="preload" as="font" type="font/woff2" crossorigin>
.woff2 เท่านั้น (ขนาดเล็กกว่า ttf ถึง 60%)
font-display: swap ในกฎ @font-face
การโหลด Google Fonts ผ่านคำสั่ง @import url(...) ในไฟล์ CSS ย่อย จะทำให้เกิด Render-blocking Chained Requests หน่วงเวลาการแสดงผลข้อความแรกไป 1-2 วินาทีบนเครือข่ายมือถือ
curl -s https://example.com/ | grep -i "rel=\"preload\".*as=\"font\""
ทดสอบการแสดงผลบนอุปกรณ์พกพา ต้องไม่มีตารางหรือรูปภาพดันขอบจอจนเกิด Scrollbar แนวนอน
Google ใช้ระบบ Mobile-First Indexing ในการจัดอันดับ 100% หากหน้าเว็บเกิดอาการปัดข้างได้ (Horizontal Scrollbar) บอทจะประเมินว่าหน้านี้ไม่เป็นมิตรกับผู้ใช้สมาร์ตโฟน (Mobile Usability Issues) ซึ่งส่งผลให้คะแนนประสบการณ์บนหน้าเว็บลดลงทันที
<meta name="viewport" content="width=device-width, initial-scale=1.0">
max-w-full h-auto
ตารางเปรียบเทียบราคาหรือสเปกสินค้าที่ก๊อปปี้มาจากเว็บเก่า มักระบุ width: 900px แบบตายตัว เมื่อดูบนมือถือ ตารางจะดันขอบจอทะลุออกไป ทำให้ข้อความส่วนอื่นโดนบีบจนอ่านไม่รู้เรื่อง
curl -s https://example.com/ | grep -i "name=\"viewport\""
ล้างแคชระดับ Edge Server ทั้งหมดหลังดีพลอย เพื่อให้ผู้ใช้และ Web Crawler ได้รับโค้ดล่าสุดทันที
แม้บนเซิร์ฟเวอร์หลักจะอัปเดตโค้ดและแก้ไขกฎ 301 เรียบร้อยแล้ว แต่ถ้า CDN Edge (เช่น Cloudflare, Fastly, AWS CloudFront) ยังคงจดจำหน้าเว็บเวอร์ชันเก่าไว้ บอทที่วิ่งเข้ามาจะยังคงได้รับสถานะเก่าหรือหน้าเดิม ทำให้การทดสอบและการกู้ทราฟฟิกล่าช้าไปหลายวัน
Purge Everything บนแดชบอร์ดของ CDN ทันทีหลัง Launch
cf-cache-status ต้องขึ้น DYNAMIC หรือ MISS/EXPIRED
เคยพบเคสทีมงานแก้ปัญหา Canonical Tag บน Production เรียบร้อยแล้ว แต่ลืมเคลียร์ Cloudflare แคช ทำให้ Google เข้ามาเก็บข้อมูลและยังคงเห็น Canonical ตัวผิดอยู่อีก 48 ชั่วโมงเต็ม
curl -sI https://example.com/ | grep -i -E "(cf-cache-status|x-cache|age)"
คำสั่งด่วนสำหรับเช็ค Headers, Status Code และ Redirects บน Terminal ก่อนส่งมอบงาน
curl -sI https://example.com/products/item-1 | grep -E -i "HTTP|x-robots|canonical|cache-control"
curl -sIL https://example.com/old-url | grep -E "^HTTP|^Location"
curl -s https://example.com/sitemap.xml | grep -o "<loc>" | wc -l