Search Console answers "what did Google searchers see and click." On-site analytics answers "what did browsers do after they arrived." SiteLine keeps both on one subscription and one Domains list. It does not merge them into a single magic number.
If you try to make GSC clicks equal SiteLine pageviews, you will fail. Clicks are Google-reported search clicks with ~2 days of publisher lag. Pageviews are cookieless first-party events from browsers that ran your tracker. Different clocks, different populations, different bots, different ad-blocker loss.
Use them as a join on page and day, not as a reconciliation of totals.
What each side actually stores
Search Console in SiteLine
- Backfill of the ~16 months Google still holds when you connect a property.
- Nightly import. The latest 7 days are re-imported because Google revises them.
- Freshness: about 2 days behind. On Wednesday, expect data through Monday.
- Up to 25,000 rows per day per report. The Search Console UI caps what you see at 1,000.
- Dimensions: query, page, query + page, country, device, search appearance.
- Metrics: clicks, impressions, CTR, average position (impressions-weighted; do not average averages yourself).
- Query totals can sit below site totals. Google withholds anonymized rare queries. Headline site metrics come from site totals, not from summing the query table. Dimension footers are "total of shown rows."
- History is kept while you subscribe, past Google's 16-month window.
On-site analytics
- Pageviews and custom events from the script or React SDK.
- Cookieless daily visitor hash.
- Live view of roughly the last 30 minutes.
- Paths, referrers, countries, devices, browsers, OS, UTMs, event names, goals, funnels.
- No Google lag. Soft visibility caps on plans.
CSV export exists on Search Console reports. Analytics is read in the dashboard (and via MCP if you use an agent). Do not expect a combined CSV of "clicks + pageviews" from one button.
1. Connect the Search Console property
Connect Google with the read-only webmasters.readonly scope and pick the property. SiteLine imports 16 months, then keeps it current. A young property has less than 16 months. That is Google, not a failed backfill.
2. Enable analytics on the same domain
On the Domains list, use Enable analytics on the row, or Add analytics if the host is not there yet. Install the tracker. Allowlist the hostnames people actually use.
GSC and analytics can exist independently. A domain can have analytics without Search Console, and the reverse. Combining them only works when both are on.
Stopping Search Console tracking deletes imported GSC history in the background. Analytics on that domain is unchanged. Removing analytics does not disconnect GSC.
3. Pick a landing page, not a site total
Open the Search Console Page report. Sort by clicks. Pick one URL you care about (https://example.com/pricing).
Note, for a date range that has already landed in GSC (not yesterday):
- Clicks
- Impressions
- Average position
- Top queries for that page (query + page)
Then open analytics for the same host. Set the same calendar dates. Open the Pages breakdown. Find /pricing.
You now have:
- Google clicks to that URL
- SiteLine pageviews and visitors on that path
- Referrers and UTMs for the on-site side (GSC will not give you those)
Clicks < pageviews is normal (people refresh, internal links, direct). Clicks >> pageviews on a URL usually means the tracker is missing, blocked, or the allowlist dropped www. It can also mean Google is sending traffic to a URL your app redirects off of — GSC page is the URL Google counted, analytics path is where the browser ended up.
4. Use queries to explain the landing, analytics to explain the next step
Queries tell you the promise. If /pricing ranks for "cheap X" and your funnel drops between /pricing and /signup, the copy and the query are arguing. SiteLine will not auto-join query → session. You join them with the page.
For conversions, define goals on a thank-you path or a named event. GSC has no conversion column. Do not stuff conversion into a query report.
5. Respect the clocks
Do not put "today's GSC clicks" in a client Slack. They are not published yet. Analytics Live is for today. GSC is for the closed days.
When you compare week-over-week, use completed GSC days on both sides. Mixing a fresh analytics week with a two-day-lag GSC week is how agencies invent emergencies.
Position and CTR must stay weighted. Summing clicks and impressions across days and then dividing is correct. Averaging daily CTR or position is not. SiteLine's site totals already do this properly. Your spreadsheet might not.
What not to do
- Do not treat 25k rows as "every query Google has." The tail still truncates; Google also anonymizes.
- Do not sum query-table clicks and call it site clicks.
- Do not expect country in GSC (searcher country) to match analytics country (request geography on the hit).
- Do not wait for these numbers to match GA4. They will not. Different identity, different filters, different product.
FAQ
Can I see Search Console queries inside the analytics page report?
No. Queries live in Search Console reports. Paths live in analytics. Join on page URL/path and date. That is the product.
Why is the query report's total lower than the site total?
Google withholds anonymized rare queries, and SiteLine caps dimension import at 25,000 rows per day per report. Read headline clicks from site totals. Treat query tables as the visible head.
Does one plan cover both?
Yes. Starter $4.99, Growth $19.99, Scale $99.99. Unlimited GSC sites and unlimited analytics domains share one event pool for pageviews and custom events. GSC import is not that event pool. Billing and register.