A looker studio seo dashboard puts your Search Console and GA4 numbers on one page. You stop exporting CSVs every month, and clients stop asking where their traffic went. It’s free and it updates itself. You can build a solid version in an afternoon with Google’s own connectors and no paid tools. This is the setup I’d recommend to most site owners.
First, a note on the name. In April 2026 Google renamed Looker Studio back to Data Studio. It’s the same product with the same free tier, and existing reports moved across with no action needed. Most people still search for Looker Studio, so I use both names in this guide.
What You Need Before You Start
Check three things before you open a blank report. Each one saves an annoying detour later.
- Search Console access. You need at least view permission on the property. Sign in with the same Google account you use for Looker Studio.
- GA4 access. You need at least Read & Analyze permission on the GA4 property.
- A clean GA4 setup. If you want conversions on the dashboard, set up and test your GA4 key events first.
If you’re building for a client, ask them to add your account to both properties. Don’t use their login.
Step 1: Connect Search Console (and Pick the Right Table)
In Looker Studio, create a blank report, click Add data and choose the Search Console connector. Pick Google’s own connector, not a partner one. Select your site, and you’ll be asked to choose a table. In my view, this choice matters more than anything else in the setup.
Site Impression vs URL Impression
The connector offers two tables, and one data source can only use one of them. Google’s Search Console connector documentation explains this.
- Site Impression groups data by property. If your site shows twice for one search, that counts as one impression. Use it for site-wide totals, queries, countries and devices.
- URL Impression groups data by page. Each URL that appears counts separately, and it adds the Landing Page dimension. Use it for anything page-level.
Because of this, the two tables won’t match. URL Impression totals are usually higher for impressions, and average position can differ too. Neither is wrong. They count different things. Search Console’s own performance report works the same way, which is why its chart and its Pages table rarely agree.
The practical answer is to add the connector twice: once with Site Impression and once with URL Impression. Name them clearly, for example “GSC – Site” and “GSC – URL”. Then you never pick the wrong one when building a chart.
Choose the Search Type
Both tables let you choose a search type. Site Impression supports web, image, video and news. URL Impression adds Discover and Google News. For most SEO dashboards, web is the default you want. If you publish news or get Discover traffic, add a separate URL Impression data source for those. That keeps them out of your web numbers.
Clicks from AI Overviews and AI Mode are included in the web search type. There’s no separate filter for them in Search Console or in the connector, so you can’t separate them on your dashboard.
Step 2: Connect GA4
Click Add data again and choose the Google Analytics connector. Pick the account and the GA4 property. The connector shows the fields available in the GA4 Data API, including custom dimensions and metrics you’ve set up on the property.
A few fields you’ll use all the time:
Session default channel groupto filter to Organic Search.Landing page + query stringfor page-level engagement.Session sourcefor referral and AI traffic.Sessions,Engaged sessions,Engagement rateandKey eventsas your core metrics.
Create a reusable filter now: Session default channel group equals Organic Search. Name it “GA4 – Organic only”. I always start filter names with the data source. It stops you from applying a GA4 filter to Search Console data by mistake.
One thing to know early: GA4 segments and comparisons from the GA4 interface don’t carry over through this connector. You rebuild that logic with filters and calculated fields instead.
Step 3: Build the Pages of Your Looker Studio SEO Dashboard
Five pages cover what most site owners and clients need. Add pages from the Page menu. Keep the same header, logo and date control on each one so the report feels consistent.
Page 1: Overview
This page answers “are we up or down?” in five seconds.
- Add four scorecards from “GSC – Site”: Clicks, Impressions, Site CTR and Average Position.
- Add two scorecards from GA4 with the organic filter: Sessions and Key events.
- Add a time series chart of Clicks and Impressions by Date. Use two axes so impressions don’t flatten the click line.
- Add a date range control at the top right.
Keep this page to about six to eight charts. Every chart is a separate query, and GA4 queries count against quotas. That matters later.
Page 2: Queries
Use “GSC – Site” for this page.
- Add a table with Query as the dimension and Clicks, Impressions, Site CTR and Average Position as metrics. Sort by Clicks.
- Add a search box control (an input box filter) on Query so anyone can find a keyword without scrolling.
- Add a branded vs non-branded breakdown using the calculated field in Step 4. Show it as a time series or a stacked bar by month.
I like to add a second table here. Filter it to Average Position between 8 and 20, with impressions above a sensible minimum for your site. These are queries where you’re close to page one, and a content update could make a real difference.
Page 3: Landing Pages
This page uses both sources, but in separate charts, not a blend.
- From “GSC – URL”, add a table with Landing Page, URL Clicks, Impressions, URL CTR and Average Position.
- From GA4 with the organic filter, add a table with Landing page + query string, Sessions, Engagement rate and Key events.
- Add a page-section dimension from Step 4 to both. Then you can see Blog vs Product vs Service performance at a glance.
You can blend (join) the two tables on landing page, but the URL formats differ. Search Console gives full URLs and GA4 gives paths. Blends also make totals harder to trust. The two tools count different things anyway, as I explain in why Search Console and GA4 numbers don’t match. In my experience, two side-by-side tables are clearer for clients.
Page 4: Devices and Countries
Use “GSC – Site” so it matches the overview.
- A bar chart of Clicks and Site CTR by Device Category.
- A geo map or table of Clicks by Country.
- A drop-down control for Country and one for Device Category, so a viewer can filter the whole page.
Sometimes mobile CTR lags well behind desktop for the same queries. That is a common clue that titles are being cut off, or that something else on the results page is taking attention. If you see that gap, check how your titles really display on mobile for your top pages.
Page 5: AI Referral Traffic
Search Console can’t show traffic from ChatGPT, Perplexity, Gemini, Copilot or Claude, because those visits don’t come from Google Search. GA4 can, because they arrive as referrals.
You may have already built an AI assistants channel in a GA4 custom channel group. If so, look for it in the connector’s field list (refresh the data source’s fields if you created it recently). If it isn’t there, or you want the logic visible inside the report, rebuild it with the CASE field in Step 4. Our guide to tracking ChatGPT, Perplexity and Gemini visits in GA4 explains which referrer domains to include and why.
Then build:
- A scorecard of Sessions where the channel equals AI assistants, with a comparison to the previous period.
- A table of Session source and Sessions for that channel, so you can see which assistants send visits.
- A table of Landing page + query string with Sessions, Engagement rate and Key events for AI visitors.
Treat this number as a minimum. App clicks and copied links often lose their referrer and show up as Direct.
Step 4: Calculated Fields and Filters That Do the Heavy Lifting
Create calculated fields at the data source level (Resource > Manage added data sources > Edit > Add a field). That way they’re available on every page. Looker Studio uses RE2 regular expressions (a pattern language for matching text). Two details often trip people up:
REGEXP_MATCHmust match the whole value, so wrap patterns in.*.REGEXP_CONTAINSmatches any part of the value.- Inside quotes, a literal dot needs a double backslash:
\..
Branded vs Non-Branded Queries
Add this to “GSC – Site”. Replace the brand terms with your own, including common misspellings and product names.
CASE
WHEN Query IS NULL THEN "Anonymized"
WHEN REGEXP_MATCH(Query, "(?i).*(acme|acmee|akme|acme widgets).*") THEN "Branded"
ELSE "Non-branded"
END
The (?i) flag makes the match ignore upper and lower case. Keep the brand list tight. A short brand name that’s also a common word will pull in unrelated searches. So check the Branded bucket for false matches after you save.
I think splitting brand from non-brand is the single most useful view for clients. Brand demand reflects marketing and reputation. Non-brand clicks reflect SEO work.
Page Sections From URLs
Add this to “GSC – URL” to group pages by folder.
CASE
WHEN REGEXP_CONTAINS(Landing Page, "/blog/") THEN "Blog"
WHEN REGEXP_CONTAINS(Landing Page, "/services?/") THEN "Services"
WHEN REGEXP_CONTAINS(Landing Page, "/products?/") THEN "Products"
WHEN REGEXP_MATCH(Landing Page, "^https?://[^/]+/?$") THEN "Homepage"
ELSE "Other"
END
Create the same field in GA4 using Landing page + query string. Change the homepage rule to ^/$, because GA4 stores paths, not full URLs.
Clean URLs for Readable Tables
Full URLs make tables wide and hard to scan. This removes the protocol and domain from the Search Console Landing Page field:
REGEXP_REPLACE(Landing Page, "^https?://[^/]+", "")
AI Assistants Channel
Add this to the GA4 data source. It labels known AI referrers and falls back to GA4’s default channel for everything else.
CASE
WHEN REGEXP_MATCH(Session source, ".*(chatgpt|openai|perplexity|gemini\.google|copilot\.microsoft|claude\.ai).*") THEN "AI assistants"
ELSE Session default channel group
END
Review your own Session source list every few months and add any new assistants that appear.
Filters Worth Saving
- GSC – Exclude anonymized: exclude rows where Query is null. Use it on query tables only, not on totals.
- GSC – Non-branded: include where your brand field equals Non-branded.
- GA4 – Organic only: Session default channel group equals Organic Search.
- GA4 – AI assistants: your AI channel field equals AI assistants.
Step 5: Set Up Date Comparisons
- Select a chart, open the Setup panel and find Date range.
- Set a Comparison date range to Previous period or Previous year.
- On scorecards, the change appears as a percentage with an arrow. On time series charts, the comparison period appears as a second line.
Use previous year for seasonal businesses. A garden centre comparing April to March will always look like a hero. Comparing April to last April tells the truth. One exception: impressions from 13 May 2025 onward were overcounted until Google fixed a Search Console logging error, so add a note to year-on-year impression comparisons that cross that date.
Search Console data runs a couple of days behind, and the newest days can still change. If your date range ends “yesterday”, the last points will look like a crash. Use an advanced date range that ends three days ago. Also use a multiple of seven days (28, not 30) so weekday and weekend patterns line up. I set this on every report I build.
Looker Studio has no built-in annotations. A short text box noting known events, such as Google’s May 2026 core update or a site migration, stops people from drawing conclusions without context.
Step 6: Share the Dashboard With Clients
Sharing is where most dashboards either impress or leak data. Get the credentials right first.
Choose Data Credentials
Each data source has a credentials setting:
- Owner’s credentials: viewers see data through your access, so they don’t need their own Search Console or GA4 permission. This is the usual choice for client reports.
- Viewer’s credentials: each viewer must have their own access to the property. Use it for internal reports where access should match existing permissions.
With owner’s credentials, anyone who can view the report sees the data. Never set link sharing to “anyone with the link” on a report that runs on owner’s credentials, unless you’re happy for that data to be public. This is the mistake I’d watch for most.
Share the Report
- Click Share and invite the client’s email addresses as viewers, not editors.
- In the sharing settings, stop editors from changing access and adding new people.
- Use Schedule delivery to email a PDF of the report each month on a set day.
- Make a copy of the finished report as a template. For the next client, copy it and swap the data sources.
If you manage many sites, data controls let a viewer switch between properties they have access to. That saves you building one report per client.
Limitations to Know Before You Rely on It
A free dashboard has trade-offs. I explain them up front, because it prevents awkward client calls.
Anonymized Queries
To protect user privacy, Search Console doesn’t show every query. Rare queries are grouped into a blank row, so your query table will never add up to your site total. On many sites, especially those with lots of long-tail traffic, the gap is large. Explain this once in a text box on the Queries page.
GA4 Thresholds and Sampling
GA4 can hold back rows when a report could identify individuals, especially when Google signals or demographic data are involved. Low-traffic pages and AI referral rows are the first to disappear. The connector should match GA4’s standard reports, not Explorations. So if a number differs from an Exploration, compare it against the matching standard report instead. Very detailed tables over long ranges can also bundle smaller rows into an “(other)” row.
Connector Quotas
Every GA4 chart is a request to the GA4 Data API, and each request uses tokens. A standard GA4 property gets 200,000 core tokens per day, 40,000 per hour and 10 concurrent requests. These are listed in Google’s Data API limits and quotas. There’s also a limit of 14,000 tokens per project per property per hour and 120 potentially thresholded requests per hour.
When a busy report or many viewers go over these, charts show a quota error until the quota resets. To stay under them:
- Keep GA4 charts to a sensible number per page.
- Avoid long date ranges with high-cardinality dimensions (fields with very many different values), like full page URLs plus query strings.
- Use the Extract Data connector to take a snapshot of heavy GA4 tables, then build charts on the extract.
- Leave data freshness at a reasonable interval. Don’t force frequent refreshes.
Other Gaps
- Search Console keeps about 16 months of data, so year-on-year comparisons only go back so far. Export key totals monthly if you need a longer history. The Search Console bulk data export to BigQuery is the other way to keep a longer record.
- Totals can show as null when a table is filtered by a calculated field. If a scorecard looks blank, check whether a calculated-field filter is applied.
For quick, one-off questions, Search Console’s built-in tools may be faster than building a chart. The Search Console AI report builder is handy for that, while the dashboard handles the regular view.
Conclusion
A looker studio seo dashboard doesn’t need paid connectors. Connect Search Console twice (Site Impression and URL Impression) and connect GA4. Build five focused pages, and let a few calculated fields do the sorting: brand vs non-brand, page sections and AI referrals. Add comparisons and set credentials carefully before sharing. Then explain anonymized queries and quotas so nobody misreads the numbers.
Once it’s running, I’d use the AI referral page as your next lead. If those visitors engage and convert, read how to write content AI assistants can quote to earn more of them.



