---
title: "One-page SEO and speed check with a hosted dashboard"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/43f4d0b0-ca22-4302-9bd0-8b6a4841cda3"
updated: "2026-11-09"
---

# One-page SEO and speed check with a hosted dashboard

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that checks one web page for a market you pick. DataForSEO measures it, a Gemini agent reads the results and the live page, and an interactive HTML dashboard with an action plan lands in your S3-compatible bucket.

One-page SEO and speed check with a hosted dashboard is an n8n workflow in the Marketing \& SEO category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-09. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow checks one web page and publishes what it finds as an interactive dashboard you can send. A form takes the page’s address, a country and a language. DataForSEO crawls the page, times it on a phone with Lighthouse, and lists the keywords it ranks for there and keyword ideas for its site. A Gemini agent reads those results and the live page, fetched through Firecrawl, and writes a numbered action plan. The dashboard lands in your own S3-compatible bucket. Nothing on the site changes. Twenty-two nodes run it.

### Who it suits

SEO freelancers, agencies and site owners who want a fast read on one page that matters, with a link to hand a client. Skip it for a whole site. It checks one page a run.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| SEO consulting | Freelance consultants | Check a prospect’s home page and send the dashboard with the pitch | A consultant opens a sales call on the first three items of the action plan. |
| Web agencies | Developers and project leads | Check a client’s landing page once a month | Each month’s dashboard keeps its own file, since the name carries the date. |
| Online retail | Shop owners | Check a product page in the market it sells to | A shop picks the United Kingdom and English and sees which searches already find the page. |
| Content marketing | Content leads | Read the keyword ideas before rewriting a page | A content lead takes two terms from the table view into the new draft. |

You need some n8n and four accounts: DataForSEO, Google AI Studio, Firecrawl and a storage provider with a public bucket. Its author puts setup at about 12 minutes, with those accounts ready.

### Where to use it

Any n8n that can reach DataForSEO, Google, Firecrawl and your bucket will run it. The result is one web page, so it opens in any browser.

- n8n Cloud: import the file, add three credentials and paste one key
- Your own n8n server: the same file and steps
- Cloudflare R2 or Amazon S3: any bucket n8n’s S3 node can write to and the public can read
- A client update: send the dashboard’s address with a proposal or a monthly report

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Make the bucket readable from a public address first, since the last node only builds that address.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| DataForSEO | An account with funds, and its API login and API password |
| Google AI Studio | A Gemini API key |
| Firecrawl | An API key, for the agent’s page fetch |
| A bucket | S3-compatible, open to the public for reading, with an access key that can write to it |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an HTTP Basic Auth credential with your DataForSEO API login and password. Select it in `On Page SEO`, `Get Ranked Keywords`, `On Page Lighthouse (Mobile)` and `Keyword for Site`.
3. Add a Google Gemini (PaLM) API credential and select it in `Gemini 2.5 Pro`.
4. In `URL_search`, replace `<YOUR_FIRECRAWL_KEY>` in the Authorization header with your key. The brackets go too.
5. Add an S3 credential for your storage, select it in `Cloudflare Upload` and replace `YOUR_BUCKET_NAME` with the bucket’s name.
6. In `Get Research URL`, replace `YOUR_PUBLIC_URL` with the bucket’s public address, with no slash at the end.
7. Save, open the test address of `On form submission` and check a page of your own.
8. Press Publish once the dashboard opens.

DataForSEO’s API password is a separate one from your sign-in. On Cloudflare R2, the S3 credential’s region is `auto` and its endpoint is your account’s `r2.cloudflarestorage.com` address.

### How to use it

Open the form, paste the page’s full address with https, and pick the country and language whose search results you care about. The form thanks you at once while the run goes on. When it ends, open the run under Executions. The dashboard’s address is the `url` field that `Get Research URL` returns.

What to change for a different result

