Community寫作與編輯github.com

使用 Croct 進行個人化與 A/B 測試

用於規劃與實作 Croct 的個人化或 A/B 測試:建立體驗(受眾、插槽、內容、優先級、排程、草稿)、新增實驗(A/B/n、主要目標 ID、流量分配、變體、跨裝置一致性)、配置所需程式碼(插槽、`croct.track('goalCompleted', {goalId})`、`orderPlaced`、`leadGenerated`、`userSignedUp`)、伺服器端功能旗標實驗、重新導向實驗、個人化配方(UTM 活動、ABM、搜尋字詞、地理位置、免運費、興趣、部落格讀者、潛在客戶、客戶、有機意圖、HubSpot 表單),或檢視體驗、實驗、應用程式或工作區儀表板(最佳機率、潛在損失、「實驗進行中」、「建議勝出者」、「無明確勝出者」、「追蹤你的目標」)。常見表述:「為 LinkedIn 訪客個人化英雄區塊」、「對此 CTA 進行 A/B 測試」、「哪個變體勝出?」、「為什麼我的實驗顯示沒有轉換?」。

B 測試 是什麼?

此技能為 AI 代理(如 Claude Code、Cursor、Codex)提供使用 Croct 平台規劃、實作及分析個人化和 A/B 測試實驗的完整指引。它涵蓋了從理解體驗與實驗的核心概念(如受眾、插槽、內容、變體)到逐步執行工作流程(包括在儀表板中設定體驗與實驗、配置前端與後端程式碼,以及解讀實驗結果)的所有內容。該技能強調正確的程式碼配置是配置的基礎,並詳細說明需要追蹤的關鍵事件(如 `goalCompleted`、`orderPlaced`)以及如何為受眾編寫 CQL 條件。此外,它還提供了一系列針對常見行銷場景(如 UTM 活動、ABM、地理位置定位)的「配方」捷徑,並明確指出應避免的常見錯誤,例如在實驗中途更改分配或宣告尚未穩定的實驗勝出者。此技能包含指標解釋,可根據機率閾值(如最佳機率 > 95%)採取行動。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/croct-tech/agent-skills/tree/HEAD/skills/croct-personalize-and-test

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

使用 Croct 進行個人化與測試

行銷人員在儀表板 (app.croct.com) 中管理體驗與實驗。你作為代理的任務是:

  1. 規劃:將使用者的目標轉化為體驗(對象 / 位置 / 內容),並在他們需要驗證時,轉化為實驗(假設、目標、分配、變體)。
  2. 配置程式碼:確保每個目標區域都是一個插槽,轉換被追蹤為 goalCompleted 事件,並且受眾所需的資料已被收集。
  3. 編寫受眾:一個 CQL 條件。對於此處配方以外的語法,請載入 croct-cql 技能。
  4. 解讀結果:根據文件記錄的閾值讀取儀表板;絕不能宣告儀表板不支援的勝出者。

不要告訴使用者啟動、更改或結束實驗需要更改程式碼。一旦插槽和目標存在,其他一切都是配置。

心智模型

概念它是什麼規則
體驗在一個或多個插槽中向受眾顯示的內容由對象(受眾)、位置(插槽)、內容(內容)定義。允許多個受眾;使用內容群組為每個受眾提供其專屬內容。
受眾根據使用者當前上下文評估的 CQL 條件可以鎖定所有使用者或一個狹窄的區隔。
優先級每個體驗的獨特排名當受眾在同一插槽上重疊時,優先級較高的體驗獲勝。沒有平手。
實驗體驗內部的 A/B/n 測試每次在一個體驗中只能有一個。繼承該體驗的受眾和插槽。2 到 5 個變體。
主要目標 ID實驗所要優化的轉換必須與被追蹤的 goalCompleted 事件的 goalId 相符。
流量分配進入實驗的合格使用者百分比其餘使用者看到體驗內容。

誰能看到給定插槽的內容:

使用者看到
不在任何體驗的受眾中插槽預設內容
在受眾中,但未被分配到實驗體驗內容
在受眾中且被分配到實驗所分配變體的內容
在同一插槽上符合多個體驗優先級最高的那個

