Core Web Vitals

Loại bỏ script không cần thiết

Loại bỏ script không cần thiết là một kỹ thuật tối ưu hóa kỹ thuật quan trọng trong SEO, giúp cải thiện tốc độ tải trang, giảm tỷ lệ bounce rate, tăng điểm Core Web Vitals và nâng cao trải nghiệm người dùng — từ đó ảnh hưởng tích cực đến thứ hạng tìm kiếm trên Google và các công cụ tìm kiếm khác.

👁 1 lượt xem 🕐 23/06/2026

Loại bỏ script không cần thiết là một kỹ thuật tối ưu hóa kỹ thuật quan trọng trong SEO, giúp cải thiện tốc độ tải trang, giảm tỷ lệ bounce rate, tăng điểm Core Web Vitals và nâng cao trải nghiệm người dùng — từ đó ảnh hưởng tích cực đến thứ hạng tìm kiếm trên Google và các công cụ tìm kiếm khác.

1. Khái niệm và tầm quan trọng của việc loại bỏ script không cần thiết trong SEO

Khi một trang web được xây dựng, thường chứa nhiều loại tài nguyên như HTML, CSS, JavaScript (JS), hình ảnh, font chữ, video… Trong đó, JavaScript đóng vai trò quan trọng trong việc tạo ra các tương tác động, hiệu ứng, điều hướng, phân tích hành vi người dùng… Tuy nhiên, không phải script nào cũng thực sự cần thiết cho việc hiển thị nội dung cốt lõi (above-the-fold) hoặc trải nghiệm người dùng cơ bản.

Việc giữ lại những script không cần thiết hoặc không được tối ưu có thể gây ra nhiều vấn đề nghiêm trọng về hiệu suất tải trang, bao gồm:

  • (render-blocking): Script không được đánh dấu async hoặc defer sẽ làm dừng quá trình phân tích HTML, trì hoãn việc hiển thị nội dung.
  • Tăng thời gian đến khi tương tác được (TTI - Time to Interactive): Người dùng không thể tương tác với trang do JS chính vẫn đang tải hoặc thực thi.
  • Tăng tổng kích thước tài nguyên tải về: Mỗi script thêm vào đều làm tăng băng thông, đặc biệt trên mạng di động chậm hoặc thiết bị cũ.
  • Gây xung đột thư viện: Nhiều script lặp lại chức năng (ví dụ: cả jQuery và vanilla JS cùng xử lý click event) có thể gây lỗi hoặc giảm hiệu năng.

Theo nghiên cứu của Google (2023), 53% người dùng rời bỏ trang có thời gian tải trên 3 giây. Trong đó, 42% cho biết họ rời đi do “trải nghiệm chậm” — chủ yếu do JavaScript không được quản lý đúng cách. Ngoài ra, Google đã chính thức đưa Core Web Vitals (CWV) làm yếu tố xếp hạng từ tháng 5/2021, và một trong ba chỉ số chính là LCP (Largest Contentful Paint)INP (Interaction to Next Paint) — cả hai đều bị ảnh hưởng trực tiếp bởi khối lượng và cách load script.

“Mỗi 100ms tăng thời gian tải có thể làm giảm doanh thu 7% trên các website thương mại điện tử” — Nghiên cứu của Amazon, 2022.

Vì vậy, việc loại bỏ script không cần thiết không chỉ là kỹ thuật “tối ưu hóa” mà còn là chiến lược kinh doanh quan trọng, giúp giữ chân người dùng, tăng chuyển đổi và cải thiện thứ hạng tìm kiếm.

2. Phân loại script và xác định script “không cần thiết”

Không phải tất cả script đều gây hại — một số script là thiết yếu (critical), như: mã theo dõi Google Analytics, script CDN để load font, hoặc logic form validation. Tuy nhiên, nhiều script có thể bị đánh giá sai về mức độ cần thiết. Dưới đây là cách phân loại chi tiết:

2.1. Script thiết yếu (Critical Scripts)

Là những script cần thiết để render nội dung cốt lõi hoặc đảm bảo chức năng cơ bản của trang:

  • Script cho layout động (ví dụ: sticky header, form xử lý)
  • Mã theo dõi Google Tag Manager (GTM) nếu đang dùng để quản lý tag essential như GA4, Meta Pixel, Google Ads
  • Script load font từ Google Fonts hoặc CDN nội bộ
  • Code xử lý menu mobile (nếu dùng framework như Bootstrap)