| To change | Where |
| --- | --- |
| The markets on offer | The dropdowns in \`On form submission\` and the maps in \`Get Country \& Language Code\`, spelt alike |
| How many ranked keywords | \`limit\` in the body of \`Get Ranked Keywords\` |
| Which ideas count | The search volume floor in \`Filter Keyword for Site\` |
| Phone or desktop | \`for\_mobile\` in \`On Page Lighthouse (Mobile)\` |
| The analysis | The agent’s system message and the example in \`Structured Output\` |
| The dashboard | The HTML and CSS in \`Code\` |

### Example

You check a bakery’s menu page for the United Kingdom in English.

```text
Page URL: https://bakery.example/menu
Country: United Kingdom
Language: English
```

`Get Country & Language Code` sends DataForSEO the location code 2826 and the language `en`. The agent answers in the parser’s shape, trimmed here:

```json
{
  "analyzedUrl": "https://bakery.example/menu",
  "executiveSummary": { "headline": "…", "summary": "…" },
  "keyScores": [{ "metric": "Performance", "score": "…" }],
  "seoAnalysis": { "strengths": ["…"], "weaknesses": ["…"], "contextualEvidence": [{ "finding": "…", "evidence": "…" }] },
  "geoAnalysis": { "summary": "…", "contentReadiness": "…", "issues": ["…"] },
  "actionPlan": [{ "priority": 1, "title": "…", "description": "…", "tags": ["…"] }]
}
```

The file is saved as `bakery` plus the day’s date, so a check on 3 November 2026 becomes `bakery20261103.html` at your public address. It opens on the agent’s headline and scores. A technical panel, the evidence, the action plan and a bubble chart of keywords sized by search volume follow.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Here four rows run side by side, one for each DataForSEO call, and `Merge` waits for all four. Check one page first. Each node then shows what it received and sent, which is where a refused login or an empty answer turns up.

**For experts.** Four DataForSEO calls feed one agent, and the agent can make one more call of its own.

Where the numbers come from

| Node | Call | What to know |
| --- | --- | --- |
| \`On Page SEO\` | \`on\_page/instant\_pages\` | Loads the page and its resources without JavaScript |
| \`Get Ranked Keywords\` | \`dataforseo\_labs/google/ranked\_keywords/live\` | Organic, paid, featured snippet, local pack and AI Overview results, sorted by volume from the lowest |
| \`On Page Lighthouse (Mobile)\` | \`on\_page/lighthouse/live/json\` | Lighthouse 12.2.0 as a phone |
| \`Keyword for Site\` | \`keywords\_data/google\_ads/keywords\_for\_site/live\` | Ideas for the whole site, search partners included |
| \`URL\_search\` | Firecrawl’s \`v1/scrape\` | Raw HTML of the whole page, from a cache up to four hours old |

`Code` builds the dashboard from the agent’s scores and plan, and the keywords come from the merged measurements. `Cloudflare Upload` saves it as text/html, so a browser shows it as a page.

### Good to know

Each check costs money at three vendors. Some of the original logic also skews what the dashboard says.

- Billing: DataForSEO bills four calls a check, Google the agent’s Gemini calls and Firecrawl the page fetch
- Least searched first: \`Get Ranked Keywords\` sorts from the lowest volume, so a page with more ranked keywords than its \`limit\` returns its quietest ones. Change \`asc\` to \`desc\` in its body
- Mixed keywords: \`Merge\` deep-merges its inputs, and both keyword lists share the name \`keywords\`. Entries at one position merge, so a keyword idea can show another keyword’s rank
- Fixed verdicts: every report the agent reads says the page fails Core Web Vitals and is held back by its performance score. Its table also counts ms as seconds, so any blocking time shows as Poor
- Dashboard gaps: its Core Web Vitals panel looks for fields the workflow never sets and stays hidden, and each resource saving reads 0 KB
- Missing tags: a page DataForSEO returns with no title, H1 or H2 stops the run at \`Prepare AI Input\`
- Preview model: Google’s deprecations page, read on 3 November 2026, lists \`gemini-3-flash-preview\` with no shutdown date and names \`gemini-3.6-flash\` as its replacement
- Public file: anyone with the address can open the dashboard, and a second check of one site on the same day replaces the first
- Open form: anyone with its address can spend your DataForSEO funds, so turn on the form trigger’s basic authentication
- Your data: the address goes to DataForSEO and Firecrawl, and the report and the page’s HTML go to Google
- Credentials: the JSON holds none. Take the Firecrawl key out of its header before you share the workflow

## README

```markdown
# One-page SEO and speed check with a hosted dashboard