分配是確定性的:訪客 ID 與實驗金鑰一起進行雜湊處理,因此重新載入絕不會改變變體。曝光度會自動追蹤。對於已識別的使用者,使用者 ID 即為分配金鑰,因此變體可以跨裝置跟隨他們(匿名使用者無法做到)。

決定要建置什麼

使用者想要...建置
為已知區隔提供不同內容體驗 + 受眾,無實驗
在全面推出前證明某項變更有效體驗(通常是「所有使用者」)+ 實驗
測試文案、圖片、版面或某個區塊插槽上的內容實驗(單一 URL,盡可能伺服器端渲染)
測試連結的目標位置CTA 實驗:插槽存放連結目的地
顯示或隱藏元素(促銷橫幅)僅針對開發者擁有的固定邏輯使用程式碼端的 evaluate/useEvaluation;否則使用帶有布林屬性的插槽加上體驗,讓行銷人員控制誰能看到。請參閱 croct-integrate-sdk 技能的評估規則
測試功能或流程,而非可見內容功能旗標實驗:帶有布林屬性的插槽,在伺服器端進行分支
測試兩個真正不同的頁面(重建的頁面、其他模板、另一個工具的著陸頁)重新導向實驗。當只有內容不同時,優先使用內容實驗
在一個活動中包含多個閾值或區隔(按州別提供免運費)一個體驗、多個受眾、內容群組
需要在設定時間啟動、暫停或恢復的活動排程(附加功能),可選用受眾的時區

實作檢查清單

每個體驗或實驗在配置之前,都需要在程式碼中完成以下事項:

  • 每個變更區域都有一個插槽。 如果缺少:執行 npx croct@latest add slot <slot-id>@1 並使用 SDK 渲染它(請參閱 croct-use-cli 和 croct-integrate-sdk 技能)。沒有插槽,就無法透過體驗變更該區域。
  • 轉換的 goalCompleted 事件(實驗必備)。目標 ID 必須等於實驗的主要目標 ID。如果目標是新的,請在啟動實驗之前部署它。
  • 在相關時使用更豐富的轉換事件:orderPlaced、leadGenerated、userSignedUp 會在目標旁邊填入收入、潛在客戶和註冊小工具。
  • 受眾需要讀取的資料。 UTM 參數、地理位置和會話資料是自動的;基於貼文、興趣、訂單、潛在客戶或註冊的配方需要追蹤這些事件(請參閱 croct-track-events 技能)。
  • 使用者識別(如果變體需要跨裝置保持一致)。

追蹤目標

// components/HomeHero.tsx (React; @croct/plug-next 完全相同,需加上 'use client')
import type {ReactElement} from 'react';
import {useContent, useCroct} from '@croct/plug-react';

export function HomeHero(): ReactElement {
  const {content} = useContent('home-hero@1');
  const croct = useCroct();

  function handleClick(): void {
    croct.track('goalCompleted', {
      goalId: 'hero-cta-click',
    });
  }

  return (
    <div>
      <h1>{content.title}</h1>
      <p>{content.subtitle}</p>
      <a href={content.button.link} onClick={handleClick}>{content.button.label}</a>
    </div>
  );
}
// 純 JavaScript
import croct from '@croct/plug';

croct.track('goalCompleted', {goalId: 'sign-up'});

該事件也接受可選的 value 和 currency(例如 {goalId: 'signup', currency: 'USD', value: 50})。在伺服器端渲染的 PHP 技術棧中,使用模板輔助函式在瀏覽器中追蹤(Blade 中使用 @croct ... @endcroct,Twig 中使用 {% apply croct %} ... {% endapply %})。

在轉換實際發生的地方追蹤目標,也就是在瀏覽器中。對於重新導向實驗,請在兩個頁面上都進行追蹤。當轉換僅在伺服器端完成時(付款 Webhook、後端註冊),請使用來自 @croct/plug/api 的 JavaScript SDK 獨立 track 方法,並帶上 API 金鑰:其文件範例正是從伺服器或沙盒腳本發送的 goalCompleted 事件(請參閱 croct-track-events 技能)。它接受一個可選的 userToken;文件沒有說明未帶 userToken 發送的事件如何歸因於實驗。

體驗工作流程(儀表板)