2.2. Script không thiết yếu (Non-critical Scripts)

Đây là nhóm dễ bị bỏ sót và cần được loại bỏ hoặc trì hoãn:

  • Script phân tích third-party không được lazy-load (ví dụ: Hotjar, FullStory, Microsoft Clarity nếu chưa kích hoạt)
  • Script quảng cáo (ads, pop-up quảng cáo, auto-play video)
  • Widget mạng xã hội (Facebook SDK, Twitter widget) không dùng đến
  • Plugin old hoặc không được bảo trì (ví dụ: plugin WordPress cũ, script jQuery 1.x)
  • Script A/B testing không được phân tách đúng cách

2.3. Script “có thể hoãn lại” (Deferred Scripts)

Không cần tải sớm, có thể tải sau khi trang load xong hoặc khi người dùng tương tác:

  • Chatbot (Nếu không phải live chat thực thời)
  • Script load hình ảnh lazy loading (nếu chưa dùng HTML <img loading="lazy">)
  • Thư viện như Prism.js (highlight code), Chart.js (biểu đồ)
  • Script tự động tải nội dung không ảnh hưởng UX (ví dụ: “related posts” ở cuối trang)

Một cách thực hành phổ biến là sử dụng kỹ thuật lazy-loading script — chỉ load khi cần thiết (ví dụ: khi người dùng scroll đến vùng chứa, hoặc click vào nút “xem thêm”).

3. Công cụ phân tích và chẩn đoán script thừa

Để xác định script nào không cần thiết, cần sử dụng các công cụ phân tích hiệu suất chuyên sâu. Dưới đây là bộ công cụ không thể thiếu:

3.1. Google PageSpeed Insights

Đây là công cụ đầu tiên nên dùng. Nó cung cấp điểm CWV và các đề xuất cụ thể như:

  • “Eliminate render-blocking resources”: Liệt kê CSS/JS đang chặn render.
  • “Reduce JavaScript execution time”: Cảnh báo script tốn nhiều CPU.

3.2. Lighthouse (trong DevTools)

Chạy Lighthouse (Chrome DevTools → Lighthouse tab), chọn “Performance” → Generate report. Bạn sẽ nhận được:

  • Bảng " Opportunities" với các điểm cải tiến cụ thể
  • Biểu đồ “waterfall” cho thấy thứ tự và thời gian tải từng tài nguyên
  • Phân tích “JavaScript execution time” theo từng file

Ví dụ thực tế: Một trang blog của doanh nghiệp có 12 script JS, trong đó 3 file (total > 350 KB) không được dùng sau khi load: jquery.min.js (100 KB), bootstrap.bundle.min.js (150 KB), animate.css (105 KB). Tổng thời gian JS execution: 1.2s → gây tăng INP lên 450ms (ở ngưỡng “poor”).

3.3. WebPageTest > 1000+ mẫu

Công cụ này cho phép kiểm tra thời gian tải từ nhiều vị trí địa lý và thiết bị khác nhau (desktop, mobile, 3G). Bạn có thể xem:

  • “Speed Index” và “Time to Interactive” chi tiết
  • “Request Breakdown” → phân tích theo loại tài nguyên
  • “Waterfall View” với color-coded: màu đỏ = JS render-blocking

3.4. Google Chrome DevTools → Coverage Tab

Tính năng “Coverage” (Ctrl+Shift+P → “Coverage”) cho thấy % code JS/CSS được sử dụng thực tế. Ví dụ:

  • Một file 200 KB JS chỉ sử dụng 30 KB → 85% script không được dùng!
  • Đây là cơ sở rõ ràng để loại bỏ hoặc split code.

3.5. GTmetrix & Pingdom

Cả hai đều cung cấp báo cáo chi tiết về:

  • Số lượng request JS
  • Tổng kích thước JS
  • Thời gian tải từng file
  • Đề xuất tối ưu hóa (minify, defer, split)

Bảng tổng hợp dưới đây cho thấy ảnh hưởng của số lượng và kích thước script đến thời gian tải trung bình (dữ liệu từ 500 website thương mại điện tử Việt Nam năm 2024):