An n8n workflow that checks one web page for the country and language you pick. DataForSEO crawls it, times it on a phone
with Lighthouse and lists the keywords it ranks for, plus keyword ideas for its site. A Gemini agent reads those results and the
live page, then writes an action plan. Everything becomes an interactive HTML dashboard in your own storage bucket, at an
address you can send.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 22 working nodes and six sticky notes that label its rows. It holds no
  credential.
- `README.md`: these notes.

## What we changed from the original copy

- The original copy was not valid JSON. Its export had decoded the HTML entities inside `escapeHtml` in `Code`, so a bare
  quote ended the string. `&amp;`, `&lt;`, `&gt;`, `&quot;` and `&#39;` are back where they belong.
- The export also dropped the backslashes in the code. `Prepare AI Input` could not run at all: the newlines in six places
  had become a plain `n`, and the backticks around the analysed address closed its template string early. Both are repaired.
- The `[Learn more]` patterns in `Filter Page Report` and `Prepare AI Input` are escaped again. Without the backslashes,
  `Filter Page Report` deleted every L, e, a, r, n, m, o and space from each Lighthouse description.
- The dot after `www` in the file name is escaped again, in `Cloudflare Upload` and `Get Research URL`.
- `URL_search` asks for `<YOUR_FIRECRAWL_KEY>` in its Authorization header, and `Get Research URL` for `YOUR_PUBLIC_URL`. The
  bucket stays `YOUR_BUCKET_NAME`, as it came.
- The DataForSEO, S3 and Gemini credentials are gone, as is the form's webhook id. The workflow carries this listing's name.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A DataForSEO account with funds, and its API login and API password. Its API password differs from the one you sign in with.
- A Gemini API key from Google AI Studio.
- A Firecrawl API key.
- An S3-compatible bucket that serves its files at a public address, such as a Cloudflare R2 bucket with public access or an
  Amazon S3 bucket with a public read policy. You also need an access key that can write to it.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an HTTP Basic Auth credential with your DataForSEO API login and API password. Select it in `On Page SEO`,
   `Get Ranked Keywords`, `On Page Lighthouse (Mobile)` and `Keyword for Site`.
3. Add a Google Gemini (PaLM) API credential with your key and select it in `Gemini 2.5 Pro`.
4. In `URL_search`, replace `<YOUR_FIRECRAWL_KEY>` in the Authorization header with your key. The brackets go too, so the
   header reads Bearer, a space and the key.
5. Add an S3 credential with your storage's endpoint, region, access key ID and secret. On Cloudflare R2 the endpoint is your
   account's `r2.cloudflarestorage.com` address and the region is `auto`. Select it in `Cloudflare Upload`, then replace
   `YOUR_BUCKET_NAME` with the bucket's name.
6. In `Get Research URL`, replace `YOUR_PUBLIC_URL` with the address the bucket's files open from, with no slash at the end.
7. Save, open the test address of `On form submission` and check a page of your own.
8. Press Publish once the dashboard opens at the address `Get Research URL` builds.

## How a run goes

1. `On form submission` takes the page's address and a country and a language from two lists. `Get Country & Language Code`
   turns the two names into DataForSEO's codes, such as 2826 and `en` for the United Kingdom in English.
2. Four DataForSEO calls run side by side, each followed by a filter that keeps the fields worth reading:
   - `On Page SEO` loads the page and its resources without running JavaScript. It returns the on-page score, title,
     description, H1 and H2 lists, link counts and checks such as HTTPS and a canonical tag.
   - `Get Ranked Keywords` asks for up to 100 keywords the page ranks for in that market, with rank, volume and cost per click.
   - `On Page Lighthouse (Mobile)` runs Lighthouse 12.2.0 as a phone. `Filter Page Report` keeps the four category scores,
     five speed timings and the audits that failed.
   - `Keyword for Site` asks DataForSEO's Google Ads data for keyword ideas across the whole site. `Filter Keyword for Site`
     keeps ideas searched 100 times a month or more.
3. `Merge` joins the four answers into one item, and `Prepare AI Input` writes them up as a Markdown report.
4. `Performance Analysis Engine` is an agent on `gemini-3-flash-preview`. It reads the report and fetches the live page's
   HTML through `URL_search`, which calls Firecrawl. A calculator and a date tool hang under it as well. `Structured Output`
   holds its answer to one shape. That shape has a headline and summary, scores, and SEO strengths and weaknesses with
   evidence from the HTML. It ends with notes on how readable the page is for AI search engines and a numbered action plan.
   The agent retries when a call fails.
