By default, Piwik reports are processed when you request them in the User Interface. Please see How to setup auto archiving of your reports every night? to automate the generation of Piwik reports. See also How long does the Piwik archiving process? for expected speed for high traffic websites.
It is possible to migrate your Google Analytics data in Piwik and access your historical reports. Check out this blog post about google2piwik.
We offer solutions for users who wish to customize Piwik. We have helped many companies re-brand Piwik for their internal use. We have also helped large agencies use Piwik for their hundreds of clients, and ensuring a clean branding and interface for all of their users and clients.
Please contact us for more information about customizing Piwik, and White Label solutions.
To exclude all traffic from a given IP or IP range, log in Piwik as the Super User. Click on Settings > Websites. Below the list of websites, you will find the option to specify "Global list of Excluded IPs". You can define a given IP address, or IP ranges (132.4.3.* or 143.2.*.* for example) to be excluded from being tracked on all websites.
Each Piwik admin user can also specify the list of IPs or IP ranges to exclude for specific websites.
It is commong that websites use URLs query parameters or session ID parameters that are not relevant to data analysis (unique ID, meaningless parameter). You can easily ignore a number of parameters from the URLs, and prevent them from appearing in the "Actions > Pages" report. Login as the Super User, go to Settings > Manage Websites > Global list of Query URL parameters to exclude field. Each Piwik admin user can also exclude query parameters for specific websites, by entering them in the Excluded Parameters list for this website, in Settings > Websites.
Piwik internally stores all times in UTC, which is a Software Engineering best practise.
However Piwik lets you specify the time zone to use for each website in the Websites admin panel. Click on Settings > Websites > Edit.
Note: changing the website's timezone will only affect Reports going forward.
By default, Piwik reports revenues in $ US dollars. Piwik Super User can specify the currency to use for the Goals reports, for each website, in the Websites admin panel.
Each user can specify which websites should be loaded in Piwik. Alternatively, users can choose to load the "All websites" dashboard, which gives an overview of the status and evolution of all websites available to the user.
By default, Piwik will load reports for "yesterday". Each Piwik user can specify, in their "User settings" admin panel, the date to load by default in Piwik reports: "Today", "Current week", "Current month", or "Last 7 days", "Last 30 days", "Yesterday", etc.
By default, Piwik will report your Page URLs and Page titles in 'categories', automatically constructed based on the slash character / as a delimiter.
For example, a Page with a URL "http://example.org/about/contact" will be reported under the category "about" in the Page URLs report. When you click on it it will open the pages inside this category, and show the stats for the subpage "contact". This feature is very useful because it helps visualize which sections of your website have the most traffic, rather than having all your page URL at the same level.
This grouping feature is also very useful with Page Titles. You can use it for tracking custom flash events ("game / clickStart", "game / registerNewUser"), video events ("videos/ bestOf2011 / start", "videos/ bestOf2011 / pause"), simply organize your pages into a easier to analyse structure, etc.
In the Piwik Javascript tracking code, you can specify custom page titles by calling piwikTracker.setDocumentTitle() (Learn more about the JS Tracking API). For example, to track a custom page view when a user clicked on a button in your web app, you could write piwikTracker.setDocumentTitle("ajax/click view button");
piwikTracker.trackPageView();
You can also customize the delimiter to use for splitting your page URLs and Page titles into categories (or disable the feature by setting the delimiter to a character not in use in your Page titles). Edit your config/config.ini.php file, and set the following:
[General]
action_title_category_delimiter = ::
You can then define your custom page names as follows: piwikTracker.setDocumentTitle("Products :: Gardening :: Seeds id=123"); and your pages and categories will be grouped according to the :: delimiter.
For performance reasons, Piwik will by default only archive the first top 500 pages, top 1000 keywords, top 1000 websites, Custom Variables, etc. Piwik will then sum all the remaining pages, keywords, etc. under the label "Others".
If you wish to archive all the data, or simply archive more than the current rows limit, you can override these values in the configuration file config/config.ini.php. For example, to limit all table to 5000 entries, add the following in config/config.ini.php:
[General]
; maximum number of rows for any of the Referers tables (keywords, search engines, campaigns, etc.), and Custom variables names
datatable_archiving_maximum_rows_referers = 5000
; maximum number of rows for any of the Referers subtable (search engines by keyword, keyword by campaign, etc.), and Custom variables values
datatable_archiving_maximum_rows_subtable_referers = 5000
; maximum number of rows for any of the Actions tables (pages, downloads, outlinks)
datatable_archiving_maximum_rows_actions = 5000
; maximum number of rows for pages in categories (sub pages, when clicking on the + for a page category)
datatable_archiving_maximum_rows_subtable_actions = 5000
In some very rare cases, it might be useful to force Piwik to re-process the reports from the original logs. By default, reports will only be processed once (preferably with an automatic cronjob setup to run every hour) and then archived in the database. When you visit the Piwik UI for a previous day (or week, month, etc), all you see is pre-processed data read directly from these archive tables.
It is possible to force Piwik to re-process your reports in few different ways:
[Debug]
always_archive_data_day=1 to force archiving of the daily reports, and/or [Debug]
always_archive_data_period=1 to force archiving for all period reports (week, month, year). If you then visit the Piwik UI for a given date, reports will be re-processed. When you are done, do not forget to set these values back to 0[Debug]
always_archive_data_day=0
always_archive_data_period=0
Configuring Piwik so that all requests are made over SSL (https://) is an easy way to improve security and keep your data safer. To ensure that logins, passwords and the token_auth are not sent in the clear, you can manually set a config file setting.
[General] section:[General]
force_ssl=1
Piwik will then automatically redirect all http:// requests to route to the https:// equivalent. Learn more tips about how to secure Piwik.
Pages regularly appear and disappear on websites, other websites might link to wrong URLs on your website, etc.
You can track with Piwik which URLs are leading to a 404, and which referer pages link to 404 on your website.
_paq.push(['setDocumentTitle', '404/URL = '+String(document.location.pathname+document.location.search).replace(/\//g,"%2f") + '/From = ' + String(document.referrer).replace(/\//g,"%2f")]);_paq.push(['trackPageView']);
Piwik can track visits on your intranet website as long as Piwik itself is hosted in your intranet.
To make sure that all unique visitors are tracked correctly in your intranet, please edit your config/config.ini.php and add the following:
[Tracker]
trust_visitors_cookies = 1
This will ensure that even if all visitors have the same IP, browser configuration, OS, etc. they will be counted as unique visitors based on the first party cookies. If not set, you will see a lower number of visits.
Some Piwik users automatically provide their CMS customers with Piwik statistics. If you want to provide a one-click automatic login to Piwik for your users, you can use the 'logme' mechanism, and pass their login & the md5 string of their password in the URL parameters:
/pathpiwik/index.php?module=Login&action=logme&login=your_login&password=your_MD5_password
This will log the user (create a cookie in their browser) and redirect to the index.php on succesful login. We advise to do this authentication over HTTPS. Note that this authentication method doesn't work for the Super User.
You can also specify the URL to redirect after a successful login, if different from the default Piwik dashboard page:
/pathpiwik/index.php?module=Login&action=logme&login=your_login&password=your_MD5_pwd&url=http://piwik.mycompany.com/subpath/
You can also specify an idSite (website ID) to load by default after the redirect:
/pathpiwik/index.php?module=Login&action=logme&login=your_login&password=your_MD5_pwd&idSite=145
By default, the Piwik login screen will not load in iframe, as a security measure to prevent clickjacking. You can manually enable Piwik login screen to work from inside an iframe by adding the following config file setting in your config/config.ini.php:
[General]
enable_framed_pages = 1
Instead of loading the login screen in an iframe, you might want to use the logme() method to automatically log your users in Piwik remotely.
By default when user logs out he is redirected to the Login form. In your config/config.ini.php you can add under the [General] category the option:
login_logout_url="http://example.org/page"
When the user logs out, he will be redirected to this URL instead.
It is possible to keep all the websites information (names, defined goals, etc.) and only delete the stored analytics data. There is currently no tool available to delete all data automatically, but you can manually delete all data for a specific website in Mysql.
Connect to your Mysql database storing your Piwik data with your favorite client (for example phpMyadmin) and do the following:
DROP TABLE piwik_archive_numeric_2011_01, piwik_archive_numeric_XX; They will automatically be re-created from the Visitor logs when Piwik processes your reports.DELETE FROM piwik_log_visit WHERE idsite = X with X replaced by the website ID you wish to reset. The alternative solution is to use the Delete old reports and Delete old tracking data features, click to see the FAQ.
If you wish to set some specific pages or directories to not be tracked by Piwik, we recommend that you modify the Piwik Javascript Tracking code, and replace _paq.push(['trackPageView']); by if (!window.location.pathname.match(/^/(admin|login)//))
{
_paq.push(['trackPageView']);
}
In this example, all URLs except the ones containing "/admin/" or "/login/" will be tracked by Piwik.
Piwik reports on days, weeks, months and years, and you can also specify a Custom Date Range in the Calendar.
Click on the calendar, then on "Date Range". Now select on the left calendar the starting date for the range, and in the right calendar the end date of the range. Piwik will process in real time the reports for the requested date range.
In the Analytics API, you can also get reports for a custom date range. For example, to request any report for the range "Feb 15th - Feb 25th", you would use the parameters: &period=range&date=2011-02-15,2011-02-25
Most data table reports have a small search bar below the report. Here you can type data and press Enter key to search for this string within the report displayed above.
For example, in the "Keywords" report, you can search for "nature" and it would return all keywords matching "nature".
You can also use Regular Expressions in the search field. For example, a search for "nature|life" would match all rows containing "nature" or "life". All search strings containing any of the special characters from this list: . \ + * ? [ ] $ ( ) { } = ! < > | must be escaped with a back slash, eg. if you want to search for keywords containing "love!" you would search for "love\!".
You can edit the default noreply@yourdomain.com email address that will appear in the PDF reports emails by editing the configuration file config/config.ini.php, and adding under the [General] section, the following line:
noreply_email_address = "info@example.org"
All reports by email will now be sent from "info@example.org"
You can configure Piwik to use GMAIL as the mailserver. To do so, login as Super User, go to Settings > General Settings, and configure the form as follows:
All Piwik emails (Scheduled PDF Reports, Password reset confirmation, etc.) will now be sent using Gmail servers.
In your Piwik Javascript Tracking tag, add the following line:
_paq.push(['setCustomUrl', location.href.toLowerCase()]);
just before the line:
_paq.push(['trackPageView']);
All your pages will now be tracked as lowercase, eg. "Default.aspx" or "DEFAULT.aspx" will be tracked as "default.aspx".
Until Oct 2012, Piwik was relying on Feedburner and the 'Awareness API' to provide RSS. It used to provide the following information:
Unfortunately, Feedburner now owned by Google decided to shut down permanently their API. We are now considering doing Feed Analytics using Piwik. We are looking for supporters & funding to build a simple script that will track RSS & atom feeds usage! If you would like to help fund this feature, please get in touch with the core team or post a comment on this ticket.
Before a Database upgrade on a high traffic Piwik server, it is highly recommended to:
[Tracker]
record_statistics = 0[General]
maintenance_mode = 1<?xml version="1.0" encoding="utf-8" ?> <result><error message="Piwik is in scheduled maintenance. Please come back later." /></result>
When the Piwik update is finished, do not forget to re-enable Visit Tracking and/or the User Interface.
By default Piwik will not process the number of Unique Visitors for Years and Custom Date Ranges (for performance reasons).
The query to process the number of unique visitors is quite costly and takes seconds or even minutes to run on a High traffic Piwik server.
You can decide to enable or disable the unique visitors metric for specific periods by adding the following in your config/config.ini.php [General]
enable_processing_unique_visitors_day = 1
enable_processing_unique_visitors_week = 1
enable_processing_unique_visitors_month = 1
enable_processing_unique_visitors_year = 0
enable_processing_unique_visitors_range = 0
By default, unique visitors are processed for days, weeks and months (they are set to 1). You can for example enable yearly unique visitors by setting enable_processing_unique_visitors_year = 1
Note: processing the Unique Visitors metrics is using the Piwik logs. This requires that the feature "Delete old logs" is not used on your Piwik server.
By default, the Piwik Javascript code on all tracked websites contains the Piwik server URL. This is fine for most users, but someone (eg. a competitor) could run a script that would look at thousands or millions of websites and search for your Piwik server URL in the source code of these websites. This person could then find out all websites tracked in your Piwik instance.
In some cases you might want to hide this Piwik URL completely while still tracking all websites in your Piwik instance. It is possible to do by modifying your Piwik Javascript code, and point it to a "proxy piwik.php script" instead of your Piwik server URL. This piwik.php script has to be uploaded on each of the websites tracked, and will automatically "forward" all requests to your secret Piwik server.
Note: when you use this technique, the feature to exclude visits via the ignore cookie will not work.
In some cases, it might be interesting to enable third party cookies, so that a same visitor will get the same ID across all your domains and subdomains. Piwik doesn't report cross sites visits at this stage, so you will benefit from using third party cookies only if you run manual queries against Piwik database. To enable 3rd party cookies, edit your config/config.ini.php and add the following lines:
[Tracker]
use_third_party_id_cookie = 1
When this is enabled, Piwik tracker will serve a third party cookie containing an id visitor (16 chars ID). This ID will be the same for this visitor across all websites, and is stored in the database field "idvisitor".
By default, tracking campaigns in Piwik involves adding the required parameter pk_campaign (and optional parameter pk_kwd) to the URLs pointing to your website. Piwik also supports Google Analytics campaign parameters (utm_*).
It is also possible to customize these parameter names. For example, we would like to use the parameters names "campaign" (instead of pk_campaign) and "keyword" (instead of pk_kwd). To do so, there are two required steps:
_paq.push(['setCampaignNameKey', 'campaign']);
_paq.push(['setCampaignKeywordKey', 'keyword']);[Tracker]
campaign_var_name="campaign"
campaign_keyword_var_name="keyword"Note: the Campaign parameters can be used in the query string or in the hash as well (for cleaner canonical URLs), such as: "landing.html#pk_campaign=my campaign"
It is possible to configure a forward outgoing proxy in Piwik, so that all outbound Internet connections (eg. to check for new versions of Piwik, for SEO plugin, Feedburner plugin, etc.) go through the proxy. Check the FAQ Configure Outgoing proxy for more details.
There are 2 ways to tell Piwik to exclude and ignore your traffic:
To reset your password in Piwik, go to Piwik: below the login screen you will find a link "Lost your password?". After clicking the link, enter your Piwik username or Email address, and a link to reset your password will be sent to your email address.
Note: for security reasons, it is not possible to recover passwords, but only change them. We highly recommend to use a strong password and to enable automatic SSL for login screen in your Piwik server.
Piwik by default tracks the full IP address of all visitors to your site (you can anonymize this IP if you wish).
To view your visitor IP addresses:
Note: in both cases, the IP address will only be displayed if you are logged in Piwik: for privacy reasons, IPs are never displayed to the anonymous user.
In the database, the IP addresses and Visitor IDs are stored in Binary form for storage efficiency.
To display these values correctly you can use the following SQL query: SELECT inet_ntoa(conv(hex(location_ip), 16, 10)) as ip, conv(hex(idvisitor), 16, 10) as visitorId FROM piwik_log_visit;
This question is aimed for users who use the REST Tracking API to manually insert visits and actions in Piwik. The parameter cdt lets you define the date and time of the page view. If you set this date to a date in the past (for example, 3 days ago) and that Piwik has already processed the statistics reports for this date, you will not see the newly added data in Piwik.
To tell Piwik that past data was recorded after-the-fact and force the archiving to happen again for this date, you can use the API function: CoreAdminHome.invalidateArchivedReports. For example if you imported data in the past for a few specific websites on a couple different dates you could write:
?module=API&method=CoreAdminHome.invalidateArchivedReports&idSites=1,3,5&dates=2012-01-01,2011-10-15&token_auth=xyz
The next time auto archiving will run will automatically re-process the data for these particular dates.
Piwik tries to guess visitors and unique visitors using several elaborate techniques (first party UUID cookie, heuristics matching user settings, etc.). If several people use the same system or browser, Piwik might count them all at one visitor. Sometimes, a system makes it easy to know when this is the same person or not. For example some system ask users to login every time, so we know when a new user connects. If you are in the use case of multiple people using the same computer or website or app, then you could improve your unique visitor detection by trigger a new visit to Piwik every time the user logs in the system.
To create a new visit you can use the &new_visit=1 parameter in the Tracking API (see Reference docs).
If you are using the Javascript tracker, you are also able to create new visits on demand. First, enable this feature in your config.ini.php file, by adding the following: new_visit_api_requires_admin=0
[Tracker]
Then in your website, in Javascript, whenever a user logs in the system (or whenever there is a need to create a new visit) you may write the following (before the trackPageView call):
_paq.push(['appendToTrackingUrl', 'new_visit=1']);
When the page loads, a new visit will be created in Piwik. Note: this code should only be displayed once after the user logged in; if you leave this code in all the page views, it would create a new visit for each page view and make your Piwik reports much less useful.
The GeoIP databases are sold by MaxMind. MaxMind sells different databases, each with different amounts and types of information.
The country, region and city databases can be used to determine the location of an IP address with different amounts granularity:
The ISP and Organization databases can be used to determine the ISP and company of an IP address.
You can find more information on the commercial databases here.
MaxMind also provides two free databases that are less accurate than the commercial ones. One of the free databases can only be used to determine an IP address' country. The other, called GeoLite City, can be used to determine the same information as the commercial city database.
Needless to say, we recommend using one of the city databases.
You can download each of the free databases here.
Keep in mind that geolocation data will eventually become out of date. It is recommended you update your databases at least once a month.* The free databases are updated once a month on the first Tuesday.
* NOTE: We are currently working on an auto-updator for GeoIP databases. It will be in Piwik v1.9.1.
Once you get the database you want to use copy it to Piwik's path/to/piwik/misc/ subdirectory. If you're using the GeoLite City database, make sure you rename it from GeoLiteCity.dat to GeoIPCity.dat. This will help you avoid some potential problems.
If you're using Ubuntu or Debian run the following command:
sudo apt-get install php5-geoip php5-dev libgeoip-dev
If you have to build the extension by hand, first make sure you have the following installed:
Then run the following command:
sudo pecl install geoip
Finally, add the following to your php.ini file:
extension=geoip.so
Once the PECL extension is installed, you must configure it. Add the following to your php.ini file:
geoip.custom_directory=/path/to/piwik/misc
Replace /path/to/piwik with the path to your Piwik installation.
And finally, if you are using the GeoLite City database there is one more thing you need to do. The PECL extension won't recognize the database if it's named GeoLiteCity.dat so make sure it is named GeoIPCity.dat.
Restart the webserver and the GeoIP extension should now be loaded and working in Piwik > Settings > Geolocation.
Installing the module
If you're using Ubuntu or Debian, run the following command:
sudo apt-get install libapache2-mod-geoip
If you're using a system that uses RPM, you can try the following command:
sudo yum install mod_geoip
If you can't do either of these, you may have to build the module by hand.
Configuring the module
Open the GeoIP configuration file for the module (it can be located at /etc/apache2/mods-enabled/geoip.conf) and add the following lines:
GeoIPDBFile /path/to/database.dat
GeoIPScanProxyHeaders On
If you have multiple GeoIP databases (for example, a city one and an ISP one), you can add multiple GeoIPDBFile lines.
Restart the webserver and the GeoIP extension should now be loaded and working in Piwik > Settings > Geolocation.
Installing the module
First, check if your build of nginx is already using the GeoIP module. Run the following command:
nginx -V
If the output contains
--with-http_geoip_module
then you don't have to do anything to install it. You just have to configure nginx to use it.
If it doesn't contain
--with-http_geoip_module
then you'll have to build nginx yourself, passing
--with-http_geoip_module
to
./configure
. For more information on building nginx, see this.
Configuring the module
Open your server configuration file and add the following to the http section:
geoip_country /path/to/CountryGeoIP.dat
geoip_city /path/to/GeoIPOrLiteCity.dat;
Replace
/path/to/CountryGeoIP.dat
with the path to your GeoIP country database and replace /path/to/GeoIPOrLiteCity.dat with the path to your GeoIP city database.
IMPORTANT: For the nginx module, you must provide both a country database and city database. If you just provide a city database, Piwik will not see any country information.
If you're using an Organization or ISP database, you can add it to the config with:
geoip_org /path/to/GeoIPISPOrOrg.dat
Unfortunately, you can only supply one database here for the nginx module, so if you have both the ISP and Organization database, you will have to pick one to use.
Now make sure the following parameters are passed to fastcgi:
fastcgi_param GEOIP_ADDR $remote_addr;
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;
If you're using a city database, add the following parameters:
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_REGION_NAME $geoip_region_name;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_AREA_CODE $geoip_area_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
If you're using an organization database, add the following parameters:
fastcgi_param GEOIP_ORGANIZATION $geoip_org;
That's all, folks. Enjoy!
If you want to know the location of the visits your website received before you started using Piwik with GeoIP, we've prepared a script that will help you. This script will geolocate every one of your visits that have not been located. Since it goes through every visit in your database, it will take a very long time to run.
The script is called geoipUpdateRows.php and is located in the misc/others subdirectory of your Piwik installation. You don't need to do anything special to run it, just cd into the directory and run:
php ./geoipUpdateRows.php
Things you should note:
After you run the script make sure you reprocess your reports so new reports w/ location data will be shown.
MaxMind's Organization and ISP databases can be used to get company/provider information for visitors.
To use them, simply select & purchase the database you want and upload it to the misc Piwik directory.
If you are using a GeoIP server module you may have to do more to get it to work w/ Piwik. The relevant instructions are here for Apache, and here for Nginx.
If you are using the PECL extension and are using a custom directory for your GeoIP databases, upload the new database to this directory instead of Piwik's misc directory.
Also, make sure Piwik's Provider plugin is deactivated otherwise the new GeoIP information will be overwritten.
Transitions is a very useful Piwik feature, which is also fundamentally different from most of the other Piwik reports. It does not use archiving to pre-process reports but instead it retrieves its information directly from the logs. This means that the Transitions report can take a few seconds to load on websites with more traffic, but on the other hand, Transitions does not require pre-processing and does not affect Archiving performance.
In our tests, Transitions could handle periods with several 100.000 pageviews quite well. Once you get into the millions, it starts to test your patience. But in general, performance depends heavily on the power of your database server and other things like traffic patterns.
Also, the first time you open Transitions on any page might be a fair bit slower than consecutive calls. This is because after the first time, the database caches are hot and the queries can be executed much faster.
If you have lots of traffic, you shouldn't open Transitions on long periods of time. But that's not really a problem because the most important thing is to have enough data in order to get statistically representative results. If you achieve this mass with a single day, it should be fine if you only use it for yesterday (or today).
Since the aggregation happens in the database, you can tune things by adding some indexes to the MySQL tables.
You can create the following INDEX to speed up Transitions on page URLs:
ALTER TABLE `piwik_log_link_visit_action` ADD INDEX `transitions_url` ( `idaction_url` , `idsite` , `server_time` ); ALTER TABLE `piwik_log_link_visit_action` ADD INDEX `transitions_url_ref` ( `idaction_url_ref` , `idsite` , `server_time` ); ALTER TABLE `piwik_log_visit` ADD INDEX `transitions` ( `visit_entry_idaction_url` , `idsite` , `visit_last_action_time` );
We have confirmed that these indexes drastically improve performance for pages that had a fairly low share of the overall traffic. They do add a little extra complexity when inserting new logs but speeding up Transitions also means having the queries it does out of system in a shorter amount of time, which in turn has a positive impact on tracking performance.
You don't need all of these indexes. Instead, you can add them one by one until the performance of Transitions is satisfactory.
If you are a power user and you tried this out, we would really appreciate to hear about your experience. Please get in touch with us.
Piwik reports Pages URLs and Page Titles. You can see the Top Entry Pages by clicking on Actions > Entry pages. By default, it shows the top Entry Page URLs, but you can switch to the Entry Page Titles by clicking on the "Related report: Entry Page Titles" link below the report.
Similarly you can access the top pages that people see before leaving the sites, click on Actions > Exit pages. It lists the "worst" Exit Pages URLs by default, but you can access the top exit page Titles by clicking on the Related reports link below the table.
By default, Piwik will use the IP address to decide Unique Visitors. Sometimes, for example if you are using the Tracking API, you may prefer not to use the IP address to decide Unique Visitors, but instead you may set a Visitor ID manually. In this case, you can force Piwik to assign Visitors with the same IP but different Visitor ID to different unique Visitors. To do edit your config/config.ini.php and add below
[Tracker]
the following:
[Tracker]
trust_visitors_cookies = 1
By Default, if you use the standard Javascript Tracking Tag, Piwik will only track visitors with Javascript Enabled in their web browser. You can however configure Piwik to also track users with Javascript disabled: to do so, edit the Piwik Tracking Tag <noscript> and change:
<noscript><p><img src="http://piwik-server.com/piwik.php?idsite=1" style="border:0" alt="" /></p></noscript>
Replace with the following:
<noscript><p><img src="http://piwik-server.com/piwik.php?idsite=1&rec=1" style="border:0" alt="" /></p></noscript>
After making this change and adding &rec=1, visitors with disabled Javascript will execute the noscript and will load the piwik.php image and will have their traffic recorded in Piwik.
Note: bots will also be tracked with this technique. If you wish to track visitors, but not track bots, see this blog post for a solution.
Often when using Piwik you may have findings from the data, insights, or maybe you just would like to note down the changes you have made on the website. In Piwik you can take notes on the graph and set any number of text messages. They're called Annotations (click to learn more).
In Piwik we recommend to configure Geo Location so that your visitors are accurately tracked. Once it is setup, you can use the GeoIP database to get an IP to Country, or IP to City, or IP to Region information. We have added a simple API that you can re-use, called "UserCountry.getLocationFromIP". To use it, go to Piwik, click API, click on "UserCountry" then on the getLocationFromIp call.
Here is a typical response from the API.
You could use this API to for example add geo location functionnality to your Apps.