Websites rarely break all at once. They just get messy, gradually.
Links stop working. Pages get outdated. CTAs stop making sense…
Here’s a simple system that keeps everything up to date for you.
Every week, this system will:
You can do this in many ways. Here are the easiest options:
Option A (no-code, easiest)
Option B (more technical)
We’ll go with Option A. Why this stack?
Now, let's build it.
In Google Sheets, create a new file named Website Maintenance.
Add 4 tabs inside the sheet.
Tab 1: Pages
Add these columns in row 1: URL | Page Type | Priority | Owner
Now, fill this tab with your important pages.
Start with:
Do not start with your whole site, unless it’s a small one.
Start with 20 to 50 pages. That is enough for version 1.
Tab 2: Issues
Add these column names: Scan Date | URL | Issue Type | Severity | AI Summary | Suggested Fix | Auto Fix | Status
Tab 3: Approvals
Add these column names: URL | Proposed Change | Risk Level | Approve | Notes | Approved By
Tab 4: Log
Add these column names: Date | URL | Change Made | Change Type | Approved By | Run ID
That’s your control center
Open Screaming Frog. Paste your domain. Click Start. Wait for it to finish.
Now check:
If you can see these, you’re good.
Now schedule it:
After your first crawl:
You only need:
Save this file. This is what n8n will read.
Open n8n. Click New Workflow
Add the first node → Schedule Trigger
Set: Monday, 8:00 AM
This should run after Screaming Frog.
Add the second node → Read Google Sheet (pages)
pagesTest it. You should see your URLs.
Add the third node→ Read crawl file
Now you have:
Add the fourth node → AI analysis (this is the core)
Add an OpenAI node
Use this prompt (or something similar):
Check this page.
Rules:
High = broken page or important page is wrong
Medium = outdated/weak CTA
Low = small issue, easy to fix
Only return auto = yes if:fix is simple
fix does not change pricing, product, or core copy
Here are some examples of auto = yes:
Update year (2024 → 2026)
Fix known broken internal link
Small formatting fix
Here are examples of auto = no:
Rewrite CTA
Change homepage copy
Change pricing
Look for:
Broken page
Old year
Missing CTA
If the issue is LOW and you have the page content, also return updated content.
Return:
Issue
severity
fix
auto (yes/no)
updated_content
Important: Run this one page at a time.
Add the fifth node → Save results to Google Sheets
Add another Google Sheets node.
issuesMap:
This is how the issues tab gets filled.
Add the sixth node → Decide
Add IF node
IF
Low and auto = yes
→ continue
ELSE
→ stop
If it passes the IF:
Send updated_content back to your site.
This only works if your site supports it. For example:
Simple rule: If your CMS lets you update content by API, you can automate this step.
If not: Just save _updated\content to a sheet and paste manually.
Right after a fix is applied:
Add:
Map fields this way:
Important: This node should run only after a fix is applied.
Open issues tab.
Filter for medium and high.
If you’re solo, look through it once a week.
If you have a team or others are involved, send each issue to a form (Jotform works really well):
Now, nothing gets lost.
Solid system — the separation between auto-fix and human-review is the right call. Most automation projects fail because they try to automate too much too early and end up breaking things that mattered.
One thing worth adding to the IF node logic: a confidence threshold on the AI output. OpenAI can return auto = yes with high confidence on a year update and auto = yes with low confidence on a CTA rewrite — but your node treats them the same. Adding a confidence score to the prompt and only auto-applying fixes above say 90% confidence catches the edge cases where the AI is technically right but uncertain.
Also for anyone without API access to their CMS — there's a simpler middle ground between "fully automated" and "paste manually." Have n8n draft the fix and send it as a one-click approval email. Jotform handles this but so does a simple Gmail + Google Forms setup. You still approve it but the friction is one click not copy-paste-navigate-update.
Good writeup. The Log tab is the part most people skip and then regret six months later.
Super useful. This is one of those systems that feels simple but solves a very real problem
outdated website is second to an email typo — cringe! thanks again