Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 3 additions & 11 deletions docs/bot-traffic-filtering.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ This is a tradeoff of aggressive bot filtering. It keeps automated traffic out o

## Why you might still see some bot traffic

No filter is perfect. Bots emerge constantly and there is always a gap between when a new bot appears and when we identify and block it. If you see a sudden spike from an unfamiliar source with a very high bounce rate and short session duration, it may be bot traffic we haven't classified yet.
No filter is perfect. Bots emerge constantly and there is always a gap between when a new bot appears and when we identify and block it. If you see a sudden spike from an unfamiliar source with a very high bounce rate and near-zero visit duration, it may be bot traffic we haven't classified yet. Check time on page, scroll depth and goal conversions for stronger signals.

## Investigating a suspicious traffic spike

If you see an unexpected spike in your dashboard, run through these steps to confirm whether it is bot traffic and block it.

### 1. Check bounce rate and session duration
### 1. Check bounce rate and visit duration

Apply a [filter](filters-segments.md) to isolate the traffic source, country or page that spiked. Bot traffic almost always shows a near-100% bounce rate and zero or near-zero session duration. If the filtered view shows normal engagement metrics, the traffic is more likely real.
Apply a [filter](filters-segments.md) to isolate the traffic source, country or page that spiked. Bot traffic almost always shows a near-100% bounce rate. Visit duration will also read as zero since bounced visits count as 0 seconds in Plausible. If the filtered view shows meaningful time on page, scroll depth and goal conversions, the traffic is more likely real. Note that low-quality traffic is not the same as bot traffic: real visitors can arrive from the wrong source or with expectations the page does not meet, producing low engagement without being automated. Plausible's filters target non-human visits only.

### 2. Identify the source

Expand Down Expand Up @@ -63,14 +63,6 @@ Shields rules take effect immediately and apply going forward. They do not remov

If you have applied Shields rules and the traffic continues, or if the spike is large enough to affect your subscription tier, [contact us](https://plausible.io/contact) with the dates, source and any patterns you've noticed. We'll investigate and update our filters if needed.

## What you can do

- **Block by IP, hostname or country.** Use [Shields](excluding.md) to block visits from specific IP addresses, hostnames or countries from being recorded.
- **Filter by page.** Use [page exclusions](excluding-pages.md) to exclude specific URLs from your stats.
- **Filter your dashboard view.** Use [filters and segments](filters-segments.md) to narrow down traffic when analyzing your data.

## How Plausible improves bot filtering over time

We continuously monitor incoming traffic patterns. When we identify new sources of non-human traffic or trends that look automated, we update our filtering rules. The filtering improves over time without any action needed on your end.

If you notice something in your dashboard that looks like unfiltered bot traffic, [contact us](https://plausible.io/contact) with the dates, source and any patterns you've noticed. We'll investigate and update our filters if needed.
2 changes: 1 addition & 1 deletion docs/custom-event-goals.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ If you set up custom events through [Google Tag Manager](https://plausible.io/gt

### Custom properties showing as (none)

If you see `(none)` for a custom property value, the property name in your code does not match what you entered in the goal settings, or the value is not being passed at the moment the event fires. Check that the property is defined before the `plausible()` call and that the name matches exactly.
`(none)` can appear for several reasons, including sending a `null` or `undefined` value, sending the property with some events but not all, or viewing the Properties tab without a custom event filter applied. See [Custom Properties: (none) values](/custom-props/introduction#none-values) for the full explanation. For troubleshooting: confirm the property value is not `null` or `undefined` at the moment the event fires, and that the property name is spelled exactly the same way in every event call.

---

Expand Down
1 change: 1 addition & 0 deletions docs/data-access.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Plausible gives you several ways to access your stats outside the dashboard. The
| Pipe data into a data warehouse or BI tool | [Warehouse connectors](#data-warehouse-connectors) |
| Get event-level data for warehousing or compliance | [Scheduled raw exports](#scheduled-raw-event-exports) |
| Query data in natural language through AI tools | [MCP server](#mcp-server) |
| View stats from a mobile or desktop app | [Mobile and desktop apps](data-pipelines.md) |

---

Expand Down
4 changes: 3 additions & 1 deletion docs/introduction.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,12 @@ description: "Plausible Analytics documentation. No cookies, no personal data, n
<h3>API</h3>
<p>Query your data, send events and manage sites programmatically.</p>
<ul>
<li><a href="/docs/data-access">Accessing your data</a>: choose the right method for your use case</li>
<li><a href="/docs/stats-api">Stats API</a>: query your analytics data programmatically</li>
<li><a href="/docs/events-api">Events API</a>: send custom events from your backend or server</li>
<li><a href="/docs/sites-api">Sites API</a>: manage sites and goals via API</li>
<li><a href="/docs/stats-api-playground">API playground</a>: explore queries interactively</li>
<li><a href="/docs/stats-api-playground">Stats API playground</a>: try Stats API queries interactively</li>
<li><a href="/docs/data-pipelines">Viewing stats elsewhere</a>: access your data from third-party tools, apps and AI</li>
</ul>
</div>

Expand Down
8 changes: 4 additions & 4 deletions sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,14 @@ module.exports = {
'subdomain-hostname-filter',
'metrics-definitions',
'keyboard-shortcuts',
'looker-studio',
'bot-traffic-filtering',
'dashboard-faq',
{
type: 'category',
label: 'Import & Export',
label: 'Import',
items: [
'google-analytics-import',
'csv-import',
'export-stats',
],
},
],
Expand Down Expand Up @@ -91,12 +89,14 @@ module.exports = {
],
},
],
'API': [
'Data access': [
'data-access',
'stats-api',
'stats-api-playground',
'events-api',
'sites-api',
'export-stats',
'looker-studio',
'data-pipelines',
],
'Account Settings': [
Expand Down
Loading