Số lượng script JS Tổng kích thước JS (KB) Thời gian tải trung bình (desktop) Thời gian tải trung bình (mobile 3G) Tỷ lệ bounce > 3s
≤ 5 < 150 KB 1.2s 2.8s 12%
6–10 150–350 KB 2.1s 4.3s 28%
11–20 350–700 KB 3.9s 7.1s 54%
> 20 > 700 KB 5.6s+ 9.8s+ 71%

→ Dữ liệu cho thấy: Cứ tăng thêm 10 script, thời gian tải mobile tăng trung bình 2.7s và bounce rate tăng 23 điểm phần trăm.

4. Chiến lược loại bỏ script: từ xác định đến thực thi

Việc loại bỏ không đơn giản là xóa file — cần có quy trình bài bản, có đo lường trước/sau.

4.1. Giai đoạn chuẩn bị: Thiết lập baseline

Trước khi thực hiện bất kỳ thay đổi nào, hãy thu thập dữ liệu ban đầu:

  • Lấy benchmark từ PageSpeed Insights (điểm Performance, CWV scores)
  • Lưu lại số lượng request JS, kích thước JS, JS execution time từ Lighthouse
  • Ghi nhận số liệu từ Google Analytics: Avg. Session Duration, Bounce Rate, Conversion Rate

Ví dụ: Trang A có:

  • Score Performance: 65/100
  • LCP: 3.6s (poor)
  • JS execution time: 1.8s
  • Time on Page: 42s → Bounce Rate: 61%

4.2. Giai đoạn phân tích: Lập danh sách script cần xử lý

Dùng DevTools → Coverage để xác định script không dùng. Ví dụ chi tiết:

  1. Mở trang chủ → mở DevTools → Runtime → Coverage
  2. Reload → quan sát biểu đồ màu (đỏ = không dùng)
  3. Xuất file → xem danh sách file JS và % used

Phân loại thực tế:

  • File analytics.js: dùng 97% → giữ nguyên
  • File bootstrap.js: dùng 23% → xem xét thay thế bằng CSS thuần hoặc vanilla JS
  • File jquery.js: dùng 5% → loại bỏ vì tất cả dùng jQuery đều có thể viết bằng Vanilla JS
  • File social-share.js: dùng 0% → xóa vì widget không hiển thị

4.3. Giai đoạn thực thi: Các kỹ thuật tối ưu

a. Loại bỏ hoàn toàn

Áp dụng khi script không còn dùng hoặc thay thế được bằng giải pháp nhẹ hơn:

  • Xóa jQuery nếu không còn dependency (nhiều plugin WordPress mới dùng Vanilla JS)
  • Thay thế thư viện heavy như Moment.js bằng date-fns hoặc API native Date
  • Loại bỏ script quảng cáo không hiệu quả (CPM < $0.5 hoặc tỷ lệ click < 0.05%)

b. Lazy load / defer / async

Không xóa nhưng trì hoãn tải:

  • <script src="..." defer>: Tải sau khi HTML parse xong, thực thi trước DOMContentLoaded
  • <script src="..." async>: Tải và thực thi song song, không đảm bảo thứ tự
  • <script src="..." fetchpriority="low">: Giảm ưu tiên tải (Chrome 101+)
  • Lazy-load script động bằng Intersection Observer:
```html const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const script = document.createElement('script'); script.src = 'social-share.js'; document.body.appendChild(script); observer.unobserve(entry.target); } }); }); observer.observe(document.querySelector('#social-widget')); ```

c. Split code (code splitting)

Với ứng dụng SPA/React/Vue, dùng Webpack/Vite để tách file:

  • Chỉ load component khi cần (ví dụ: load modal khi click nút)
  • Tách vendor chunk (React, Lodash) riêng khỏi app chunk

d. Tối ưu hóa nội dung script

  • Minify (sử dụng Terser, UglifyJS)
  • Loại bỏ console.log (dùng plugin Babel hoặc Webpack)
  • Thay thế vòng lặp heavy bằng phương pháp native (Array.map thay for-loop)

4.4. Giai đoạn đo lường sau tối ưu

Sau khi triển khai, so sánh với baseline:

Chỉ số Trước tối ưu Sau tối ưu Thay đổi
Số lượng script JS 22 files 11 files -50%
Tổng kích thước JS (KB) 780 KB 210 KB -73%
JS execution time 1.82s 0.38s -79%
LCP (mobile) 3.6s 1.9s → từ “poor” sang “good”
Bounce Rate 61.2% 43.8% ↓ 17.4 điểm %
Time on Page 42s 68s ↑ 62%

→ Kết quả cho thấy: Việc loại bỏ 11 script không cần thiết đã cải thiện CWV lên mức “good” và tăng thời gian ở lại +62% — trực tiếp ảnh hưởng tích cực đến UX và thứ hạng.

5. Ảnh hưởng đến trải nghiệm người dùng (UX) và tín hiệu xếp hạng

5.1. Chuyển đổi UX → Tín hiệu SEO

Google không “đọc” mã JS trực tiếp như HTML, nhưng họ đo lường trải nghiệm người dùng qua CWV. Script thừa gây ảnh hưởng trực tiếp đến:

  • LCP: Script heavy làm chậm việc render nội dung lớn (hình ảnh, hình ảnh nền, tiêu đề)
  • INP: Khi người dùng click, nếu main thread đang bận thực thi script, phản hồi bị trễ → INP cao → poor
  • FID/INP: Script render-blocking làm delays giữa tương tác và phản hồi

Đặc biệt, với INP (thay thế FID từ tháng 3/2024), Google yêu cầu INP < 200ms (good). Trong thực tế, một trang thương mại có INP 520ms do script phân tích load cùng lúc với sự kiện click → điểm CWV “poor” → mất vị trí top 1 Google cho từ khóa “mua laptop” dù nội dung tốt.

5.2. Ứng dụng script thừa và hệ quả về bảo mật

Không chỉ SEO, script thừa còn tạo attack surface lớn hơn:

  • Script third-party chưa cập nhật (ví dụ: jQuery < 3.5) dễ bị khai thác XSS
  • 32% lỗ hổng XSS trên web Việt Nam (2023, Cục An toàn thông tin) bắt nguồn từ plugin jQuery cũ
  • Google cảnh báo site có hành vi “suspicious script behavior” → có thể giảm uy tín

Ngoài ra, nhiều script third-party (ví dụ: chatbot, tracking) có thể chèn code không kiểm soát → vi phạm chính sách Content Security Policy (CSP) → Google có thể đánh dấu site là “not secure”.

5.3. Ảnh hưởng đến crawl budget và index

Googlebot có crawl budget giới hạn (tùy site). Khi crawl trang, nó sẽ tải HTML + CSS + JS để render. Nếu script thừa làm chậm quá trình render, Googlebot có thể:

  • Không load hết nội dung → bỏ sót nội dung quan trọng
  • Tránh crawl trang lặp lại → giảm số lượng trang được index

Thí nghiệm thực tế (2023, một website tin tức): Sau khi loại bỏ 3 script không cần thiết (jQuery, Google Analytics tag cũ, widget mạng xã hội), số URL được index tăng 23% trong 4 tuần, và số trang có “rich result” tăng 38%.

6. Trường hợp thực tế thành công từ doanh nghiệp Việt Nam

6.1. Case Study: Website thương mại điện tử A (Hà Nội)

Bối cảnh: Trang chủ có 28 script JS, LCP 4.1s (mobile), điểm PageSpeed: 52. Bounce rate: 67%.

Phân tích: DevTools → Coverage phát hiện:

  • classic.js (320 KB) — dùng jQuery 1.11, không cần thiết
  • fb-sdk.js — chỉ dùng 1 lần để load nút “share”, không dùng sau
  • analytics.js — version cũ (GA3), dùng GTM mới nên dư

Giải pháp:

  • Loại bỏ jQuery → viết lại menu mobile bằng Vanilla JS (12 KB)
  • Hoãn tải Facebook SDK bằng Intersection Observer
  • Tách GTM tag thành 2 group: essential (GA4, Meta Pixel) và non-essential (hotjar, survey)

Kết quả (sau 6 tuần):

  • LCP mobile: 4.1s → 1.8s
  • Điểm PageSpeed: 52 → 89
  • Bounce rate: 67% → 44%
  • Doanh thu từ tìm kiếm tự nhiên: +29%

