---
title: "Site-wide on-page SEO audit with a report for each page"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/3daa3819-62de-4281-b19e-ed464e4a26cd"
updated: "2026-11-09"
---

# Site-wide on-page SEO audit with a report for each page

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

An n8n workflow that audits up to 100 pages of a website from one form. Firecrawl finds the pages, DataForSEO tests each one in a browser, and every page gets an HTML report in Google Drive and a row in Google Sheets.

Site-wide on-page SEO audit with a report for each page 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 audits every page it can find on a website, up to 100, and gives each one an HTML report and a row in a sheet. You type an address into a form. Firecrawl maps the site from its links and sitemap. DataForSEO then loads each page in a browser, with scripts, resources and a spelling check, and returns its on-page score, timings and checks. A Code node turns those numbers into a styled report for Google Drive. Google Sheets gets a summary row with the top fix. Ten nodes run it.

### Who it suits

Freelance SEO consultants, agencies and site owners who want a technical pass over a small site before a redesign or a pitch. It reads pages one by one, so a site of a few dozen pages suits it best. Skip it for keyword research or rankings. It looks only at the pages themselves. Nothing on the site is changed.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| SEO consulting | Freelance consultants | Run a prospect’s site and attach a few reports to the proposal | A consultant opens a pitch with the five pages whose score came back lowest. |
| Web design | Agencies | Audit a client’s site before and after a rebuild | An agency sets the old site’s scores beside the new site’s in two tabs. |
| Online retail | Shop owners | Sort the sheet by \`Priority Fix\` and work through the pages in order | A shop owner finds a run of product pages with no meta description. |
| Content marketing | Content leads | Filter on word count and readability to find thin pages | A content lead picks the thin posts to expand next. |

You need some n8n and three accounts: DataForSEO, Firecrawl and Google. Its author puts setup at about 12 minutes, with the accounts ready.

### Where to use it

Any n8n that can reach DataForSEO, Firecrawl and Google will run it, and the reports land in one Drive folder while the summaries go to one tab.

- n8n Cloud: import the file, add three credentials and a key, then publish
- Your own n8n server: the same file and steps
- Google Drive: one HTML file for each page, named \`seo-audit-\` and a timestamp
- Google Sheets: one row for each page, with a download link to its 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 folder and the sheet first.

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 |
| Firecrawl | An API key, for the site map |
| Google | An account for a Google Drive OAuth2 and a Google Sheets OAuth2 credential |
| A folder | A Drive folder for the reports |
| A sheet | A tab named \`Page SEO Audit\` with 23 headers in row 1 |

The sheet’s headers

| Group | Columns |
| --- | --- |
| The page | Date, URL, On Page Score, Status, Meta Title, Meta Description |
| Content and speed | Readability Score, Load Time, Word Count, Misspelling, Page Size (mb) |
| Checks, each Yes or No | ALT Missing, Broken Links, Broken Resources, Has H1, Has Title, Has Description, Has Canonical, SEO Friendly url, Passes core web vitals |
| The verdict | Issues, Priority Fix, Full Report |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Make a Drive folder and copy its ID: the last part of its address, after `/folders/`.
3. Make the sheet with its `Page SEO Audit` tab, then copy its ID: the long part of its address between `/d/` and `/edit`.
4. Add a Google Drive OAuth2 credential, select it in `Create file from text` and replace `YOUR_FOLDER_ID` with the folder’s ID.
5. Add a Google Sheets OAuth2 credential, select it in `Google Sheets` and replace `YOUR_SHEET_ID` with the sheet’s ID.
6. Add an HTTP Basic Auth credential with your DataForSEO API login and API password, and select it in `On Page SEO`.
7. In `Get Map`, 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.
8. Save, open the test address of `Submit Form` and send a small site. Press Publish when the rows look right.

DataForSEO’s API password is not the one you sign in with. Its dashboard shows a separate pair for the API.

### How to use it

Open the form and type the site’s full address, with https. The form answers at once and the run goes on. Firecrawl returns the addresses it finds, and the loop sends them to DataForSEO one at a time. Each page gets its report in Drive and its row in the sheet before the next one starts, so a large site takes a while. Then sort the sheet by `On Page Score` or `Issues`.

What to change for a different result

| To change | Where |
| --- | --- |
| How many pages | \`limit\` in the body of \`Get Map\`, 100 in the file |
| Subdomains and the sitemap | \`includeSubdomains\` and \`sitemap\` in the same body |
| What DataForSEO runs | The body of \`On Page SEO\`: browser rendering, resources and spelling, each billed on top |
| The report’s look and sections | The HTML in \`Code in JavaScript\` |
| The columns and the top fix | The mapping in \`Google Sheets\`, where \`Priority Fix\` takes the first problem in a fixed order |
| The pause before each row | \`Wait\`, one second in the file |

### Example

You send the form with one address.

```text
Page URL: https://bakery.example
```

Firecrawl returns the site’s addresses, such as the home page, a menu page and a contact page. For each one, `Page Data` keeps about 70 fields from the answer DataForSEO sends back. The sheet gets a row like this:

One row in the sheet

| Column | Value |
| --- | --- |
| URL | https://bakery.example/menu |
| On Page Score | 78 |
| Status | good |
| Load Time | 2.4 sec |
| Has Description | No |
| Issues | 3 |
| Priority Fix | Add meta description |
| Full Report | A download link to the page’s HTML file in Drive |

The report opens in a browser. It shows the score, Core Web Vitals, a checklist, the issues found and an action plan.

### 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 `Loop Over Items` hands one address at a time down the bottom row and takes it back after `Google Sheets`. Set `limit` to 3 for your first run. Each node then shows what it received and what it sent, which is where a refused login or an empty site map turns up.

**For experts.** Three stages share the work. A crawl finds the pages, a browser test measures them and a template writes them up.

What each stage does

| Node | Call or job | What to know |
| --- | --- | --- |
| \`Get Map\` | Firecrawl’s \`v2/map\` | Returns \`links\`, which \`Split Out\` turns into one item each |
| \`On Page SEO\` | DataForSEO’s \`on\_page/instant\_pages\`, a live call | Asks for browser rendering, scripts, resources and spelling, and returns even after a timeout |
| \`Page Data\` | A Set node with about 70 fields | Each field falls back to \`null\`, 0 or false, so a failed call still gives a row |
| \`Code in JavaScript\` | Builds the HTML in a template string | Names the file \`seo-audit-\` and \`Date.now()\` |
| \`Google Sheets\` | Appends a row | \`Full Report\` is a Drive download address made from the new file’s \`id\` |

Six nodes carry on when they fail. A page DataForSEO could not load still gets a report and a row, mostly zeros.

### Good to know

DataForSEO bills every page. The report and the sheet can also disagree on what to fix first.

- Billing: DataForSEO charges for each call, and its documentation says browser rendering, scripts and resources add to the price. One form means a call for every page Firecrawl finds. Firecrawl counts the map against your credits
- Two top fixes: the report’s Priority Action and the sheet’s \`Priority Fix\` test problems in different orders, so they can name different fixes for one page
- An older vital: the pass mark still tests First Input Delay. Google replaced it with Interaction to Next Paint as a Core Web Vital on 12 March 2024, according to web.dev
- Zeros: a failed page shows a score of 0, not an error. Check \`On Page Score\` before you trust a row
- Open form: anyone with the form’s address can start an audit on your DataForSEO funds
- Private links: a \`Full Report\` address works only for people who can see the file in your Drive
- Your data: the addresses go to Firecrawl and DataForSEO, and the reports stay in your Drive
- Your key: the Firecrawl key sits in a header, so take it out before you share the workflow
- Credentials: the JSON holds none, and nothing from its author’s Drive or sheet

## README

```markdown
# Site-wide on-page SEO audit with a report for each page

