Who this system is for
This setup is designed for small teams and solo founders who:
- Already post on social or read industry news daily.
- Don’t want to become full-time bloggers or SEO nerds.
- Are happy to review and tweak AI drafts, but don’t want to write from scratch.
- Care more about consistent, “good enough” content than a perfect content calendar.
The high-level architecture
At a high level, your SEO system looks like this:
- Capture topics into Supabase (manually, or from tools like Google Search Console, Reddit, or “People Also Ask”).
- Use n8n to pull one topic at a time and send it to GPT with a strict blog template prompt.
- Save the AI-generated article back into Supabase (HTML + metadata).
- Publish the article by pushing the HTML to your `/blog` folder via SFTP (exactly what you’re doing now).
- Mark the row as processed so the next run picks up the next topic.
Once this is set up, your daily job becomes: “Open the draft, skim, tweak, and hit publish.”
Step 1 – Design your content model in Supabase
First, you need a clean structure for how a “topic” turns into a full blog post.
A simple Supabase table called seo_topics is enough:
Suggested columns
id– integer, primary key.keyword– the main keyword or question.search_intent– informational, commercial, etc.status– idea, drafted, published.slug– final URL slug, e.g.seo-content-system-n8n-supabase.title– blog title.meta_description– 140–160 character summary.html– full article HTML body.published_at– timestamp, nullable.
You can manually seed 20–50 topics into this table from:
- Questions customers ask you in email or sales calls.
- Reddit threads, Quora questions, or FB group questions.
- Your own notes and ideas for explanations, comparisons, or how-tos.
Step 2 – A strict blog template prompt for GPT
The biggest mistake with AI content is letting it “freestyle.” Instead, enforce a consistent structure:
- Strong, specific H1 that mentions the keyword naturally.
- Short intro that sets the problem and promises a clear outcome.
- 3–5 main sections that move from context → steps → examples.
- One simple visual or framework you keep reusing (e.g. “Input → Engine → Output”).
- A final CTA back to your services, lead magnet, or email list.
Store this template prompt in n8n or a separate “prompts” file so every article follows the same layout and is easy to skim.
Step 3 – Build the n8n workflow
Core nodes (conceptual)
- HTTP node – Fetch one unprocessed topic
GET from Supabase:?select=*&status=eq.idea&order=id.asc&limit=1 - AI node – Generate the article HTML
Send the topic, keyword, and slug with your blog template prompt. Ask for valid HTML only inside the body tag. - HTTP node – Save the HTML back into Supabase
PATCH the row: setstatus = 'drafted',html = <generated html>. - Code + SFTP – Publish to your /blog folder
Convert HTML to a file named{slug}.htmland upload via SFTP topublic_html/blog/. - HTTP node – Mark as published
PATCH again:status = 'published',published_at = now().
This sounds like a lot, but once the first article runs end-to-end, the rest are just data and small prompt tweaks.
Step 4 – On-page SEO basics baked into the template
To avoid manually “doing SEO” for each article, bake these rules into your GPT prompt and HTML template:
- Use the main keyword in the H1 naturally, not stuffed.
- Include 2–3 subheadings (H2/H3) that match real search questions.
- Add one short “TL;DR” summary or bullet list near the top.
- Internally link to 2–3 other relevant posts using descriptive anchor text.
- Use clear, human-friendly URLs — no dates unless you really need them.
Over time, this consistency matters far more than stressing over every single meta tag.
Step 5 – Connect this to your existing blog page
You’re already using a static /blog/index.html with cards. To connect
this SEO system:
- Decide which posts are “pillar” posts and which are “supporting” posts.
- Manually add new pillar posts to your blog cards and sidebar links once per week.
- Let smaller, long-tail posts live as “quiet” pages that mostly pull search traffic.
What a realistic weekly schedule looks like
Here is a simple, honest schedule that most people can actually follow:
- Monday: Add 5–10 new keywords or questions into Supabase.
- Tuesday–Thursday: Let n8n run 1–2 times per day and generate drafts.
- Friday (30–45 minutes): Review 2–3 drafts, tweak intros/outros, hit publish.
In one month you could easily ship 8–12 useful articles with under 3 hours of human effort.
If you do nothing else from this article:
- Create the
seo_topicstable in Supabase. - Feed it 20 real questions from your customers.
- Build a tiny n8n flow that turns exactly one row into a HTML article.
Once you see your first article appear live on your blog without you writing it from scratch, you’ll understand the power of a simple SEO system built on automation.