1、先決條件:使用新版本的JavaScript跟蹤代碼
2、JavaScript跟蹤代碼的功能
(1)自定義在Piwik中顯示的頁面名稱
(2)手動觸發目標轉化
(3)考慮一個主機的“別名”,不將這個域名的鏈接記錄為“出站鏈接”
(4)禁用下載及出站鏈接跟蹤
(5)禁用特定CSS類的下載及出站鏈接跟蹤
(6)禁用特定鏈接上的下載及出站鏈接跟蹤
(7)將一個鏈接的點擊在Piwik中強制記錄為下載
(8)將一個鏈接的點擊在Piwik中強制記錄出站鏈接
(9)修改暫停定時器
(10)修改跟蹤為“下載”的文件擴展名列表
3、其他函數
(1)自定義發送到Piwik.php跟蹤腳本的JASON數據
(2)多個Piwik跟蹤代碼
(3)異步跟蹤
(4)覆蓋Piwik.js的單元測試
4、跟蹤API可用的所有方法列表
5、相關文檔
Piwik配備了相當強大的JavaScript跟蹤API。高級用戶能使用Piwik跟蹤代碼定制一些網站分析數據記錄在Piwik中的方式。插件開發者也能向Piwik跟蹤腳本發送定制化的JSON數據,並且在插件中使用這些數據。
1、先決條件:使用新版本的JavaScript跟蹤代碼
基本的Piwik跟蹤代碼如下:
<!– Piwik –> <script type=”text/javascript”> var pkBaseURL = ((“https:” == document.location.protocol) ? “https://{$PIWIK_URL}” : “http://{$PIWIK_URL}”); document.write(unescape(“%3Cscript src=’” + pkBaseURL + “piwik.js’ type=’text/javascript’%3E%3C/script%3E”)); </script><script type=”text/javascript”> try { var piwikTracker = Piwik.getTracker(pkBaseURL + “piwik.php”, {$IDSITE}); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); } catch( err ) {} </script> <!– End Piwik Tag –>
在Piwik跟蹤代碼中,{$PIWIK_URL}將被替換為你的Piwik URL,{$IDSITE}將被替換為你在Piwik中跟蹤的網站ID。
如果你的Piwik跟蹤代碼不是這樣的,那么,你可能正在使用過時的舊版本。舊版本仍將按期望工作,繼續跟蹤你的訪問者。但是,為了使用這個頁面中所介紹的所有功能,你將需要使用新版本的跟蹤代碼。請訪問你的Piwik管理部分,請求給定網站的JavaScript代碼,並且將你的頁面更新為新的代碼。
2、JavaScript跟蹤代碼的功能
(1)定制Piwik中顯示的頁面名稱
默認情況下,Piwik在Piwik界面中使用當前頁面的URL作為頁面的名稱。如果您的URL很復雜,或者如果你想要定制Piwik跟蹤頁面的方式,你能在JavaScript標簽中指定頁面名稱。
常用的方法是使用HTML標題的值:
[...]
piwikTracker.setDocumentTitle(document.title);
piwikTracker.trackPageView();
[...]
高級用戶也能動態產生頁面名稱,例如在PHP中:
[...] piwikTracker.setDocumentTitle("<?php echo $myPageTitle; ?>"); piwikTracker.trackPageView(); [...]
(2)手動觸發目標轉化
默認情況下,目標在Piwik被定義為部分URL的“匹配”(開始、包含或正則式匹配)。你也能默認將特定頁面查看、下載或出站鏈接跟蹤為目標。
在一些情況下,你想要將其他類型的動作登記為轉化,例如:
•訪問者提交一個表單:
•訪問者在頁面上停留超過給定時間
•訪問者與你的Flash應用程序進行了一些交互
•用戶提交了購物車並完成了支付:你能將Piwik跟蹤代碼提供給支付網站,這個網站將在稍后在你的Piwik數據庫中登記這個轉化以及自定義的收入。
•等等
使用Piwik JavaScript跟蹤手動觸發一個目標,你可以簡單的這樣做:
[...] piwikTracker.trackGoal(1); // 記錄目標1的一次轉化 [...]
你也能為這個目標記錄自定義收入,例如,你可以生成對跟蹤目標的動態調用,以便設置這筆交易的收入:
[...] piwikTracker.trackGoal(1, <?php echo $cart->getCartValue(); ?>); // 記錄設置了自定義收入的目標1的一次轉化 [...]
目標跟蹤的更多信息見跟蹤目標文檔。
(3)考慮一個主機的“別名”,不將這個域名的鏈接記錄為“出站鏈接”
默認情況下,所有域名不是當前域名的連接都被認為是出站鏈接。如果你有多個域名,不希望將指向這些網站的鏈接被認為是“出站鏈接”,那么你可以在一個域名數組中指定。如果你想要忽略特定域的二級域的所有點擊,那么可以使用通配符。
[...] piwikTracker.setDomains(["*.hostname1.com", "hostname2.com"]); // 至少目前跟蹤的網站應添加到這個數組中 piwikTracker.trackPageView(); [...]
(4)禁用下載及出站鏈接跟蹤
Piwik跟蹤代碼默認啟用點擊和下載跟蹤。禁用所有自動下載和出站鏈接跟蹤,你必須去掉對enableLinkTracking()函數的調用:
[...] // 我們注釋掉啟用鏈接跟蹤的函數 // piwikTracker.enableLinkTracking(); piwikTracker.trackPageView(); [...]
(5)禁用特定CSS類的下載及出站鏈接跟蹤
你能禁用對特定CSS類的下載及出站鏈接的自動跟蹤
[...] piwikTracker.setIgnoreClasses( "no-tracking" ); // 你也能傳遞一個字符串數組 piwikTracker.trackPageView(); [...]
這將導致鏈接<a href=’http://example.com’ class=’no-tracking’>Test</a>的點擊不被計算。
(6)禁用特定鏈接的下載或出站鏈接的跟蹤
如果你想要一直忽略特定鏈接的下載或出站鏈接跟蹤,你能為它添加“piwik_ignore”CSS類:
<a href=’latest.zip’ class=’piwik_ignore’>不想跟蹤為下載的文件</a>
(7)將一個鏈接的點擊在Piwik中強制記錄為下載
如果你想讓Piwik將一個給定鏈接考慮為下載,那么,你可以為這個鏈接添加“piwik_download”CSS類:
<a href='last.php' class='piwik_download'>我想要跟蹤為下載的鏈接</a>
注:你可以自定義和重命名用於強制被記錄為下載的點擊的CSS類:
[...] // 現在所有“download”CSS類的鏈接將為記錄為下載 piwikTracker.setDownloadClasses( "download" ); //你也可以傳遞一個字符串數組 piwikTracker.trackPageView(); [...]
(8)將一個鏈接的點擊在Piwik中強制記錄出站鏈接
如果你想讓Piwik將一個給定的鏈接考慮為出站鏈接(指向當前域或一個別名域的鏈接),那么,你可以為這個鏈接添加“piwik_link”CSS類:
<a href='http://mysite.com/partner/' class='piwik_link'>我想要跟蹤為出站鏈接的鏈接</a>
注:你可以自定義和重命名用於強制被記錄為出站鏈接的點擊的CSS類:
[...] //現在所有“external”CSS類的鏈接上的點擊將被計算為出站鏈接 piwikTracker.setLinkClasses( "external" ); //你也可以傳遞一個字符串數組 piwikTracker.trackPageView(); [...]
(9)修改暫停定時器
當訪問者點擊文件下載,或點擊出站鏈接時,Piwik將記錄它。為了這樣做,Piwik在重定向用戶到請求的文件或鏈接之前添加了一小段延遲。我們使用的默認值是500ms,但是你可以將它設置為更短的時間。但是,需要注意的是,這樣做會帶來由於這段時間過短而使Piwik無法記錄數據的風險。
[...] piwikTracker.setLinkTrackingTimer( 250 ); // 250 毫秒 piwikTracker.trackPageView(); [...]
(10)修改跟蹤為“下載”的文件擴展名列表
默認情況下,任何以下列這些文件擴展名之一結尾的文件在Piwik界面中都會被認為是“下載”:
7z|aac|arc|arj|asf|asx|avi|bin|csv|doc|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd||xls|xml|z|zip
為了替換你想要跟蹤為文件下載的擴展名列表,你可以:
[...] piwikTracker.setDownloadExtensions( "jpg|png|gif" ); //我們現在只跟蹤圖片上的點擊 piwikTracker.trackPageView(); [...]
如果你想跟蹤新的文件名類型,你可以僅將它添加到這個列表中:
[...] //點擊以mp5或mp6結尾的URL將被計算為下載 piwikTracker.addDownloadExtensions( "mp5|mp6" ); piwikTracker.trackPageView(); [...]
3、其他函數
(1)向piwik.php跟蹤腳本發送自定義JSON數據(插件開發者)
例如,向一個(虛構的)跟蹤插件發送用戶ID數據:
[...] var user = { 'userId' : user_id }; piwikTracker.setCustomData( user ); piwikTracker.trackPageView(); [...]
在trackLink方法中,你也可以為特定點擊發送自定義數據。例如,發送交易數據供虛構的電子商務跟蹤插件使用。
[...] var trans = { 'orderId' : order_id, 'storeId' : store_id, 'total' : total, 'city' : city, 'state' : state, 'country' : country, 'skus' : 'A;B;C', 'units' : '1;2;1' }; piwikTracker.trackLink( '/store', 'addTransaction', trans ); [...]
所有的自定義數據能被設置為JASON對象。Piwik代碼將自動編碼JASON對象並且構建為一個字符串版本,隨后你可以在php段使用json_decode()解碼。我們使用json.org上的開源JSON工具。
注:目前,自定義數據不會記錄在Piwik數據庫中。插件使用的自定義數據必須在自己的表中存儲數據,然后進行歸檔。如果你需要別人幫忙構建這樣的功能,請在piwik-hacker的郵箱列表中詢問你的問題(更多信息)。
(2)多個Piwik跟蹤器
可以使用指向相同或不同Piwik服務器的多個Piwik跟蹤器跟蹤同一個頁面。為了減少加載時間,你可以加載piwik.js一次。每一次調用Piwik.getTracker()都返回惟一Piwik跟蹤器對象(事例),這些跟蹤對象可以進行配置。
調用getTracker的第一個參數
<script type="text/javascript"> try { var piwikTracker = Piwik.getTracker("http://URL_1/piwik.php", 1); piwikTracker.trackPageView(); var piwik2 = Piwik.getTracker("http://URL_2/piwik.php", 4); piwik2.trackPageView(); } catch( err ) {} </script>
注意你也可以手動設置網站ID和piwik跟蹤器URL,而不是在getTracker調用中設置它們:
//我們替換Piwik.getTracker("http://example.com/piwik/", 12) var piwikTracker = Piwik.getTracker(); piwikTracker.setSiteId( 12 ); piwikTracker.setTrackerUrl( "http://example.com/piwik/" ); piwikTracker.trackPageView();
(3)異步跟蹤
Piwik JavaScript跟蹤API也支持異步跟蹤,以便頁面加載(或看起來加載)的更快。配置和跟蹤調用被推送到_paq數組進行執行,與piwik.js加載異步。其形式為:
_paq.push([ 'API_method_name', parameter_list ]);
異步Piwik跟蹤代碼應插入到<head>標簽中,形式如下:
<!-- Piwik --> <script type="text/javascript"> var _paq = _paq || []; (function(){ var u=(("https:" == document.location.protocol) ? "https://{$PIWIK_URL}" : "http://{$PIWIK_URL}"); _paq.push(['setSiteId', {$IDSITE}]); _paq.push(['setTrackerUrl', u+'piwik.php']); _paq.push(['trackPageView']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.defer=true; g.async=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Piwik Tag -->
(為了清晰,以上代碼段沒有壓縮。)
(4)覆蓋Piwik.js的單元測試
Piwik JavaScript跟蹤API由廣泛JavaScript單元測試控件來確保代碼的質量盡可能高,我們永遠不會破壞這種功能。測試使用QUnit-jQuery單元測試執行器寫的。運行這些測試,只需要檢查Piwik的SVN端口匯合,進入/path/to/piwik/tests/javascript/。測試在你的瀏覽器中進行。
Piwik JavaScript API經過許多web瀏覽器的測試:包括(但不限於)火狐2、3.0、3.1;IE 5.5、6、7、8;Opera 7.54、8.54、9.64、10;Safari 3.0、3.2、4.0;Konqueror 3.5;SeaMonkey 1.1、2.0。我們有時使用browsershots.org來幫助測試。
(5)壓縮piwik.js
Piwik.js被壓縮為你的網站訪問者將要下載的最小尺寸。我們使用YUI壓縮器在壓縮JavaScript(了解更多)。你可以在/js/piwik.js找到原始的未經壓縮的版本。
4、跟蹤API可用的所有方法列表
從Piwik類請求跟蹤器實例
•Piwik.getTracker( trackerUrl, siteId )——獲得跟蹤器的新實例
•[Google Analytics等價物] _getTracker(account)
•[Yahoo! Analytics等價物] getTracker(account)
使用跟蹤器對象
•enableLinkTracking()——在所有可以應用的鏈接元素上安裝鏈接跟蹤
•addListener(element)——為特定鏈接元素添加鏈接監聽器。當點擊時,Piwik將自動記錄點擊。
•setRequestMethod(method)——將請求方法設置為“GET”或“POST”(默認是“GET”)。使用POST請求方法,Piwik的主機必須與跟蹤網站的主機相同(Piwik安裝在與跟蹤網站相同的域上)。
•trackGoal( idGoal, [customRevenue], [customData])——手動記錄idGoal目標的一個轉化,如果指定了的話,傳遞customRevenue和customData
•trackLink( url, linkType, [customData] )——手動記錄來自你自己代碼的一次點擊。url是點擊的URL。linkType可以是“link”出站鏈接也可以是“download”下載。
•trackPageView([customTitle], [customData])——記錄這個頁面的訪問
•[Google Analytics等價物] _trackPageview(opt_pageURL)
•[Yahoo! Analytics等價物] submit()
跟蹤器對象的設置
•setDocumentTitle( string )——重寫文檔標題
•[Yahoo! Analytics 等價物] YWATracker.setDocumentName(“xxx”)
•setDomains( array)——設置當做本地處理的主機名或域名數組
•[Google Analytics 等價物] _setDomainName(“.example.com”)
•[Yahoo! Analytics equivalent] setDomains(“*.abc.net”)
•setCustomData( object|string )——向服務器傳遞自定義數據
•setCustomUrl( string )——重寫頁面報告的URL
•setReferrerUrl( string )——重寫檢測到的Http-Referer
•setSiteId( integer )——指定網站的ID。多余的:能在getTracker()構造函數中指定。
•setTrackerUrl( string )——指定Piwik服務器URL。多余的:能在getTracker()構造函數中指定。
•setDownloadClasses( string | array )——設置處理為下載(除了piwik_download以外)的類。
•setDownloadExtensions( string )——設置識別為下載的文件擴展名列表。例如:“doc|pdf|txt”。
•addDownloadExtensions( string )——指定更多的識別為下載的文件擴展名。;例如:“doc|pdf|txt”。
•setIgnoreClasses( string | array )——設置如果出現在鏈接中將被忽略的類(除了piwik_ignore以外)
•setLinkClasses( string | array )——設置被處理為出站鏈接的類(除了piwik_link以外)
•setLinkTrackingTimer( integer )——設置鏈接跟蹤的延遲,以毫秒為單位。
官網:
https://developer.matomo.org/api-reference/tracking-javascript