您可以使用 JavaScript 跟踪客户端来跟踪任何支持 JavaScript 的应用程序:例如网站!
本指南将解释如何使用 JavaScript 跟踪客户端来自定义在 Matomo(以前称为 Piwik)中记录某些 Web 分析数据的方式。
查找 Matomo 跟踪代码
要使用本页描述的所有功能,您需要使用最新版本的跟踪代码。要查找您网站的跟踪代码,请按照以下步骤操作:
- 使用您的管理员或超级用户帐户登录 Matomo
- 单击右上角菜单中的“管理”(齿轮图标)
- 单击左侧菜单中的“跟踪代码”(在“可衡量”或“网站”菜单下)
- 单击“JavaScript 跟踪”部分
- 选择您要跟踪的网站
- 将 JavaScript 跟踪代码复制并粘贴到您的页面中,紧接在开始<body>标记之后(或在该<head>部分内)
跟踪代码如下所示:
代码语言:javascript复制<!-- Matomo -->
<script type="text/javascript">
var _paq = window._paq = window._paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//{$MATOMO_URL}/";
_paq.push(['setTrackerUrl', u 'matomo.php']);
_paq.push(['setSiteId', {$IDSITE}]);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.src=u 'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
在您的跟踪代码中,{MATOMO_URL}将替换为您的 Matomo URL,并将{IDSITE}替换为您在 Matomo 中跟踪的网站的 idsite。
对于熟悉 JavaScript 的人来说,这段代码可能看起来有点奇怪,但这是因为它是异步运行的。换句话说,浏览器不会等待matomo.js文件下载后才能显示您的页面。
对于异步跟踪,配置和跟踪调用被推送到全局_paq数组上执行,独立于matomo.js. 格式为:
代码语言:javascript复制_paq.push([ 'API_method_name', parameter_list ]);
您还可以推送要执行的函数。例如:
代码语言:javascript复制var visitor_id;
_paq.push([ function() { visitor_id = this.getVisitorId(); }]);
或者例如,使用异步代码获取自定义变量(名称、值):
代码语言:javascript复制_paq.push(['setCustomVariable','1','VisitorType','Member']);
_paq.push([ function() { var customVariable = this.getCustomVariable(1); }]);
_paq即使matomo.js文件已加载并运行,您也可以推送到数组。
如果您的 Matomo 跟踪代码与此代码不同,则您可能使用的是已弃用的版本。旧版本仍然可以按预期工作,并且会跟踪您的访问者,但我们强烈建议您更新页面以使用最新的跟踪代码。
要求
支持的浏览器
JavaScript 跟踪器可在所有支持JSONAPI 的浏览器上运行。这包括 IE8 及更高版本。单击此处查看支持的浏览器的完整列表。。如果您需要支持 IE7 及更早版本,那么您可以加载可用的填充,window.JSON例如JSON3。需要在加载 Matomo JS 跟踪器之前加载这个 polyfill。
已知的不兼容问题
- 原型 js 库会覆盖浏览器的 JSON API 并导致问题,例如自定义变量会导致错误(请参阅#16596)。解决方法是删除原型 JS 库或手动覆盖 JSON 对象(参见上文,例如使用 JSON3)。
JavaScript 跟踪器功能
自定义页面标题
默认情况下,Matomo 使用 HTML 页面的标题来跟踪页面标题,您可以使用以下函数对其进行自定义setDocumentTitle:
代码语言:javascript复制_paq.push(['setDocumentTitle', document.title]);
_paq.push(['trackPageView']);
如果您在同一网站中跟踪多个子域,您可能希望您的页面标题以子域为前缀,以便您轻松查看每个子域的流量和数据。您可以简单地这样做:
代码语言:javascript复制_paq.push(['setDocumentTitle', document.domain "/" document.title]);
_paq.push(['trackPageView']);
高级用户还可以动态生成页面名称,例如使用 PHP:
代码语言:javascript复制_paq.push(['setDocumentTitle', "<?php echo $myPageTitle ?>"]);
_paq.push(['trackPageView']);
自定义页面网址
默认情况下,Matomo 使用当前页面的 URL 作为报告中的页面 URL。您可以使用该功能自定义要跟踪的页面 URL setCustomUrl,请在常见问题解答中了解更多信息如何使用 Matomo Javascript 跟踪器设置自定义 URL?
手动触发事件
默认情况下,当 JavaScript 跟踪代码在每个页面视图上加载和执行时,Matomo 会跟踪页面视图。
然而,在现代 Web 应用程序中,用户交互不一定涉及加载新页面。例如,当用户单击 JavaScript 链接、单击选项卡(触发 JS 事件)或与用户界面元素交互时,您仍然可以跟踪与 Matomo 的这些交互。
要跟踪任何用户交互或与 Matomo 的点击,您可以手动调用 JavaScript 函数trackEvent()。例如,如果您想跟踪 JavaScript 菜单上的点击,您可以编写:
代码语言:javascript复制<a href="#" onclick="_paq.push(['trackEvent', 'Menu', 'Freedom']);">Freedom page</a>
您可以在用户指南中了解有关跟踪事件的更多信息。
手动触发目标转化
默认情况下,Matomo 中的目标被定义为 URL 的“匹配”部分(以开头、包含或正则表达式匹配)。您还可以跟踪给定页面浏览量、下载量或外链点击量的目标。
在某些情况下,您可能希望注册其他类型操作的转换,例如:
- 当用户提交表单时
- 当用户在页面上停留超过给定时间时
- 当用户在 Flash 应用程序中进行某些交互时
- 当用户提交购物车并完成付款时:您可以将 Matomo 跟踪代码提供给付款网站,该网站随后会将转化以及转化的自定义收入注册到您的 Matomo 数据库中
要触发目标转化:
代码语言:javascript复制// logs a conversion for goal 1
_paq.push(['trackGoal', 1]);
您还可以通过自定义收入注册此目标的转化。例如,您可以动态生成调用trackGoal()来设置交易的收入:
代码语言:javascript复制// logs a conversion for goal 1 with the custom revenue set
_paq.push(['trackGoal', 1, <?php echo $cart->getCartValue(); ?>]);
在跟踪目标文档中查找有关 Matomo 目标跟踪的更多信息。
准确测量每个页面花费的时间
默认情况下,当用户在访问期间仅访问一次页面视图时,Matomo 会假设访问者在网站上停留了 0 秒。这会产生一些后果:
- 当访问者只浏览一页时,“访问时长”将为0秒。
- 当访问者查看多个页面时,访问的最后一个页面视图的“页面停留时间”将为 0 秒。
可以配置 Matomo,使其准确测量访问所花费的时间。为了更好地衡量访问所花费的时间,请将以下内容添加到您的 JavaScript 代码中:
代码语言:javascript复制// accurately measure the time spent in the visit
_paq.push(['enableHeartBeatTimer']);
然后,只要用户正在主动查看页面(即当选项卡处于活动状态并处于焦点状态时),Matomo 就会发送请求来计算访问中所花费的实际时间。心跳请求在以下情况下执行:
- 当前选项卡处于活动状态至少 15 秒后切换到另一个浏览器选项卡(可配置,请参见下文)。
- 导航到同一选项卡中的另一个页面。
- 关闭选项卡。
// Change how long a tab needs to be active to be counted as viewed in seconds/
// Requires a page to be actively viewed for 30 seconds for any heart beat request to be sent.
_paq.push(['enableHeartBeatTimer', 30]);
注意:测试心跳计时器时,请记住确保浏览器选项卡具有焦点,而不是例如。开发人员工具或其他面板。
电子商务追踪
Matomo 允许进行先进且强大的电子商务跟踪。查看电子商务分析文档,了解有关电子商务报告以及如何设置电子商务跟踪的更多信息。
内部搜索跟踪
Matomo 提供先进的网站搜索分析功能,让您可以跟踪访问者如何使用您的内部网站搜索引擎。默认情况下,Matomo 可以读取包含搜索关键字的 URL 参数。不过,您也可以使用 JavaScript 函数手动记录网站搜索关键字trackSiteSearch(...)
在您网站的标准页面中,您通常会通过调用来记录页面浏览量matomoTracker.trackPageView()。在您的搜索结果页面上,您将调用相反 piwikTracker.trackSiteSearch(keyword, category, searchCount)函数来记录内部搜索请求。注意:“keyword”参数是必需的,但“category”和“searchCount”是可选的。
代码语言:javascript复制_paq.push(['trackSiteSearch',
// Search keyword searched for
"Banana",
// Search category selected in your search engine. If you do not need this, set to false
"Organic Food",
// Number of results on the Search results page. Zero indicates a 'No Result Search Keyword'. Set to false if you don't know
0
]);
// We recommend not to call trackPageView() on the Site Search Result page
// _paq.push(['trackPageView']);
我们还强烈建议设置 searchCount 参数,因为 Matomo 会特别报告“无结果关键字”,即。已搜索关键字,但未返回任何结果。了解用户搜索但在您的网站上(还没有?)找不到的内容通常非常有趣。在用户文档中了解有关站点搜索分析的更多信息。
自定义变量
自定义变量是一项强大的功能,使您能够跟踪每次访问和/或每次页面浏览的自定义值。请参阅跟踪自定义变量文档页面以获取一般信息。
您可以为每次访问网站设置最多 5 个自定义变量(名称和值),和/或为每个页面视图设置最多 5 个自定义变量。如果您为访客设置自定义变量,当他们一小时或两天后回来时,这将是一次新访问,并且他们的自定义变量将为空。
您可以将自定义变量设置为两个“范围”。“范围”是函数的第四个参数setCustomVariable()。
- 当scope = "visit"时,自定义变量的名称和值将存储在数据库中的visit中。因此,您可以为每次访问存储最多 5 个范围“访问”的自定义变量。
- 当scope =“page”时,将为正在跟踪的页面视图存储自定义变量的名称和值。因此,您可以为每个页面视图存储最多 5 个范围“页面”的自定义变量。
“index”参数是自定义变量槽索引,是一个从 1 到 5 的整数。(注意:如果您需要超过默认 5 个槽,请阅读此常见问题解答)。
自定义变量统计信息在 Matomo 中的“访客”>“自定义变量”下报告。范围“访问”和“页面”的自定义变量都聚合在此报告中。
访问的自定义变量
代码语言:javascript复制setCustomVariable(index, name, value, scope = "visit")
此函数用于创建或更新自定义变量名称和值。例如,假设您想要在每次访问中存储用户的性别。您可以使用名称=“性别”、值=“男性”或“女性”来存储自定义变量。
重要提示:给定的自定义变量名称必须始终存储在相同的“索引”中。例如,如果您选择将变量名称=“性别”存储在索引= 1中,并且在索引= 1中记录另一个自定义变量,则“性别”变量将被删除并替换为存储在索引1中的新自定义变量。
代码语言:javascript复制_paq.push(['setCustomVariable',
// Index, the number from 1 to 5 where this custom variable name is stored
1,
// Name, the name of the variable, for example: Gender, VisitorType
"Gender",
// Value, for example: "Male", "Female" or "new", "engaged", "customer"
"Male",
// Scope of the custom variable, "visit" means the custom variable applies to the current visit
"visit"
]);
_paq.push(['trackPageView']);
您只需设置一次范围为“visit”的变量,整个访问过程中都会记录该值。
页面浏览量的自定义变量
代码语言:javascript复制setCustomVariable(index, name, value, scope = "page")
除了跟踪“访问”的自定义变量之外,有时单独跟踪每个页面视图的自定义变量也很有用。例如,对于“新闻”网站或博客,给定文章可以被分类为一个或多个类别。在这种情况下,如果文章被分类为“体育”和“欧洲”类别,您可以使用 来设置一个或多个自定义变量name="category",其中一个为value="Sports",另一个为。value="Europe"然后,自定义变量报告将报告每个网站类别的访问量和页面浏览量。使用标准 Matomo 报告可能很难获得此信息,因为它们报告的“最佳页面 URL”和“最佳页面标题”可能不包含“类别”信息。
代码语言:javascript复制// Track 2 custom variables with the same name, but in different slots.
// You will then access the statistics about your articles' categories in the 'Visitors > custom variables' report
_paq.push(['setCustomVariable', 1, 'Category', 'Sports', 'page']);
// Track the same name but in a different Index
_paq.push(['setCustomVariable', 2, 'Category', 'Europe', 'page']);
// Here you could track other custom variables with scope "page" in Index 3, 4 or 5
// The order is important: first setCustomVariable is called and then trackPageView records the request
_paq.push(['trackPageView']);
重要提示:可以在“索引”1 中存储范围“访问”的自定义变量,并在同一“索引”1 中存储范围“页面”的不同自定义变量。因此,从技术上讲,您最多可以跟踪 10 个自定义变量。网站每个页面上的变量名称和值(5 个“页面”范围存储在实际页面视图中,5 个“访问”范围存储在访问中)。
代码语言:javascript复制_paq.push(['setCustomVariable',
// Index, the number from 1 to 5 where this custom variable name is stored for the current page view
1,
// Name, the name of the variable, for example: Category, Sub-category, UserType
"category",
// Value, for example: "Sports", "News", "World", "Business", etc.
"Sports",
// Scope of the custom variable, "page" means the custom variable applies to the current page view
"page"
]);
_paq.push(['trackPageView']);
删除自定义变量
代码语言:javascript复制deleteCustomVariable(index, scope)
如果您创建了自定义变量,然后决定从访问或页面视图中删除该变量,则可以使用deleteCustomVariable。
要在 Matomo 服务器中保留更改,您必须在调用之前调用该函数trackPageView();
代码语言:javascript复制_paq.push(['deleteCustomVariable', 1, "visit"]); // Delete the variable in index 1 stored for the current visit
_paq.push(['trackPageView']);
检索自定义变量
代码语言:javascript复制getCustomVariable(index, scope)
该函数可用于获取自定义变量名称和值。默认情况下,它仅适用于在同一页面加载期间设置的自定义变量。
注意:可以配置 Matomo,以便getCustomVariable也返回范围“访问”的自定义变量的名称和值,即使它是在同一访问的先前页面视图中设置的。storeCustomVariablesInCookie要启用此行为,请在调用 之前调用 JavaScript 函数trackPageView。这将允许在第一方 cookie 中存储“访问”范围的自定义变量。自定义变量 cookie 在访问期间(最后一次操作后 30 分钟)有效。然后,您可以使用 检索自定义变量名称和值getCustomVariable。如果请求的索引中没有自定义变量,则返回 false。
代码语言:javascript复制_paq.push([ function() {
var customVariable = this.getCustomVariable( 1, "visit" );
// Returns the custom variable: [ "gender", "male" ]
// do something with customVariable...
}]);
_paq.push(['trackPageView']);
定制尺寸
自定义维度是一项强大的功能,使您能够跟踪每次访问和/或每个操作(页面视图、外链、下载)的自定义值。此功能不直接随 Matomo 一起提供,但可以通过Matomo Marketplace (CustomDimensions 插件)作为插件安装。在使用自定义维度之前,您需要安装插件并配置至少一个维度,请参阅自定义维度指南。您将获得每个配置的自定义维度的数字 ID,可用于为其设置值。
跨跟踪请求跟踪自定义维度
要跟踪某个值,只需指定 ID 后跟一个值即可:
代码语言:javascript复制_paq.push(['setCustomDimension', customDimensionId = 1, customDimensionValue = 'Member']);
请注意,设置自定义维度后,该值将用于所有后续跟踪请求,如果不需要,可能会导致结果不准确。例如,如果您跟踪页面视图,则还将跟踪同一页面加载中的每个后续事件、外链、下载等的自定义维度值。调用此方法实际上不会触发跟踪请求,而是将值与后续跟踪请求一起发送。在跟踪请求调用后删除自定义维度值 _paq.push(['deleteCustomDimension', customDimensionId]);
为初始页面视图设置自定义尺寸
要为初始页面视图设置自定义尺寸,请确保将方法调用置于setCustomDimension之前trackPageView:
代码语言:javascript复制_paq.push(['setCustomDimension', customDimensionId = 1, customDimensionValue = 'Member']);
_paq.push(['trackPageView']);
// _paq.push(['enableLinkTracking']);
// rest of tracking code
仅跟踪一项特定操作的自定义维度
可以仅为一项特定操作设置自定义维度。如果您想要跟踪页面浏览量,您可以随此跟踪请求一起发送一个或多个特定的自定义维度值,如下所示:
_paq.push(['trackPageView', pageTitle, {dimension1: 'DimensionValue'}]);
要定义维度值,请传递一个定义一个或多个属性的对象作为最后一个参数(确保指定方法中定义的所有参数,我们不会自动假设最后一个参数是 customData,而是方法定义的所有参数都需要传递给每个方法)。维度的属性名称以 开头,dimension后跟自定义维度 ID,例如dimension1。同样的行为也适用于其他几种方法:
代码语言:javascript复制_paq.push(['trackEvent', category, action, name, value, {dimension1: 'DimensionValue'}]);
_paq.push(['trackSiteSearch', keyword, category, resultsCount, {dimension1: 'DimensionValue'}]);
_paq.push(['trackLink', url, linkType, {dimension1: 'DimensionValue'}]);
_paq.push(['trackGoal', idGoal, customRevenue, {dimension1: 'DimensionValue'}]);
优点是设置的维度值将仅用于此特定操作,您不必在跟踪请求后删除该值。您可以设置多个维度值,如下所示:
_paq.push(['trackPageView', pageTitle, {dimension1: 'DimensionValue', dimension4: 'Test', dimension7: 'Value'}]);
检索自定义维度值
代码语言:javascript复制getCustomDimension(customDimensionId)
此函数可用于获取自定义维度的值。仅当在同一页面加载期间设置了自定义维度时,它才有效。
用户身份
用户 ID是 Matomo 中的一项功能,可让您将从多个设备和多个浏览器收集的给定用户的数据连接在一起。实现用户ID有两个步骤:
- 您必须分配一个唯一且持久的非空字符串来代表每个登录用户。通常,此 ID 是您的身份验证系统提供的电子邮件地址或用户名。
- 您必须为每个浏览量设置用户 ID,否则将在未设置用户 ID 的情况下跟踪浏览量。
- setUserId然后,您必须在调用任何函数track*(trackPageview、trackEvent、trackGoal、等)之前通过方法调用将此用户 ID 字符串传递给 Matomo,trackSiteSearch例如:
_paq.push(['setUserId', 'USER_ID_HERE']);
_paq.push(['trackPageView']);
注意:USER_ID_HERE必须是唯一且持久的非空字符串,表示跨设备的用户。
当用户登录时,设置用户ID
让我们举个例子。想象一下,您的网站使用 PHP 脚本通过登录表单对用户进行身份验证。您的 Matomo JavaScript 片段可能如下所示:
代码语言:javascript复制var _paq = window._paq = window._paq || [];
<?php
// If user is logged-in then call 'setUserId'
// $userId variable must be set by the server when the user has successfully authenticated to your app.
if (isset($userId)) {
echo sprintf("_paq.push(['setUserId', '%s']);", $userId);
}
?>
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
当用户注销时,重置用户ID
当用户注销并且用户 ID 不再可用时,建议通过调用resetUserIdbefore 方法来通知 Matomo trackPageView。
resetUserId如果您想在用户注销时创建新的访问,那么您还可以通过调用和(两次)来强制 Matomo 创建新的访问,appendToTrackingUrl如下所示:
代码语言:javascript复制// User has just logged out, we reset the User ID
_paq.push(['resetUserId']);
// we also force a new visit to be created for the pageviews after logout
_paq.push(['appendToTrackingUrl', 'new_visit=1']);
_paq.push(['trackPageView']);
// we finally make sure to not again create a new visit afterwards (important for Single Page Applications)
_paq.push(['appendToTrackingUrl', '']);
内容追踪
有多种方法可以手动、半自动和自动跟踪内容印象和交互。请注意,将使用批量跟踪来跟踪内容展示次数,POST即使GET配置为默认值,批量跟踪也将始终发送请求。有关更多详细信息,请参阅内容跟踪深入指南。
跟踪页面内的所有内容印象
您可以使用该方法trackAllContentImpressions()扫描整个 DOM 中的内容块。对于每个内容块,我们将立即跟踪内容印象。如果您只想跟踪可见内容印象,请查看trackVisibleContentImpressions()。
代码语言:javascript复制_paq.push(['trackPageView']);
_paq.push(['trackAllContentImpressions']);
如果您多次调用此方法,我们不会两次发送同一内容块的展示,除非trackPageView()同时调用。这对于单页应用程序很有用。
仅跟踪页面内的可见内容印象。
通过 启用仅跟踪可见内容印象trackVisibleContentImpressions(checkOnScroll, timeIntervalInMs)。对于可见,我们的意思是内容块已经在视口中并且没有隐藏(不透明度、可见性、显示……)。
- 或者,您可以通过传递 来告诉我们在每次滚动后不要重新扫描 DOM checkOnScroll=false。否则,我们将检查先前隐藏的内容块在滚动后是否同时变得可见,如果是,则跟踪印象。
- 限制:如果内容块放置在可滚动元素 ( overflow: scroll) 内,我们当前无法检测此类元素何时变得可见。
- 您也可以选择通过传递 来告诉我们每 X 毫秒重新扫描整个 DOM 以获取新内容印象timeIntervalInMs=500。默认情况下,我们将每 750 毫秒重新扫描 DOM。要禁用它,请通过timeIntervalInMs=0.
- 重新扫描整个 DOM 并检测内容块的可见状态可能需要一段时间,具体取决于浏览器、硬件和内容量。如果每秒帧数下降,您可能需要增加间隔或完全禁用它。如果禁用它,您仍然可以随时通过再次调用此方法或 来手动重新扫描 DOM trackContentImpressionsWithinNode()。
第一次调用该方法后, 和 都不能checkOnScroll更改。timeIntervalInMs
代码语言:javascript复制_paq.push(['trackPageView']);
_paq.push(['trackVisibleContentImpressions', true, 750]);
仅跟踪页面一部分的内容展示次数
trackContentImpressionsWithinNode(domNode, contentTarget)如果您在我们跟踪初始展示后向 DOM 添加元素,请使用该方法。调用此方法将确保跟踪此节点中包含的所有内容块的印象。
例子
代码语言:javascript复制var div = $('<div>...<div data-track-content>...</div>...<div data-track-content>...</div></div>');
$('#id').append(div);
_paq.push(['trackContentImpressionsWithinNode', div[0]]);
在此示例中,我们将检测到两个新的内容印象。如果您已启用仅跟踪可见内容块,我们将尊重这一点。
半自动跟踪交互
一旦访问者点击内容块,通常就会自动跟踪与内容块的交互。有时您可能需要手动触发交互,例如,如果您想要基于表单提交或双击触发交互。为此,请调用该方法trackContentInteractionNode(domNode, contentInteraction)。
例子
代码语言:javascript复制formElement.addEventListener('submit', function () {
_paq.push(['trackContentInteractionNode', this, 'submittedForm']);
});
- 传递的domNode可以是内容块内的任何节点或内容块元素本身。如果没有找到内容块,则不会跟踪任何内容。
- 您可以选择设置内容交互的名称,例如click或submit。如果未提供,Unknown则将使用该值。
- piwikContentIgnoreInteraction您应该通过设置 CSS class或 attribute来禁用该内容块的自动交互跟踪data-content-ignoreinteraction。否则,一旦访问者执行点击,就可能会在其之上跟踪交互。
我们将这种跟踪称为半自动跟踪,因为您手动触发交互,但会自动检测内容名称、片段和目标。自动检测内容名称和片段可确保我们可以将交互与之前跟踪的印象进行映射。
手动跟踪内容印象和互动
trackContentImpression(contentName, contentPiece, contentTarget)您应该仅将和方法trackContentInteraction( contentInteraction, contentName, contentPiece, contentTarget)结合在一起使用。不建议trackContentInteraction()在自动跟踪展示后使用,因为只有您设置了与用于跟踪相关展示相同的内容名称和片段,我们才能将交互映射到展示。
例子
代码语言:javascript复制_paq.push(['trackContentImpression', 'Content Name', 'Content Piece', 'https://www.example.com']);
div.addEventListener('click', function () {
_paq.push(['trackContentInteraction', 'tabActivated', 'Content Name', 'Content Piece', 'https://www.example.com']);
});
请注意,每次调用这些方法都会向您的 Matomo 跟踪器实例发送一个请求。这样做太多次可能会导致性能问题。
测量域和/或子域
无论您是跟踪一个域、子域还是同时跟踪这两个域等,您都可能需要配置 Matomo JavaScript 跟踪代码。有两件事可能需要配置:1) 如何创建和共享跟踪 cookie,2) 哪些点击应作为“外链”进行跟踪。
跟踪一个域
这是标准用例。Matomo 在单个 Matomo 网站中跟踪一个没有子域的域名的访问情况。
代码语言:javascript复制// Default Tracking code
_paq.push(['setSiteId', 1]);
_paq.push(['setTrackerUrl', u 'matomo.php']);
_paq.push(['trackPageView']);
如果您正在跟踪一个特定的子域,则此默认跟踪代码也适用。
跟踪同一网站中的一个域及其子域
为了记录主域名及其任何子域的用户,我们告诉 Matomo 在所有子域之间共享 cookie。setCookieDomain()在 example.com/* 和所有子域的 Matomo 跟踪代码中调用。
代码语言:javascript复制_paq.push(['setSiteId', 1]);
_paq.push(['setTrackerUrl', u 'matomo.php']);
// Share the tracking cookie across example.com, www.example.com, subdomain.example.com, ...
_paq.push(['setCookieDomain', '*.example.com']);
// Tell Matomo the website domain so that clicks on these domains are not tracked as 'Outlinks'
_paq.push(['setDomains', '*.example.com']);
_paq.push(['trackPageView']);
跟踪同一网站中多个域名的访问者
为了准确跟踪不同域名的访问者对一个 Matomo 网站的单次访问,我们需要设置所谓的跨域链接。Matomo 中的跨域跟踪可确保当访问者访问多个网站和域名时,访问者数据将存储在同一次访问中,并且访问者 ID 可以跨域名重复使用。需要跨域的典型用例是,例如,当电子商务在线商店处于打开状态www.awesome-shop.com并且电子商务购物车技术位于另一个域(例如secure.cart.com.
跨域链接使用两种跟踪器方法setDomains和enableCrossDomainLinking. 在我们的指南中了解如何设置跨域链接:如何准确衡量跨多个域名的同一访问者(跨域链接)?
跟踪不同网站中域的子目录
当跟踪自己单独的 Matomo 网站中的域的子目录时,建议自定义跟踪代码以确保最佳的数据准确性和性能。
例如,如果您的网站提供“用户个人资料”功能,您可能希望在 Matomo 的单独网站中跟踪每个用户个人资料页面。在主域主页中,您将使用默认的跟踪代码:
代码语言:javascript复制// idSite = X for the Homepage
// In Administration > Websites for idSite=X, the URL is set to `example.com/`
_paq.push(['setSiteId', X]);
_paq.push(['setTrackerUrl', u 'matomo.php']);
_paq.push(['trackPageView']);
在该example.com/user/MyUsername页面(以及所有其他用户配置文件)中,您将构建对 custom setSiteId,setCookiePath和 的调用setDomains:
代码语言:javascript复制// The idSite Y will be different from other user pages
// In Administration > Websites for idSite=Y, the URL is set to `example.com/user/MyUsername`
_paq.push(['setSiteId', Y]);
// Create the tracking cookie specifically in `example.com/user/MyUsername`
_paq.push(['setCookiePath', '/user/MyUsername']);
// Tell Matomo the website domain so that clicks on other pages (eg. /user/AnotherUsername) will be tracked as 'Outlinks'
_paq.push(['setDomains', 'example.com/user/MyUsername']);
_paq.push(['setTrackerUrl', u 'matomo.php']);
_paq.push(['trackPageView']);
当跟踪单独网站中的许多子目录时,该功能setCookiePath可以防止cookie的数量快速增加并防止浏览器删除某些cookie。这可确保最佳的数据准确性并提高用户的性能(每个请求发送的 cookie 更少)。
该功能setDomains可确保用户离开您的网站(子目录example.com/user/MyUsername)的点击被正确跟踪为“外链”。
跟踪单独网站中的一组页面
(自 Matomo 2.16.1 起可用)
在极少数情况下,您可能希望跟踪特定网站中与通配符匹配的所有页面,并将其他页面(与通配符不匹配)上的点击跟踪为“外链”。
在页面中/index_fr.htm或/index_en.htm写下:
代码语言:javascript复制// clicks on links not starting with example.com/index will be tracked as 'Outlinks'
_paq.push(['setDomains', 'example.com/index*']);
// when using a wildcard *, we do not need to configure cookies with `setCookieDomain`
// or `setCookiePath` as cookies are correctly created in the main domain by default
_paq.push([
分类:GitHub