向使用者轉達這些步驟;你無法親自點擊它們。

  1. 前往體驗頁面 > 新增體驗,為其命名。
  2. 受眾分頁 > 新增受眾 > 貼上 CQL 條件。允許設定多個受眾。
  3. 插槽分頁 > 選擇一個或多個插槽(為了保持一致的使用者體驗,可以跨頁面組合插槽)。
  4. 內容分頁 > 編輯每個插槽的內容(以及當受眾不同時,編輯每個內容群組的內容)。
  5. 可選的實驗分頁(見下文)。
  6. 檢視草稿變更,然後發布(或排程)— 或者先預覽。

在開發期間,像 property welcome of page's query is "true" 這樣的受眾允許使用者透過 ?welcome=true 來切換體驗。在生產環境中,請將其替換為真正的受眾。

關於狀態、優先級、排程、草稿變更和內容的詳細資訊:references/experiences.md。

實驗工作流程

  1. 編寫假設:變更的內容、它影響的指標以及原因。
  2. 選擇主要目標 ID(儀表板會建議已經被追蹤的 ID)。確認它確實會觸發。
  3. 設定流量分配。對於狹窄的受眾,使用 100%。在整個測試過程中保持穩定。
  4. 建立 2 到 5 個變體,其中一個通常是對照組。變體可以複製插槽內容或繼承體驗內容,而不是複製它。
  5. 設定每個變體的內容(以及內容群組,如果需要)。
  6. 如果使用者已被識別且應保留其變體,則啟用跨裝置一致性。
  7. 預覽每個變體,發布,然後驗證:每個變體的會話數與分割比例相符,並且測試轉換會出現在正確的目標下。

絕不要在測試中途更改流量分配或新增/移除變體;這樣做可能會使結果無效。

有關詳細資訊、功能旗標和重新導向,請參閱:references/experiments.md 和 references/flag-and-redirect-experiments.md。

解讀結果

實驗儀表板頂部會顯示一個標誌。根據以下規則採取行動:

標誌意義行動
追蹤你的目標未記錄到目標完成事件修正追蹤問題;其他指標均無意義
實驗進行中尚未穩定等待。穩定需要每個變體 ≥ 1,000 名訪客、每個變體 ≥ 25 次轉換,並且運行 ≥ 1 週
建議勝出者已穩定,且某個變體的 PBB > 95% 且潛在損失 < 0.1%將勝出的內容套用到體驗,並停止實驗
無明確勝出者已穩定,但變體間差異太小不選出勝出者即結束實驗,或測試新的假設

在讀取任何指標之前,請先檢查每個變體的會話數是否與配置的分割比例相符。持續的不平衡表示分配或記錄遺失了某一類使用者。

最佳機率 (PBB) 和潛在損失來自使用每個變體的 Beta 分佈和蒙地卡羅模擬的貝氏推理,即時計算,無需抽樣。說明、公式和每個儀表板小工具:references/analytics.md。

配方

精簡的戰術手冊(ABM、部落格讀者、客戶、免運費、HubSpot 表單、興趣、潛在客戶、地理位置、行銷活動、有機意圖、搜尋字詞),每個都包含其受眾 CQL、必要的先決追蹤條件以及建議的插槽:references/playbooks.md。

注意事項

  • 務必在發布實驗之前實作並驗證目標事件。沒有它,實驗只會收集曝光次數,而不會有轉換。
  • 務必對狹窄的受眾分配 100% 流量,以便測試能達到統計顯著性。
  • 務必優先使用帶有插槽驅動內容的單一 URL,而非重新導向;重新導向會增加頁面載入時間並使結果產生偏差。
  • 務必保持重新導向為臨時性(302/307)並防止循環。
  • 務必在測試結束後從程式碼中移除過時的功能旗標插槽。
  • 絕不要在儀表板顯示「實驗進行中」時宣告勝出者,或僅根據原始計數(總訂單數、總註冊數)來宣告。
  • 絕不要在測試中途編輯分配或變體清單。
  • 絕不要期望匿名使用者能有跨裝置一致性;這需要已識別的使用者。
  • 絕不要重新導向到不同的網域:訪客是按網域識別的,因此轉換永遠不會被歸因。對於子網域,請先共用會話。
  • 絕不要完全預渲染或快取渲染實驗插槽的頁面;這樣會導致所有人看到同一個快取的變體。

