assessing-heatmaps
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseAssessing heatmaps
评估热图
A heatmap answers "where do people interact with this page?" — clicks, rage clicks, mouse movement, and how
far down they scroll. The data is pure geometry: (0..1 across the viewport),
(absolute pixels down the page), and a count per spot. It does not know what was clicked. Turning
"lots of clicks at (0.5, 220)" into "lots of clicks on the Pricing nav link" is the whole job, and it comes
from cross-referencing autocapture on the same URL.
pointer_relative_xpointer_y热图用于解答“人们与页面的哪些区域互动?”——包括点击、狂点、鼠标移动以及滚动深度。这些数据是纯粹的几何信息:(视口横向占比0..1)、(页面纵向绝对像素值),以及每个点位的交互次数。热图无法识别点击的对象是什么。将“(0.5, 220)位置有大量点击”转化为“定价导航链接有大量点击”正是核心工作,这需要通过关联同一URL的自动捕获(autocapture)数据来实现。
pointer_relative_xpointer_yCore principle: coordinates + meaning
核心原则:坐标 + 含义
You can't see the page — there is no screenshot in your context. A good assessment fuses two sources and
leans on autocapture to supply the layout/identity you can't see:
- Heatmap data — where interactions land and how far people scroll ().
heatmaps-list - Autocapture — what element sits under the hot spots, by element text / selector on the same page. This is what turns coordinates into meaning; without it you only have dots.
When the user wants to see the heatmap, create a saved heatmap (Step 4) — that renders the page with the
data overlaid for them to open in PostHog. You reason from the data; they look at the picture.
你无法看到页面——上下文里没有截图。一份优质的评估需要融合两类数据源,并借助自动捕获数据来补充你无法看到的页面布局/元素身份:
- 热图数据——互动发生的位置以及用户滚动的深度()。
heatmaps-list - 自动捕获数据——通过同一页面上的元素文本/选择器,确定热门点位下方对应的元素。这是将坐标转化为实际含义的关键;没有它,你只能看到一堆点位。
当用户想要查看热图时,创建一个保存的热图(步骤4)——这会渲染出叠加了数据的页面,供用户在PostHog中打开查看。你基于数据进行分析;用户则查看可视化图片。
The flow
操作流程
Step 1: Pin the page and window
步骤1:锁定页面和窗口
You need an exact (one page) or a (regex, to aggregate across query strings). Confirm
the URL with the user if ambiguous. Default to the last 7 days; widen to 30 if volume is low. Heatmap data is
retained for 90 days.
url_exacturl_pattern你需要精确的(单个页面)或(正则表达式,用于聚合不同查询字符串的页面)。若URL不明确,请与用户确认。默认取最近7天的数据;若数据量较低,可扩大至30天。热图数据的保留期限为90天。
url_exacturl_patternStep 2: Pull the data
步骤2:获取数据
Call once per signal you care about (or query the table directly via SQL — see the
querying-posthog-data skill, ):
heatmaps-listheatmapsmodels-heatmaps- — the primary "what draws attention" map.
type: "click" - — repeated frustrated clicks. The single strongest "something is broken or misleading" signal. Any meaningful rageclick cluster deserves a callout.
type: "rageclick" - — how far people get. Use it to find the fold and spot CTAs that sit below where most people ever scroll.
type: "scrolldepth"
Use when you care about how many people (not how many clicks);
exaggerates a few heavy clickers.
aggregation: "unique_visitors"total_count针对你关注的每个信号调用一次(或直接通过SQL查询表——参考querying-posthog-data技能,):
heatmaps-listheatmapsmodels-heatmaps- ——核心的“哪些内容吸引注意力”热图。
type: "click" - ——重复的受挫点击。这是“某个功能损坏或存在误导”的最强信号。任何有意义的狂点集群都值得重点指出。
type: "rageclick" - ——用户滚动的深度。用于找到折叠线(fold),以及定位那些位于大多数用户滚动范围之外的CTA按钮。
type: "scrolldepth"
当你关注的是参与用户数量(而非点击次数)时,使用;会夸大少数高频点击用户的影响。
aggregation: "unique_visitors"total_countStep 2b: Above the fold — read the fold
summary
fold步骤2b:折叠线以上——解读fold
摘要
foldFor the click types, returns a object alongside :
heatmaps-listfoldresults- — share of non-fixed interactions that landed below the user's initial viewport (they had to scroll to reach them). This is one of the highest-value findings: content people actively click that sits below the fold is a prime candidate to move up.
pct_below_fold - /
below_fold_count— the raw counts behind the percentage (fixed-position elements are excluded, since they're always on screen).total_count - — the typical fold line in CSS pixels, to recommend against.
median_viewport_height
Report it concretely, e.g. "the fold is ~600px for most visitors, yet 35% of clicks land below it, so users
scroll before interacting — that content is a candidate for the first screen." Segment by device with
/ (desktop and mobile have very different folds) and read per
band rather than blending them.
viewport_width_minviewport_width_maxfoldNeed a distribution rather than a single percentage (e.g. clicks bucketed by how far below the fold)? Drop to
SQL on the raw table, which has and in the same scaled units — see the
querying-posthog-data skill, .
heatmapsyviewport_heightmodels-heatmaps对于点击类热图,会在返回的同时返回对象:
heatmaps-listresultsfold- ——非固定交互中落在用户初始视口下方的占比(用户必须滚动才能触及这些区域)。这是最有价值的发现之一:用户主动点击的内容若位于折叠线下方,就是移至上方的优先候选。
pct_below_fold - /
below_fold_count——该百分比背后的原始计数(排除固定位置元素,因为它们始终显示在屏幕上)。total_count - ——大多数用户的典型折叠线位置(CSS像素),可据此给出避免性建议。
median_viewport_height
具体报告示例:“大多数访客的折叠线约为600px,但35%的点击落在折叠线下方,说明用户在互动前会滚动页面——这些内容适合移至首屏。” 按设备分段,使用/(桌面端和移动端的折叠线差异很大),并分别解读每个分段的数据,而非混合分析。
viewport_width_minviewport_width_maxfold若需要分布数据而非单一百分比(例如,按折叠线下方的距离划分点击区间),请直接查询原始表的SQL,该表中的和使用相同的缩放单位——参考querying-posthog-data技能,。
heatmapsyviewport_heightmodels-heatmapsStep 3: Name the hot elements (autocapture overlap)
步骤3:标记热门元素(关联自动捕获数据)
For each notable cluster, find what's actually there. Query autocapture on the same URL — either via the
skill or directly:
exploring-autocapture-eventssql
SELECT properties.$el_text AS text, count() AS clicks
FROM events
WHERE event = '$autocapture'
AND properties.$current_url = 'https://example.com/pricing'
AND timestamp >= now() - INTERVAL 7 DAY
GROUP BY text
ORDER BY clicks DESC
LIMIT 25elements_chain对于每个值得关注的集群,确定实际对应的元素。查询同一URL的自动捕获数据——可通过技能或直接执行以下SQL:
exploring-autocapture-eventssql
SELECT properties.$el_text AS text, count() AS clicks
FROM events
WHERE event = '$autocapture'
AND properties.$current_url = 'https://example.com/pricing'
AND timestamp >= now() - INTERVAL 7 DAY
GROUP BY text
ORDER BY clicks DESC
LIMIT 25当需要区分文本相同的两个元素时,会提供选择器/DOM路径。将自动捕获数据中的热门元素与热图中的热门坐标进行匹配:点击集中在非链接或非按钮的元素上(纯文本、图片、禁用控件)是典型的“用户认为这个元素可点击”的发现。
elements_chainStep 4: Give the user a heatmap to look at (optional)
步骤4:为用户提供可查看的热图(可选)
You can't see the page, but the user can. When a visual would help them follow your findings, create a saved
heatmap so they can open the rendered page with the data overlaid in PostHog:
- with the page
heatmaps-saved-create(type defaults tourl). This enqueues a headless render — it is asynchronous. Passscreenshotmatching the viewport band you analyzed in Step 2.widths - Poll (by the returned
heatmaps-saved-get) untilshort_idisstatus, then tell the user it's ready to view in PostHog.completed
This is for the human's benefit — your own reasoning still comes from the Step 2 data and the Step 3
autocapture identity, not from the picture.
你无法看到页面,但用户可以。当可视化内容有助于用户理解你的分析结果时,创建一个保存的热图,以便用户在PostHog中打开渲染好的叠加数据页面:
- 使用页面调用
url(类型默认为heatmaps-saved-create)。这会触发无头渲染——该过程是异步的。传入与步骤2中分析的视口分段匹配的screenshot参数。widths - 通过返回的轮询
short_id,直到heatmaps-saved-get变为status,然后告知用户热图已可在PostHog中查看。completed
这是为了方便用户——你自身的分析仍基于步骤2的数据和步骤3的自动捕获元素身份,而非可视化图片。
Step 5: Drill into hotspots (when you need the "why")
步骤5:深入分析热门点位(当你需要了解“原因”时)
For a surprising cluster, returns the individual sessions behind specific . Hand the
session IDs to the skill to watch what people actually did.
heatmaps-eventspointsinvestigating-replay对于意外的集群,会返回特定背后的单个会话信息。将会话ID交给技能,查看用户的实际操作过程。
heatmaps-eventspointsinvestigating-replayStep 6: Summarize and recommend
步骤6:总结并提出建议
Produce a short, concrete report:
- What the heatmap shows — top engaged elements, dead zones, scroll reach, and the above/below-the-fold click split (e.g. "viewport is ~600px for most visitors, yet 35% of clicks land below it").
- Problems, ranked by signal strength — rage-click clusters first, then clicks on non-interactive elements, then important CTAs sitting below the scroll cliff, then ignored primary actions.
- Recommendations tied to evidence — move/raise a CTA above the fold, make a clicked-but-dead element a real link, cut competing elements near a rage-click cluster, etc. Every recommendation should cite the signal it came from.
生成一份简短、具体的报告:
- 热图展示的内容——互动最多的元素、无互动区域、滚动范围,以及折叠线上下的点击分布(例如:“大多数访客的视口约为600px,但35%的点击落在折叠线下方”)。
- 问题——按信号强度排序:首先是狂点集群,然后是点击非交互元素,接着是位于滚动终止点下方的重要CTA,最后是被忽略的主要操作按钮。
- 基于证据的建议——将CTA移至折叠线以上、将被点击但无交互的元素改为真实链接、移除狂点集群附近的竞争元素等。每条建议都应注明其依据的信号。
Reading the signals
解读信号
| Signal | Likely meaning | Typical recommendation |
|---|---|---|
| Rage clicks on an element | Broken, slow, or looks-clickable-but-isn't | Fix the handler, add feedback, or make it actually interactive |
| Many clicks on non-link text/image | Users expect it to be clickable | Make it a link/button, or remove the affordance |
| Primary CTA gets few clicks | Buried, low-contrast, or out-competed | Raise it, increase contrast, reduce nearby noise |
| Scroll cliff before key content | Content/CTA is below where people stop | Move it up or add a reason to scroll |
| High % of clicks below the fold | Engaged content sits below the initial viewport — users scroll before interacting | Move the most-clicked elements onto the first screen |
| Hot clicks on nav, cold body | Page isn't delivering; people bail to nav | Re-evaluate the page's core content |
| 信号 | 可能的含义 | 典型建议 |
|---|---|---|
| 元素上出现狂点 | 功能损坏、加载缓慢,或看起来可点击但实际不可点击 | 修复处理程序、添加反馈,或使其真正具备交互性 |
| 非链接文本/图片上有大量点击 | 用户认为该元素可点击 | 将其改为链接/按钮,或移除可点击的视觉提示 |
| 主CTA点击量低 | 位置隐蔽、对比度低,或被其他元素抢占注意力 | 上移位置、提高对比度、减少附近干扰元素 |
| 关键内容前出现滚动终止点 | 内容/CTA位于用户停止滚动的位置下方 | 上移内容,或添加吸引用户滚动的理由 |
| 折叠线下方的点击占比高 | 用户感兴趣的内容位于初始视口下方——用户在互动前会滚动页面 | 将点击量最高的元素移至首屏 |
| 导航栏点击量高,页面主体点击量低 | 页面未满足用户需求,用户转向导航栏 | 重新评估页面的核心内容 |
Gotchas
注意事项
- Heatmaps must be opted in (). If
Team.heatmaps_opt_inreturns nothing for a page that clearly gets traffic, capture may be off or the URL is wrong — check both before concluding "no engagement".heatmaps-list - Coordinates are scaled by a factor of 16 in storage; the API already returns CSS-pixel and relative x, so use the API/tool values directly rather than the raw table columns.
pointer_y - You can't see the screenshot. The saved-heatmap render is for the user to open in PostHog; don't claim to have looked at the page. Ground every layout claim in autocapture identity + coordinates, not vision.
- Saved-heatmap rendering is async. After , poll
heatmaps-saved-createuntilheatmaps-saved-getisstatusbefore telling the user it's viewable. Onlycompleted-type heatmaps render an image;screenshotandiframetypes do not.recording - Mind the viewport. A desktop click map and a mobile one are different pages' worth of behavior — filter
with /
viewport_width_minrather than blending them.viewport_width_max
- 热图需要主动启用()。如果某个明显有流量的页面调用
Team.heatmaps_opt_in返回空数据,可能是捕获功能未开启或URL错误——在得出“无互动”结论前,请检查这两项。heatmaps-list - 坐标在存储时被缩放了16倍;API已返回CSS像素单位的和相对x值,因此直接使用API/工具返回的值即可,无需使用原始表列的数据。
pointer_y - 你无法查看截图。保存的热图渲染是供用户在PostHog中打开查看的;不要声称自己看过页面。所有关于页面布局的结论都必须基于自动捕获元素身份+坐标,而非视觉判断。
- 保存的热图渲染是异步的。调用后,需轮询
heatmaps-saved-create直到heatmaps-saved-get变为status,再告知用户热图已可查看。只有completed类型的热图会渲染图片;screenshot和iframe类型不会。recording - 注意视口差异。桌面端和移动端的点击热图代表的是不同页面的用户行为——使用/
viewport_width_min进行过滤,而非混合分析。viewport_width_max