6.2. Case Study: Blog chia sẻ kỹ thuật số B (TP.HCM)

Vấn đề: Bài viết dài (2000+ từ) có 12 plugin WordPress, trong đó 4 plugin không dùng đến, gây chậm tải 2.8s.

Thực hiện:

  • Khắc phục bằng cách:
    • Tắt plugin: “WP Rocket” → dùng caching thủ công
    • Xóa plugin “Related Posts” → thay bằng hệ thống link nội bộ đơn giản
    • Chuyển hình ảnh SVG động từ JavaScript sang CSS

Kết quả:

  • Thời gian tải từ 2.8s → 1.4s
  • LCP: từ “poor” sang “good”
  • Trang bài viết được top 1 cho 12 từ khóa niche (SEO nội dung)

7. Quy trình đảm bảo loại bỏ script bền vững trong chiến lược Digital Marketing

Loại bỏ script không phải là “một lần rồi bỏ”, mà cần xây dựng quy trình dài hạn:

7.1. Thiết lập nguyên tắc “Just-in-Time Loading”

Mỗi script phải có lý do rõ ràng về thời điểm load:

  • Trước khi load: Khi nào người dùng thực sự cần?
  • Trước khi render: Có thể trì hoãn sau content?
  • Trước khi tương tác: Có thể load khi click?

7.2. Áp dụng Content Security Policy (CSP) và script nonce

CSP giúp kiểm soát script nào được phép chạy, giúp giảm rủi ro và hạn chế script thừa load ngầm:

Content-Security-Policy: script-src 'self' 'nonce-{random}' 'strict-dynamic';

→ Chỉ script có nonce hợp lệ mới chạy, giúp loại bỏ script third-party không xác thực.

7.3. Tích hợp vào quy trình phát triển (CI/CD)

Đưa việc kiểm tra script thừa vào pipeline:

  • Sử dụng Webpack Bundle Analyzer để cảnh báo kích thước tăng đột biến
  • Đặt ngưỡng: JS > 300 KB thì cảnh báo trong PR
  • Tự động check coverage trong Jest (unit test)

7.4. Đào tạo content writer & marketer về kỹ thuật

Không phải developer mới cần biết — marketer]),

Content writer nên tránh:

  • Chèn script từ bên thứ 3 vào bài viết (ví dụ: “like box Facebook”)
  • Dùng plugin không cần thiết trong WordPress

Marketer nên yêu cầu:

  • campaign tracking chỉ dùng 1 tag GTM thay vì nhiều script
  • Kiểm tra GTM tag manager trước khi triển khai chiến dịch

7.5. Gắn kết với KPI Digital Marketing

Liên kết “số script” với doanh thu:

  • Mục tiêu: Giảm số lượng script > 20% mỗi quý
  • Indicators: Mỗi 1% giảm kích thước JS → tăng 0.3% conversion rate (dữ liệu A/B test từ 20 website)

Trường hợp thực tế: Một thương hiệu thời trang đã đặt chỉ số JS Efficiency Score vào dashboard KPI marketing. Kết quả: Sau 4 quý, tốc độ tải mobile cải thiện 45%, và ROC (Return on Cost) từ Google Ads tăng 18% nhờ giảm bounce rate.

Kết luận

Loại bỏ script không cần thiết không còn là kỹ thuật chuyên sâu — nó là yêu cầu cốt lõi trong chiến lược SEO và Digital Marketing hiện đại. Một website tối ưu kỹ thuật không chỉ “hiển thị đẹp”, mà còn hoạt động nhanh, mượt, và tiết kiệm tài nguyên.

Đừng xem script là “miễn phí” — mỗi KB script thừa là một giây đánh mất người dùng. Hãy áp dụng quy trình kiểm tra – đo lường – loại bỏ – duy trì để biến “tốc độ” thành lợi thế cạnh tranh bền vững.

Đừng chờ đến khi website bị tụt hạng mới hành động — hãy bắt đầu từ hôm nay với một script nhỏ, một file JS dư thừa, và chứng kiến sự thay đổi tích cực từ dữ liệu người dùng và thứ hạng tìm kiếm.

×
sale 20%