5. `Merge1` puts that answer beside the measurements. `Code` builds a dark HTML page from both, with a keyword bubble chart
   drawn by D3 and a table view beside it.
6. `Cloudflare Upload` saves the page to your bucket as the site's first name and the date, such as
   `bakery20261103.html`. `Get Research URL` puts your public address in front of that name.

The form answers as soon as it is sent. The dashboard's address is the `url` field in the output of `Get Research URL`, so
open the run under Executions to find it.

## Change the look

- Countries and languages: the two dropdowns in `On form submission` and the two maps in `Get Country & Language Code`. Spell
  a name the same way in both.
- How many ranked keywords: `limit` in the body of `Get Ranked Keywords`.
- The floor for keyword ideas: the `search_volume` check in `Filter Keyword for Site`. Its comment says 200, which is not
  what the code checks.
- Phone or desktop: `for_mobile` in the body of `On Page Lighthouse (Mobile)`.
- What the analysis covers: the agent's system message and the example in `Structured Output`.
- The dashboard's colours and sections: the HTML and CSS in `Code`.
- The model: `Gemini 2.5 Pro`, which runs `gemini-3-flash-preview` despite its name.

## Good to know

- Each check costs money in three places. DataForSEO bills four calls, Google bills the agent's Gemini calls and Firecrawl
  counts the page fetch.
- `Get Ranked Keywords` orders by search volume from the lowest. A page that ranks for more keywords than its `limit`
  therefore sends its least searched ones. Change `asc` to `desc` in its body to get the biggest.
- `Merge` has no clash setting, so n8n deep-merges the four answers. Both keyword lists arrive under the same name,
  `keywords`, and entries at the same position merge into one: a keyword idea can show a ranked keyword's rank. To keep them
  apart, give the ideas their own field name in `Filter Keyword for Site` and read both fields in `Prepare AI Input` and `Code`.
- `Prepare AI Input` writes two fixed sentences into every report: that the page is held back by its performance score and
  fails Core Web Vitals. Its speed table also reads the s in ms as seconds, so any Total Blocking Time shows as Poor. The agent
  reads that report, so check its verdict against the scores.
- The dashboard's Core Web Vitals panel looks for field names the workflow never sets, so it never shows. Every resource under
  a performance opportunity reads 0 KB for the same reason.
- `Prepare AI Input` counts the H1 and H2 lists and trims the title without checking them first. A page DataForSEO returns
  without a title, an H1 or an H2 stops the run there.
- `On Page SEO` runs no JavaScript, so a page that builds its text in the browser can look empty to it. The agent's Firecrawl
  fetch asks for raw HTML too.
- The model is a preview. Google's deprecations page, read on 3 November 2026, lists `gemini-3-flash-preview` with no
  shutdown date and names `gemini-3.6-flash` as its replacement. If the preview goes, pick that model in `Gemini 2.5 Pro`.
- `URL_search` calls Firecrawl's v1 scrape address. Its v1 reference was still published on 3 November 2026, beside a newer v2.
- The dashboard is public: anyone with its address can open it. Two checks of one site on the same day share a file name, so
  the second replaces the first, even for different pages.
- Opening the dashboard loads D3 7.8.5 from cdnjs in the reader's browser.
- Anyone with the form's address can start a check on your DataForSEO funds and your Gemini key. Turn on the form trigger's
  basic authentication or keep the address to yourself.
- The page's address goes to DataForSEO and Firecrawl, and the report and the page's HTML go to Google. The dashboard sits in
  your bucket.
- The Firecrawl key sits in a header, so take it out before you share the workflow.
```

## What is in it

2 files, 126 KB, downloaded as a zip.

```text
README.md  9 KB
workflow.json  118 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 17 steps, starting on a form
- AI: 1 step calls an AI model: Performance Analysis Engine
- Sign-ins: Signs in to: DataForSEO and Google Gemini
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads 6 of its 7 step types. It does not read: S3

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/43f4d0b0-ca22-4302-9bd0-8b6a4841cda3)
- [Its page on Mindket](https://mindket.com/p/43f4d0b0-ca22-4302-9bd0-8b6a4841cda3)