An n8n workflow that audits up to 100 pages of a website from one form. Firecrawl maps the site, DataForSEO loads each
page in a browser and checks it, and a Code node writes an HTML report for every page into Google Drive. Google Sheets
gets one summary row for each page, with its issue count, the fix to start with and a link to the report.

## What is inside

- `workflow.json`: the workflow as n8n exports it, ten nodes and no sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The author's Drive folder is gone. `Create file from text` asks for `YOUR_FOLDER_ID`.
- The author's sheet and its tab id are gone. `Google Sheets` asks for `YOUR_SHEET_ID` and finds the tab by the name
  `Page SEO Audit`.
- The Firecrawl header read `Bearer <api_key>`. It now reads `Bearer <YOUR_FIRECRAWL_KEY>`.
- The DataForSEO, Drive and Sheets credentials are gone, along with the author's account names on them.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- A DataForSEO account with funds. Its dashboard shows an API login and an API password, apart from the password you
  sign in with.
- A Firecrawl API key.
- A Google account, a Drive folder for the reports and a Google Sheet with the tab below.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Make a Drive folder and copy its ID: the last part of its address, after `/folders/`.
3. Make the sheet with a tab named `Page SEO Audit` and the headers below, then copy its ID: the long part of its address
   between `/d/` and `/edit`.
4. Add a Google Drive OAuth2 credential, select it in `Create file from text` and replace `YOUR_FOLDER_ID` with the
   folder's ID.