即時文件

  • 索引:https://docs.croct.com/llms.txt
  • 任何頁面的 Markdown 格式:附加 .md,例如 https://docs.croct.com/explanation/experiment.md
  • 搜尋:https://docs.croct.com/api/search.md?term=<terms>

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

croct-tech/agent-skills

>- Use when writing, reading, reviewing, or debugging Croct's Contextual Query Language (CQL): audience criteria, `croct.evaluate()` / `useEvaluation` / `<Personalization query>` / Next.js `cql` tag queries, Evaluation API `query` bodies (`/client/web/evaluate`, `/external/web/evaluate`), and dynamic content values (`"type": "dynamic"`, `"expression"`). Covers context variables (user, session, page, location, campaign, cart, device, browser, context, now/today), data types and conversions, accessors and selectors (`'s`, `property X of`, `[1st]`, `[*]`, `[...]`), tests (`is`, `matches`, `is like`, `contains either`, `is between`, `is defined`, `is returning`), quantifiers (`some ... satisfies`), macros, modifiers, event expressions (`user has viewed a page`, `user has abandoned a cart`, `user has completed goal`), audience estimation, and recipes. Triggers: "write an audience", "target mobile users in New York", "CQL syntax error", "audience never matches", "unavailable estimate".

croct-tech/agent-skills

>- Use when connecting Croct to a third-party platform or migrating to Croct from another personalization or experimentation tool. Covers Storyblok (Optimize by Croct app, @croct/plug-storyblok, Storyblok withCroct, resolveContent, croct/plug-storyblok, CroctStoriesApi), Sanity and Strapi (slot fallback, dynamic zones, metadata.contentSource), Shopify Hydrogen storefront events, Shopify custom pixel (croctPixel, PUBLIC_CROCT_SHOPIFY_PIXEL, checkout and order tracking), VTEX, Google Tag Manager data layer, Microsoft Clarity tags, HubSpot forms (hbspt.forms.create, hs-form-event), firmographic providers 6sense, Demandbase, Clearbit Reveal, and ZoomInfo WebSights (firmographics attributes, account-based audiences in CQL), and migrations from Mutiny and Ninetailed (Experience component, Contentful sunset). Triggers include cdn.croct.io/plug-integration scripts, "personalize Storyblok blocks", "track Shopify checkout", "send VTEX events", "ABM personalization", "replace Mutiny".

croct-tech/agent-skills

>- Use when installing or using a Croct SDK in application code: rendering slot content, evaluating CQL queries, server or client fetching, prerendering, identifying users, app ID / API key env vars, testing, or debugging. Covers JavaScript (`@croct/plug`, `croct.fetch`, `croct.evaluate`), React (`@croct/plug-react`, `<CroctProvider>`, `useContent`, `<Slot>`, `useEvaluation`, `useCroct`), Next.js (`@croct/plug-next`, `fetchContent`, `cql`, middleware/proxy, `NEXT_PUBLIC_CROCT_APP_ID`, `CROCT_API_KEY`), Vue (`@croct/plug-vue`), Nuxt (`@croct/plug-nuxt`), Shopify Hydrogen (`@croct/plug-hydrogen`), PHP (`croct/plug-php`), Laravel, Symfony, and Drupal. Triggers: slot IDs like `home-hero@1`, `SlotContent`, "Croct is not plugged in", "initial content is required for server-side rendering", "Did you forget to configure Croct's middleware?", CORS errors.

croct-tech/agent-skills

>- Use when designing or changing Croct content models: regular vs union components, what becomes a component, slot, structure, or primitive attribute; writing component schema JSON (`structure`, `union`, `reference`, `text`, `number`, `boolean`, `list`, `@croct/file`, `@croct/richText` rich text, `format`, `choices`, `optional`, `private`, `position`); writing content definition JSON (`static`/`dynamic` values, `nullable`, `default`, `{{placeholder}}` paths); slot default, localized, experience, experiment, or content group content; schema limit errors (30 attributes, 6 nesting levels, 10 union members, complexity score 50); component versioning and breaking changes (`home-hero@2`); refactoring (duplicate and modify, duplicate and replace, flatten and merge); Markdown in text attributes with `@croct/md-lite`. Phrasings: "model content for a hero", "add an attribute to the banner component", "support variations", "component is too complex", "localize the hero", "translations", `preferredLocale`.

相關技能