On this page
MSO Cloud provisions an org on ONE axis. This document is the measurement model for the Marketing axis (marketing-analytics blueprint): what such an org is asked to prove, what mature marketing BI measures, where this platform stands against it, and what ships next.
Every gap below is stated against the connectors a Marketing org actually runs — a capability no connector can feed is not a gap, it is a different product.
The axis, and why its measurement differs#
A Marketing org sells through a pipeline, not a cart. Its connectors are Google Analytics 4, Google Search Console, Google Ads, Meta Ads, LinkedIn Page, Brevo (email), Google Sheets, and the sheet-backed SocialHeat / SocialTrend feeds. There is no marketplace plane: the marketing-analytics blueprint disables every marketplace connector, and every commerce surface declares requiresConnectorFamily: 'marketplace' so the sidebar derives its own absence.
The consequence for measurement. Revenue does not land in this org's data at the moment of conversion; a form fill does. So the efficiency ladder is
CPM → CPC → cost per conversion → cost per lead → cost per MQL → CAC
and not ROAS. ROAS divides a monetary conversion value by spend, and a lead-generation ad account does not assign monetary value to a form fill — Google Ads returns conversions_value equal to the conversion COUNT when every conversion action carries the default value of 1. Dividing that by spend prints 0,00× on a healthy account. A ROAS column on a Marketing-axis surface is a wrong number, not a missing one.
The six questions marketing BI answers#
Each is a question a marketing lead is asked in a review, not a feature name.
1. Is the funnel converting, and where does it leak?
Impressions → clicks → sessions → engaged sessions → conversions → MQL → SQL → opportunity → won, each stage with its conversion rate to the next and its velocity (median days in stage). The leak is the stage whose rate moved, and velocity is what separates "fewer leads" from "the same leads, stuck".
2. Which channel deserves the next dong?
Spend, cost per outcome and outcome volume side by side per channel, with the outcome defined ONCE for the org. An attribution-model comparison — first touch vs last touch vs position-based — is what stops a channel that looks worthless on last-touch from being cut when it starts every journey.
3. Is the plan on track, and where will it land?
Budget vs actual, plus the projection: at today's run rate, what does period-end spend and outcome attainment look like, and which line misses.
4. Is owned demand growing?
Organic sessions, Search Console clicks/impressions/position, and the two readings that turn a keyword table into work: striking distance (queries ranked 11–20, one push from page one) and decay (pages whose clicks fell while impressions held — the content aged, the demand did not).
5. Are we visible where people now ask?
Discovery moved to answer engines. The reading is how much traffic generative engines send, which engines, and the direction of travel. No vendor can report citations from inside an assistant; a site's own analytics is the only first-party evidence, and the surface has to say so.
6. Does the audience still believe us?
Share of voice, sentiment and topic movement against competitors — the block SocialHeat feeds.
Where MSO Cloud stands#
| Block | State on the Marketing axis |
|---|---|
| 1 — Funnel & leak | Partial. Every stage exists on its own page (ads, website, Lead CRM, Lead Marketing); no single view puts them in one column with stage rates, and no velocity reading exists. |
| 2 — Channel decision | Partial. Spend, clicks and cost per click are per channel and correct. Cost per lead exists on the overview. Attribution is last-touch only, via utm_campaign on the lead. |
| 3 — Plan & landing point | Shipped. Budget ↔ Measurement, per-channel pacing, plan vs actual, time-progress. Projection to period end is not drawn. |
| 4 — Owned demand | Partial. Search Console clicks/impressions/CTR/position and top queries ship. Striking-distance and decay are not derived. |
| 5 — Answer-engine visibility | Shipped 2026-08-27 — "Tìm kiếm AI". |
| 6 — Audience belief | Not integrated. SocialHeat data exists outside the platform; the connector is enabled, the ingest is not built. |
Decisions#
D1 — Answer-engine visibility is a first-class marketing surface, read from GA4 referrals. An assistant's citation reaches this platform as a referral from the assistant's own host, and as nothing else. The page classifies on the HOST (@yng/metrics/ai-search-engines), never on the medium: one assistant arrives under several mediums — one tenant's ChatGPT traffic came in under five — and splitting on the medium reports one engine as several channels. The engine list is an explicit host registry, reviewable as a product claim, never a regex over "ai" or "chat".
D2 — The surface reports sessions, not a visibility score. It states traffic answer engines sent, their share of all sessions, and the trend. It does not model citations, prompt rank or an "AI visibility index": no connector observes those, and a number nothing measures is the fabricated metric the product refuses everywhere else (§32/§35). The page prints that limit rather than implying coverage it does not have.
D3 — The window is a MONTH control, not a day range. GA4 stores traffic sources at month grain, so a day picker would accept a window the data cannot answer. The page owns its picker (§71) and offers only windows the data serves.
D4 — ROAS is not a Marketing-axis metric. The ladder is cost-per-outcome. Where a lead-generation account reports a conversion value that is not money, the honest render is an abstention, not 0,00×.
15 màn hình con#
Mỗi màn hình dưới đây nằm trong nhóm menu Hiệu quả marketing và tự gọi requirePlugin('marketing-performance') + requirePageMenuItem, nên vào thẳng URL cũng bị chặn như vào từ sidebar.
Quảng cáo — /marketing-performance/ads
Phân bổ chi tiêu quảng cáo theo từng nền tảng và từng chiến dịch. Chi tiêu là số liệu DUY NHẤT cộng dồn được; chuyển đổi, giá trị chuyển đổi và ROAS là số mỗi nền tảng tự ghi nhận qua pixel riêng, hiển thị theo dòng và không cộng gộp giữa các nền tảng (ADR 0008 D5) — phần chú thích trên trang nói rõ điều này. Trang có so sánh kiểu Google Analytics qua ?compare=1, lọc theo nền tảng quảng cáo, và hiển thị luôn tiến độ ngân sách đã xác nhận ở Ngân sách ↔ Đo lường cho từng kênh mà không phải rời sang trang khác.
Ngân sách & KPI — /marketing-performance/kpi
Kế hoạch ngân sách và mục tiêu năm (MQL, người dùng website) đọc cùng thực tế luỹ kế từ đầu năm và tiến độ thời gian đã trôi trong năm. Cửa sổ cố định 1/1 đến hôm qua theo giờ ICT — nguồn CRM và GA trễ một ngày — nên trang không có bộ chọn kỳ, chỉ có một chip nêu đúng khoảng ngày đã tính (01/01 – <ngày>), tránh tình trạng hai trang cùng nói "tính đến" nhưng lệch nhau một ngày. Sửa mục tiêu dành cho chủ sở hữu và quản trị viên tổ chức trở lên.
Ngân sách ↔ Đo lường — /marketing-performance/plan-bindings
Cổng xác nhận đo lường (ADR 0021): một dòng ngân sách chỉ sinh ra số liệu thực tế sau khi chủ sở hữu hoặc quản trị viên tổ chức xác nhận dòng đó đo bằng nguồn số liệu nào; dòng chưa xác nhận báo "chưa đo được" thay vì đoán ra một con số. Hệ thống tự nhận diện và đề xuất nguồn đo từ tên dòng ngân sách, người có quyền duyệt hoặc bỏ qua từng đề xuất. Vì thao tác ở đây quyết định con số nào các trang khác — kể cả trợ lý AI — được phép trình bày, chỉ chủ sở hữu, quản trị viên tổ chức và super admin vào được; super admin còn xuất bản/quay lui được cả khi tổ chức chưa có quyền. Tiến độ ở trang này tính đến HÔM NAY theo giờ ICT, sớm hơn mốc "tính đến" của trang Ngân sách & KPI một ngày.
Website & Tìm kiếm — /marketing-performance/web-search
Tổng quan sức khoẻ kênh sở hữu, gộp GA4 (web_analytics_daily) và Google Search Console (search_console_*) trên cùng một trang. Mỗi khối tự xác định trạng thái theo connector của mình: connector chưa có dòng nào trong kỳ hiện trạng thái trống thay vì in ra số 0 giả. Trang không có bộ lọc nền tảng vì cả GA4 lẫn Search Console đều không mang chiều nền tảng bán hàng.
Website — /marketing-performance/website
Tổng quan lưu lượng sở hữu từ GA4. Lượt xem và số phiên đọc từ bảng theo ngày (cộng dồn được); số người dùng riêng biệt đọc từ dòng kỳ GA4 tự tính, vì GA4 đếm người dùng là số đếm riêng biệt, không cộng dồn được qua các ngày. Có bộ chọn kỳ và lọc theo property riêng của khu vực Hiệu quả marketing (không dùng bộ lọc báo cáo chung).
Tương tác website — /marketing-performance/engagement
Độ sâu tương tác của người dùng trên website: tỷ lệ tương tác, tỷ lệ thoát, thời lượng phiên trung bình, cắt theo tên miền và trang đích, kèm một lát cắt riêng cho tìm kiếm tự nhiên. Tỷ lệ tính theo trọng số phiên bằng số nguyên, không làm tròn qua trung gian. Dùng chung kỳ và bộ lọc property với trang Website.
Người dùng theo tháng — /marketing-performance/monthly-users
Người dùng GA4 theo từng tháng, xem một property mỗi lần (mặc định younetmedia). Năm hiển thị suy ra từ điểm cuối của kỳ đang chọn. Số đầu năm đọc từ dòng kỳ năm/YTD mà GA4 tự tính, không phải tổng các tháng cộng lại, và so sánh cùng kỳ năm trước cũng theo đúng logic đó — hai khoảng lệch độ dài (ví dụ năm nay mới tính đến tháng 8, năm trước đã trọn năm) thì trang báo rõ chưa so sánh được thay vì chia hai số không cùng gốc.
SEO theo tháng — /marketing-performance/seo-monthly
Báo cáo SEO theo tháng cho một tập property cố định (younetmedia + socialheatg3) cộng gộp, đối chiếu toàn bộ lưu lượng với lưu lượng tìm kiếm tự nhiên. Trang không có bộ chọn kỳ: số liệu neo theo năm dương lịch — năm trước lấy trọn năm, năm hiện tại tính từ đầu năm — vì người dùng GA4 là số đếm riêng biệt, không cộng dồn được theo tháng, nên một khoảng ngày tuỳ ý không thể tổng hợp ra từ các dòng tháng; mọi khoảng ngày trong năm trước đây từng cho ra cùng một con số dưới một bộ chọn kỳ tưởng như có tác dụng. Tổng năm đọc từ dòng kỳ năm/YTD kèm chú thích cho biết đó không phải tổng các tháng.
Search Console — /marketing-performance/search-console
Lượt nhấp, lượt hiển thị và vị trí trung bình từ Google Search Console, ở ba mức: toàn site theo ngày/tháng, theo từng truy vấn tìm kiếm, theo từng trang. Mặc định từ đầu năm đến hôm qua theo giờ ICT; vào trang không kèm tham số kỳ sẽ tự chuyển hướng để gắn khoảng đó vào URL, nên bộ chọn kỳ và số liệu luôn nói cùng một khoảng thay vì hiển thị lệch nhau. Tổng theo truy vấn và theo trang nhỏ hơn tổng toàn site vì Google lọc bớt một số truy vấn vì quyền riêng tư — trang nêu rõ khác biệt này bằng một ghi chú thay vì để hai con số ngầm mâu thuẫn.
Tìm kiếm AI — /marketing-performance/ai-search
Mức độ công cụ tìm kiếm AI (GEO — generative engine optimization) đưa khách đến website, đọc từ referral GA4 và phân loại theo HOST của công cụ (danh sách khai báo ở packages/metrics/src/ai-search-engines.ts), không phân loại theo medium vì một công cụ có thể vào dưới nhiều medium khác nhau. Trang báo số phiên các công cụ AI gửi tới, tỷ lệ trên tổng phiên và xu hướng theo thời gian; không suy ra điểm "độ hiển thị" hay thứ hạng trích dẫn, vì không connector nào trên nền tảng đo được việc một công cụ AI có trích dẫn trang hay không — phân tích của chính website là bằng chứng duy nhất có được. Cửa sổ là mốc THÁNG, không phải khoảng ngày tuỳ ý, vì GA4 lưu nguồn lưu lượng ở mức tháng.
Lead CRM — /marketing-performance/leads
Lead đã vào CRM và chưa bị đánh dấu rác — tập hợp MQL. Lọc theo đội phụ trách và theo nguồn (UTM source); kỳ mặc định là tháng hiện tại tính đến hôm nay theo giờ ICT. Thông tin liên hệ ẩn theo mặc định, bấm để hiện.
Lead Marketing — /marketing-performance/lead-marketing
Toàn bộ phản hồi marketing có gắn tham số chiến dịch, kể cả lead bị đánh dấu rác — một tập hợp khác với Lead CRM, không phải tập con hay superset của nó. Lọc theo chiến dịch; khi lead trong kỳ không gắn tham số chiến dịch nào, biểu đồ phân bổ theo chiến dịch nêu rõ lý do trống thay vì để lại một con số trơ ở giữa vòng tròn.
Mạng xã hội — /marketing-performance/social
Kết quả trang Facebook và LinkedIn sở hữu: lượt hiển thị, lượt nhấp, lượt xem, tương tác nội dung, lượt ghé trang, người theo dõi mới tách tự nhiên/trả phí, cùng danh sách bài đăng có thể sắp xếp và tìm kiếm. Mặc định 13 tháng gần nhất tính đến hôm qua theo giờ ICT.
Email — /marketing-performance/email
Hiệu quả email chiến dịch (Brevo là nguồn đầu tiên) và email giao dịch, tách hai tab. Mặc định từ đầu tháng hiện tại đến hôm nay theo giờ ICT. Vì Brevo chỉ xuất số trọn đời cho mỗi chiến dịch chứ không xuất theo ngày, bộ lọc kỳ chọn chiến dịch theo ngày gửi còn các số đếm (mở, nhấp, huỷ đăng ký) luôn tính đến lần đồng bộ gần nhất — trang nói rõ mốc này trong phần chú thích của bảng thay vì để hai cách hiểu về cùng một cột.
Chiến dịch — /marketing-performance/campaigns
Danh sách mọi chiến dịch media từng chạy. Mỗi chiến dịch được nhận diện qua một tập id bên ngoài đã đăng ký trong hệ thống, không còn so khớp gần đúng theo tên; ngân sách và cửa sổ ngân sách lấy từ dòng KPI gắn với chiến dịch đó nếu có. Trang không có bộ chọn kỳ vì mỗi dòng trong danh sách mang cửa sổ thời gian riêng của chiến dịch đó — vị trí kỳ trên đầu trang nêu rõ "Toàn bộ lịch sử" thay vì để trống bên cạnh các trang khác đều có kỳ.