5. Add a Google Sheets OAuth2 credential, select it in `Google Sheets` and replace `YOUR_SHEET_ID` with the sheet's ID.
6. Add an HTTP Basic Auth credential with your DataForSEO API login as the user and the API password as the password,
   and select it in `On Page SEO`.
7. In `Get Map`, 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.
8. Lower `limit` in the body of `Get Map` to 3 for the first run.
9. Save, open the test address of `Submit Form` and send a site's address. Press Publish when the rows look right.

## The sheet

Row 1 of `Page SEO Audit` holds these 23 headers, spelled as here:

| Group | Columns |
|---|---|
| The page | `Date`, `URL`, `On Page Score`, `Status`, `Meta Title`, `Meta Description` |
| Content and speed | `Readability Score`, `Load Time`, `Word Count`, `Misspelling`, `Page Size (mb)` |
| Checks, each `Yes` or `No` | `ALT Missing`, `Broken Links`, `Broken Resources`, `Has H1`, `Has Title`, `Has Description`, `Has Canonical`, `SEO Friendly url`, `Passes core web vitals` |
| The verdict | `Issues`, `Priority Fix`, `Full Report` |

## How a run goes

1. `Submit Form` shows the Internal Links Check form with one field, `Page URL`. Type the full address with https. It
   confirms at once.
2. `Get Map` asks Firecrawl's `v2/map` for up to 100 addresses on the site, from its links and its sitemap, without
   subdomains. `Split Out` turns the `links` it returns into one item each.
3. `Loop Over Items` hands the addresses on one at a time.
4. `On Page SEO` sends the address to DataForSEO's `on_page/instant_pages` with browser rendering, JavaScript, resources
   and a spelling check, and asks for an answer even after a timeout.
5. `Page Data` keeps about 70 fields from the answer: the score, the title and description, the headings, word count,
   readability, the page timings, sizes, links and the checks. Each falls back to `null`, 0 or false when it is missing.
6. `Code in JavaScript` builds the report: the score cards, Core Web Vitals, a priority action, performance, a checklist,
   issues, resources, links, meta and social tags, and an action plan. It names the file `seo-audit-` and a timestamp.
7. `Create file from text` saves it in your folder. `Wait` pauses one second, the amount in the file with the seconds
   that Wait 1.1 uses when no unit is set.
8. `Google Sheets` appends the row. `Full Report` is a Drive download address made from the new file's `id`. The loop
   then takes the next address.

`Code in JavaScript`, `Create file from text`, `Wait`, `On Page SEO`, `Page Data` and `Google Sheets` are all set to
carry on when they fail. A page DataForSEO could not load still gets a report and a row, mostly zeros.

## Change the look

- How many pages: `limit` in the body of `Get Map`. `includeSubdomains` and `sitemap` sit beside it.
- What DataForSEO runs: the body of `On Page SEO`. Turning off browser rendering lowers the price and loses the timings.
- The report: the HTML and CSS in `Code in JavaScript`, including the colors and the sections.
- The sheet: the mapping in `Google Sheets`. `Status` comes from the score (90 and up excellent, 70 good, 50 needs
  improvement, below that poor), and `Issues` counts eleven checks.

## Good to know

- DataForSEO charges for each call, and its documentation says browser rendering, JavaScript and resources add to the
  price. One form means a call for every page Firecrawl finds. Firecrawl counts the map against your credits. Try a small site first.
- The report's Priority Action and the sheet's `Priority Fix` test problems in different orders. The report starts with
  thin content and speed, the sheet with a missing title, so one page can get two different first fixes.
- The pass mark for Core Web Vitals still tests First Input Delay. Google replaced it with Interaction to Next Paint as a
  Core Web Vital on 12 March 2024, according to web.dev, so read that column as a rough guide.
- A page that failed shows a score of 0 and empty fields, not an error. Check `On Page Score` before you trust a row.
- Anyone with the form's address can start an audit on your DataForSEO funds once the workflow is published.
- A `Full Report` link works only for people who can see the file in your Drive.
- The addresses go to Firecrawl and DataForSEO. The reports stay in your Drive.
- The Firecrawl key sits in a header, so take it out before you share the workflow.
```

## What is in it

2 files, 79 KB, downloaded as a zip.

```text
README.md  6 KB
workflow.json  73 KB
```

## Workflow check

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

- Steps: 10 steps, starting on a form
- AI: No step calls an AI model
- Sign-ins: Signs in to: DataForSEO, Google Drive, Google Sheets and Firecrawl
- API keys: No API key is left in the file; 1 blank in it for your own key
- Step types: Mindket’s checker reads all 9 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/3daa3819-62de-4281-b19e-ed464e4a26cd)
- [Its page on Mindket](https://mindket.com/p/3daa3819-62de-4281-b19e-ed464e4a26cd)
