Đặt câu hỏi và nhận tóm tắt tài liệu bằng cách tham chiếu trang này và nhà cung cấp AI bạn chọn
Lịch sử phiên bản
- "Bật phân tích theo mặc định khi `@intlayer/analytics` được cài đặt"v9.3.322/8/2026
- "Init doc — gói @intlayer/analytics, theo dõi ở cấp độ provider/node, thử nghiệm A/B, dashboard"v9.0.08/7/2026
Nội dung của trang này đã được dịch bằng AI.
Xem phiên bản mới nhất của nội dung gốc bằng tiếng AnhNếu bạn có ý tưởng để cải thiện tài liệu này, vui lòng đóng góp bằng cách gửi pull request trên GitHub.
Liên kết GitHub tới tài liệuSao chép Markdown của tài liệu vào bộ nhớ tạm
Tài liệu Intlayer Analytics
@intlayer/analytics là một gói đồng hành tùy chọn cho bạn biết chính xác nội dung nào được hiển thị cho khách truy cập của bạn — trang nào, bằng ngôn ngữ (locale) nào và đoạn nội dung được dịch cụ thể nào — để bạn có thể hiểu rõ khán giả của mình và chạy thử nghiệm A/B trên nội dung.
Mục lục
Những gì nó theo dõi
@intlayer/analytics gom nhóm ba loại sự kiện ẩn danh thành các batch:
Mở bảng trong một cửa sổ bật lên để xem toàn bộ nội dung dữ liệu một cách rõ ràng
| Sự kiện | Bắt ở đâu | Cho bạn biết điều gì |
|---|---|---|
page_view | Cấp độ Provider (IntlayerProvider) | Trang và ngôn ngữ nào mà một phiên (session) đã xem, khi tải lần đầu, khi chuyển hướng (route change) hoặc chuyển ngôn ngữ. |
content_exposure | Cấp độ Node (useIntlayer / plugin trình biên dịch) | Khóa từ điển (dictionary key) / đường dẫn khóa nào thực sự được giải quyết và hiển thị — và nếu là một phần của thử nghiệm, thì đó là biến thể (variant) nào. |
conversion | Bất cứ nơi nào bạn gọi useConversion() | Một mục tiêu đạt được (đăng ký, nhấp chuột, mua hàng...) được quy cho (attributed) biến thể A/B mà phiên đó đã tiếp xúc. |
Các sự kiện được thu thập trong bộ nhớ và được gửi dưới dạng một yêu cầu batch duy nhất khoảng 20 giây một lần — không bao giờ gửi trên mỗi lần gõ phím hoặc mỗi lần render — do đó, analytics không bao giờ ảnh hưởng đến thời gian render đầu tiên hoặc thêm một yêu cầu cho mỗi tương tác.
Cách nó hỗ trợ thử nghiệm A/B trên nội dung
Intlayer đã cho phép bạn khai báo Biến thể (Variants) nội dung (ví dụ: từ điển hero-banner có biến thể control và black_friday). @intlayer/analytics khép kín quy trình này:
getVariant(experimentKey, variants)gán một cách tất định mỗi phiên ẩn danh cho một biến thể — đây là một hàm thuần túy (pure function) của session id và khóa thử nghiệm, vì vậy việc gán là ổn định trong toàn bộ phiên và không cần round-trip đến máy chủ trước lần render đầu tiên (không bị nhấp nháy (flicker), không thay đổi bố cục (layout shift)).- Mỗi sự kiện
content_exposuremang theovariantđã được hiển thị. useConversion()cho phép bạn quy một mục tiêu (ví dụ:"cta_click") cho biến thể đó.- Điểm cuối (endpoint) kết quả thử nghiệm trên dashboard sẽ so sánh tỷ lệ chuyển đổi trên mỗi biến thể, bao gồm cả ý nghĩa thống kê (kiểm định z).
Cài đặt
@intlayer/analytics là phụ thuộc tùy chọn của mọi gói framework (react-intlayer, next-intlayer, vue-intlayer, …), nên hầu hết dự án đã có sẵn. Hãy cài đặt tường minh nếu thiết lập của bạn bỏ qua các phụ thuộc tùy chọn (npm install --no-optional, …):
Sao chép mã vào clipboard
Chỉ cần cài gói là đủ để bật phân tích: analytics.enabled mặc định là true, và @intlayer/config sẽ chuyển thành false bất cứ khi nào không tìm thấy gói trong dự án của bạn. Nếu bạn không cài đặt nó, mọi điểm tích hợp (integration point) sẽ được coi là một hành động trống (no-op) — xem phần Không tốn phí khi không được cài đặt bên dưới.
Cấu hình
Phân tích không cần cấu hình để bắt đầu: nó được bật theo mặc định và tái sử dụng khối cấu hình editor sẵn có cho endpoint và khóa dự án.
Sao chép mã vào clipboard
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
backendURL: "https://back.intlayer.org", // Cũng được sử dụng làm điểm cuối nhận dữ liệu (ingestion endpoint) cho analytics
clientId: "your-client-id", // Cũng được sử dụng làm khóa dự án analytics
clientSecret: "your-client-secret",
},
};
export default config;
editor.backendURL— URL cơ sở mà các sự kiện analytics được gửi đến (POST {backendURL}/api/analytics/events).editor.clientId— khóa dự án công khai được gắn vào mọi sự kiện được thu nhận. Nó cũng đóng vai trò là công tắc bật (enable switch): analytics hoàn toàn bị vô hiệu hóa (và được loại bỏ bằng tree-shaking, xem bên dưới) cho đến khiclientIdđược định cấu hình.
Nếu bạn tự lưu trữ (self-host) Intlayer, analytics sẽ tự động trỏ đến phiên bản của riêng bạn vì nó dùng chung editor.backendURL.
Cách tắt (opt-out)
Khối analytics tùy chọn cho phép tinh chỉnh — hoặc tắt hẳn — việc thu thập:
Sao chép mã vào clipboard
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
analytics: {
enabled: false, // Mặc định: true — loại toàn bộ tích hợp khỏi gói ứng dụng
flushInterval: 20_000, // Số mili giây giữa hai lần gửi theo lô
sampleRate: 1, // Tỷ lệ phiên được ghi lại, từ 0 (không) đến 1 (tất cả)
},
};
export default config;
Gỡ cài đặt @intlayer/analytics có tác dụng tương tự enabled: false. Xem tài liệu tham chiếu cấu hình để biết danh sách đầy đủ các trường.
Hỗ trợ Framework
Analytics được liên kết với IntlayerProvider dùng chung từ react-intlayer, vì vậy nó có sẵn ở bất kỳ đâu provider đó được sử dụng:
Mở bảng trong một cửa sổ bật lên để xem toàn bộ nội dung dữ liệu một cách rõ ràng
| Framework | Trạng thái |
|---|---|
| React | ✅ Có sẵn |
Next.js (next-intlayer) | ✅ Có sẵn (thông qua react-intlayer) |
React Native / Expo (react-native-intlayer) | ✅ Có sẵn (thông qua react-intlayer) |
| Vue, Svelte, Angular, Solid, Preact, Lit, Astro, Vanilla | 🚧 Đã lên kế hoạch — cùng một client, các ràng buộc cấp provider tuân theo mô hình @intlayer/editor |
Cách sử dụng
Tự động theo dõi ở cấp độ provider
Không cần thay đổi mã nguồn. Khi @intlayer/analytics đã được cài đặt và editor.clientId được cấu hình, IntlayerProvider sẽ tự động:
- khởi tạo analytics client khi mount,
- ghi lại một
page_viewở lần tải ban đầu, - ghi lại một
page_viewmỗi khi thay đổi ngôn ngữ, - bắt đầu vòng lặp flush ~20 giây và flush mọi sự kiện còn lại khi unmount / đóng tab (thông qua
navigator.sendBeacon, với fallback làfetch(..., { keepalive: true })).
Tự động theo dõi ở cấp độ node
Mỗi khi useIntlayer phân giải một phần nội dung để hiển thị, trình thông dịch sẽ báo cáo một sự kiện content_exposure cho chính xác dictionaryKey + đường dẫn khóa + ngôn ngữ đó — một lần nữa, không cần thay đổi mã. Các lần hiển thị lặp lại của cùng một node trong cùng một cửa sổ flush sẽ được gộp lại thành một sự kiện duy nhất với thuộc tính count, vì vậy một danh sách hiển thị lại (re-render) 50 lần sẽ không gửi 50 sự kiện.
Theo dõi chuyển đổi cho thử nghiệm A/B
Sử dụng useConversion() để quy một mục tiêu cho biến thể mà một phiên đã thấy:
Phân giải biến thể phía client (client-side)
Quyền riêng tư & Hiệu suất
- Ẩn danh theo thiết kế (Anonymous by design): các phiên được xác định bằng một id xoay vòng (rotating id); máy chủ (backend) chỉ lưu trữ mã băm SHA-256 của id đó — không bao giờ lưu trữ id thô và không bao giờ lưu trữ địa chỉ IP.
- Vị trí là tương đối: chỉ có mã quốc gia, bắt nguồn từ các tiêu đề vị trí địa lý của CDN (ví dụ:
cf-ipcountry,x-vercel-ip-country, ...) — không có IP nào được đọc hoặc lưu trữ. - URL loại trừ tham số tìm kiếm (search params) theo mặc định, do đó các chuỗi truy vấn (query strings) không bao giờ bị thu thập.
- Lấy mẫu (Sampling):
sampleRatecho phép bạn chỉ giữ lại một phần nhỏ các sự kiện hiển thị nội dung trên các ứng dụng có lưu lượng truy cập cao. - Xử lý theo batch: một yêu cầu được gửi sau khoảng 20 giây (
flushInterval), hoặc sớm hơn nếu bộ đệm bị đầy (maxBufferSize) — không bao giờ gửi một yêu cầu cho mỗi sự kiện.
Không tốn phí khi không được cài đặt
@intlayer/analytics tuân theo chính xác cùng một mô hình tùy chọn-dependency như @intlayer/editor:
- mọi điểm tích hợp đều tải gói này thông qua việc sử dụng dynamic
import()được bao bọc trong khốitry/catch— một ứng dụng không bao giờ cài đặt@intlayer/analyticssẽ không bao giờ bị tăng kích thước bundle hoặc chi phí thời gian chạy, và không bao giờ thấy lỗi; - một biến môi trường tại thời điểm biên dịch (
INTLAYER_ANALYTICS_ENABLED), được@intlayer/configtự động đặt thành'false'khi gói chưa được cài đặt,analytics.enabledlàfalse, hoặceditor.clientIdchưa được cấu hình, cho phép các bundler loại bỏ toàn bộ tích hợp dưới dạng mã chết (dead-code-eliminate); - analytics bị vô hiệu hóa bên trong iframe xem trước của trình chỉnh sửa / CMS Intlayer, do đó các phiên của trình chỉnh sửa không bao giờ được tính là lưu lượng truy cập thực.
Dashboard: Trang Analytics
Sau khi dự án của bạn đã thu thập các sự kiện, trang Analytics trong Intlayer dashboard (hiển thị ở thanh bên sau khi dự án được chọn) sẽ hiển thị:
- Người dùng đang hoạt động (Active users) — số lượng khách truy cập duy nhất trong khoảng thời gian cuộn (rolling window) đã chọn (7 / 30 / 90 ngày).
- Người dùng hôm nay và người dùng trong 7 ngày qua.
- Lượt xem trang (Page views) trong khoảng thời gian đã chọn.
- Một biểu đồ diễn biến (evolution graph) của số khách truy cập duy nhất hàng ngày.
- Các tab phân tích theo Ngôn ngữ (Locales) và Vị trí (Location), xếp hạng khán giả của bạn theo ngôn ngữ và quốc gia.
Tham khảo API Backend (Backend API reference)
Tất cả các điểm cuối (endpoint) để đọc đều yêu cầu xác thực; việc thu thập dữ liệu (ingestion) là công khai và được quy cho thông qua thuộc tính clientId trong phần body.
Mở bảng trong một cửa sổ bật lên để xem toàn bộ nội dung dữ liệu một cách rõ ràng
| Phương thức | Điểm cuối (Endpoint) | Mô tả |
|---|---|---|
POST | /api/analytics/events | Thu nhận một lô sự kiện (công khai, được gán bởi clientId trong body). |
GET | /api/analytics/overview | Tổng số trang / ngôn ngữ cho dự án đã được xác thực. |
GET | /api/analytics/audience?days=30 | Khách truy cập duy nhất, lượt xem trang, chuỗi ngày, phân tích theo ngôn ngữ + quốc gia. |
GET | /api/analytics/content-stats | Tổng số lượt hiển thị theo mỗi nội dung, được nhóm theo khóa từ điển / đường dẫn khóa / ngôn ngữ. |
GET | /api/analytics/experiments/:experimentKey | Tỷ lệ chuyển đổi cho mỗi biến thể và ý nghĩa thống kê cho một thử nghiệm A/B. |
Bạn cũng có thể gọi các API này theo chương trình thông qua CMS SDK:
Sao chép mã vào clipboard
