{"id":2907,"date":"2026-11-08T13:22:55","date_gmt":"2026-11-08T13:22:55","guid":{"rendered":"https:\/\/dygistic.com\/?page_id=2907"},"modified":"2026-11-08T13:22:55","modified_gmt":"2026-11-08T13:22:55","slug":"seo-automation-infrastructure-n8n","status":"publish","type":"page","link":"https:\/\/dygistic.com\/nl\/work\/seo-automation-infrastructure-n8n\/","title":{"rendered":"Dygistic Labs: a self-hosted SEO automation stack with n8n"},"content":{"rendered":"<style data-wp-block-html=\"css\">.dy-seo-page{--slate:#1C2333;--slate-mid:#2E3F5C;--slate-ink:#0F1420;--sky:#4A90B8;--sky-deep:#3B7A9E;--sky-soft:#7AB4D6;--sky-light:#EEF3F8;--off-white:#F5F7FA;--white:#FFFFFF;--rule:rgba(28,35,51,0.08);--rule-strong:rgba(28,35,51,0.14);--ink:#1C2333;--ink-70:rgba(28,35,51,0.72);--ink-55:rgba(28,35,51,0.55);--ink-40:rgba(28,35,51,0.4);font-family:\"Plus Jakarta Sans\",system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--ink);line-height:1.6;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);-webkit-font-smoothing:antialiased}.dy-seo-page *,.dy-seo-page *::before,.dy-seo-page *::after{box-sizing:border-box}.dy-seo-page img,.dy-seo-page svg{display:block;max-width:100%}.dy-seo-page a,.entry-content .dy-seo-page a,.ast-single-post .entry-content .dy-seo-page a,.ast-single-post .entry-content .dy-seo-page a:hover{color:inherit;text-decoration:none}.dy-seo-page .wrap{max-width:1200px;margin:0 auto;padding:0 clamp(24px,5vw,72px)}.dy-seo-page .wrap-narrow{max-width:860px}.dy-seo-page .section{padding:clamp(56px,7vw,88px) 0}.dy-seo-page .eyebrow{display:inline-flex;align-items:center;gap:10px;font-size:11px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--sky-deep);margin-bottom:18px}.dy-seo-page .eyebrow::before{content:\"\";width:20px;height:1px;background:var(--sky);display:block}.dy-seo-page .title{font-size:clamp(26px,3.6vw,40px);font-weight:700;letter-spacing:-0.025em;line-height:1.1;color:var(--slate);margin-bottom:18px}.dy-seo-page .lead{font-size:17px;font-weight:300;color:var(--ink-70);line-height:1.65;max-width:62ch}.dy-seo-page .bg-off{background:var(--off-white)}.dy-seo-page .btn{display:inline-flex;align-items:center;gap:10px;font-size:14.5px;font-weight:600;letter-spacing:-0.005em;padding:14px 24px;border-radius:10px;cursor:pointer;border:1px solid transparent;transition:transform .15s,background .2s,box-shadow .2s,color .2s}.dy-seo-page .btn-primary{background:var(--sky);color:var(--white)}.dy-seo-page .btn-primary:hover{background:var(--sky-deep);box-shadow:0 10px 28px rgba(74,144,184,.35)}.dy-seo-page .btn-outline{background:transparent;color:var(--white);border-color:rgba(255,255,255,.22)}.dy-seo-page .btn-outline:hover{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.4)}.dy-seo-page .seo-hero{position:relative;background:radial-gradient(1200px 500px at 85% -10%,rgba(74,144,184,.22),transparent 60%),radial-gradient(900px 400px at -10% 110%,rgba(74,144,184,.08),transparent 60%),linear-gradient(180deg,var(--slate-ink),var(--slate));color:var(--white);overflow:hidden}.dy-seo-page .hero-inner{padding:clamp(56px,8vw,88px) 0 clamp(120px,14vw,160px);text-align:center}.dy-seo-page .hero-eyebrow{display:inline-flex;align-items:center;gap:10px;font-size:11px;font-weight:600;letter-spacing:.22em;text-transform:uppercase;color:rgba(255,255,255,.55);margin-bottom:24px;justify-content:center}.dy-seo-page .hero-eyebrow::before{content:\"\";width:20px;height:1px;background:var(--sky);display:block}.dy-seo-page .hero-h1{font-size:clamp(34px,5.4vw,62px);font-weight:800;letter-spacing:-0.035em;line-height:1.04;color:var(--white);max-width:18ch;margin:0 auto}.dy-seo-page .hero-h1 em{font-style:normal;background:linear-gradient(180deg,var(--sky-soft),var(--sky));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}.dy-seo-page .hero-sub{margin:22px auto 0;max-width:58ch;font-size:17px;font-weight:300;line-height:1.65;color:rgba(255,255,255,.72)}.dy-seo-page .tool-section{margin-top:clamp(-90px,-10vw,-120px);position:relative;z-index:2;padding-bottom:clamp(40px,6vw,64px)}.dy-seo-page .tool-panel{background:var(--white);border:1px solid var(--rule-strong);border-radius:20px;padding:clamp(18px,3vw,28px);box-shadow:0 30px 80px rgba(15,20,32,.14)}.dy-seo-page .tool-panel .dyt-form{border:0;box-shadow:none;padding:0;background:transparent}.dy-seo-page .tool-panel .dyt-url{background:var(--off-white)}.dy-seo-page .metric-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:32px}@media (max-width:860px){.dy-seo-page .metric-grid{grid-template-columns:1fr}}.dy-seo-page .metric-card{padding:26px 24px;background:var(--white);border:1px solid var(--rule);border-radius:14px}.dy-seo-page .mc-abbr{font-size:11px;font-weight:700;letter-spacing:.22em;color:var(--sky);margin-bottom:10px}.dy-seo-page .mc-title{font-size:17px;font-weight:700;color:var(--slate);margin-bottom:8px;letter-spacing:-0.01em}.dy-seo-page .mc-text{font-size:13.5px;color:var(--ink-70);line-height:1.6}.dy-seo-page .mc-good{display:inline-block;margin-top:12px;font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#1F8F5F;background:#E6F5EE;padding:5px 10px;border-radius:999px}.dy-seo-page .tips{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin-top:32px}@media (max-width:760px){.dy-seo-page .tips{grid-template-columns:1fr}}.dy-seo-page .tip{padding:24px;background:var(--white);border:1px solid var(--rule);border-radius:14px}.dy-seo-page .tip-title{font-size:15px;font-weight:700;color:var(--slate);margin-bottom:8px}.dy-seo-page .tip p{font-size:13.5px;color:var(--ink-70);line-height:1.6;margin:0}.dy-seo-page .tip ul{margin:8px 0 0;padding-left:18px;font-size:13.5px;color:var(--ink-70)}.dy-seo-page .tip li{margin:4px 0}.dy-seo-page .other-tools{display:flex;gap:12px;flex-wrap:wrap;margin-top:24px}.dy-seo-page .other-tools a{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border:1px solid var(--rule-strong);border-radius:999px;font-size:13.5px;font-weight:600;color:var(--slate);background:var(--white);transition:border-color .2s,background .2s}.dy-seo-page .other-tools a:hover{border-color:var(--sky);background:var(--sky-light);color:var(--sky-deep)}.dy-seo-page .cta-block{padding:clamp(40px,6vw,64px);border-radius:24px;background:radial-gradient(800px 300px at 90% -20%,rgba(74,144,184,.22),transparent 60%),linear-gradient(135deg,var(--slate-ink),var(--slate));color:var(--white);position:relative;overflow:hidden;display:grid;grid-template-columns:1.2fr 1fr;gap:48px;align-items:center}@media (max-width:820px){.dy-seo-page .cta-block{grid-template-columns:1fr;gap:28px}}.dy-seo-page .cta-h{font-size:clamp(26px,3.4vw,38px);font-weight:700;letter-spacing:-0.025em;line-height:1.12;color:var(--white);margin:0 0 14px}.dy-seo-page .cta-p{font-size:16px;color:rgba(255,255,255,.7);line-height:1.65;max-width:44ch;margin:0}.dy-seo-page .cta-right{display:flex;flex-direction:column;align-items:flex-start;gap:20px}.dy-seo-page .cta-detail{font-size:13.5px;color:rgba(255,255,255,.65);line-height:1.85;border-left:2px solid var(--sky);padding-left:14px}.dy-seo-page .case-hero .hero-inner{text-align:left;padding-bottom:clamp(56px,7vw,80px)}.dy-seo-page .case-hero .hero-eyebrow{justify-content:flex-start}.dy-seo-page .case-hero .hero-h1{margin:0;max-width:22ch}.dy-seo-page .case-hero .hero-sub{margin-left:0}.dy-seo-page .case-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:rgba(255,255,255,.08);border-top:1px solid rgba(255,255,255,.08)}@media (max-width:780px){.dy-seo-page .case-meta{grid-template-columns:repeat(2,1fr)}}.dy-seo-page .cm{padding:22px clamp(20px,3vw,40px);background:var(--slate-ink)}.dy-seo-page .cm-l{font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:rgba(255,255,255,.45);margin-bottom:6px}.dy-seo-page .cm-v{font-size:14.5px;font-weight:600;color:var(--white);line-height:1.4}.dy-seo-page .case-body{display:grid;grid-template-columns:1fr 1.6fr;gap:56px;align-items:start}@media (max-width:900px){.dy-seo-page .case-body{grid-template-columns:1fr;gap:28px}}.dy-seo-page .case-body h2{font-size:clamp(22px,2.6vw,30px);font-weight:700;letter-spacing:-.02em;color:var(--slate);margin:0 0 12px;line-height:1.15}.dy-seo-page .case-body p{font-size:16px;color:var(--ink-70);line-height:1.7;margin:0 0 16px}.dy-seo-page .case-body ul{margin:0 0 16px;padding-left:20px;color:var(--ink-70);font-size:15.5px;line-height:1.65}.dy-seo-page .case-body li{margin:6px 0}.dy-seo-page .case-body code{font-size:13px;background:var(--sky-light);color:var(--sky-deep);padding:2px 6px;border-radius:5px}.dy-seo-page .case-side{position:sticky;top:96px}@media (max-width:900px){.dy-seo-page .case-side{position:static}}.dy-seo-page .ba{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:8px 0 24px}@media (max-width:640px){.dy-seo-page .ba{grid-template-columns:1fr}}.dy-seo-page .ba-card{padding:22px;border-radius:14px;border:1px solid var(--rule);background:var(--white)}.dy-seo-page .ba-card.after{border-color:rgba(74,144,184,.35);background:var(--sky-light)}.dy-seo-page .ba-l{font-size:11px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-55);margin-bottom:8px}.dy-seo-page .ba-card.after .ba-l{color:var(--sky-deep)}.dy-seo-page .ba-t{font-size:14.5px;color:var(--ink);line-height:1.55}.dy-seo-page .kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 24px}@media (max-width:640px){.dy-seo-page .kpis{grid-template-columns:1fr}}.dy-seo-page .kpi{padding:18px;border-radius:12px;background:var(--white);border:1px solid var(--rule);border-top:3px solid var(--sky)}.dy-seo-page .kpi-n{font-size:28px;font-weight:800;letter-spacing:-.03em;color:var(--slate)}.dy-seo-page .kpi-l{font-size:12.5px;color:var(--ink-70);margin-top:2px}.dy-seo-page .todo{background:#FBF1DF;border:1px dashed #B8771A;color:#7a4e0b;border-radius:10px;padding:12px 14px;font-size:13px;margin:0 0 24px}.dy-seo-page .case-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:32px}@media (max-width:900px){.dy-seo-page .case-grid{grid-template-columns:1fr}}.dy-seo-page .case-card{display:flex;flex-direction:column;padding:30px 28px;background:var(--white);border:1px solid var(--rule);border-radius:16px;transition:transform .2s,box-shadow .2s,border-color .2s;color:inherit}.dy-seo-page a.case-card:hover{transform:translateY(-3px);box-shadow:0 24px 60px rgba(15,20,32,.08);border-color:rgba(74,144,184,.3);color:inherit}.dy-seo-page .cc-cat{font-size:11px;font-weight:700;letter-spacing:.22em;color:var(--sky);margin-bottom:12px;text-transform:uppercase}.dy-seo-page .cc-title{font-size:20px;font-weight:700;color:var(--slate);margin-bottom:10px;letter-spacing:-0.01em;line-height:1.2}.dy-seo-page .cc-text{font-size:14px;color:var(--ink-70);line-height:1.6;margin-bottom:18px;flex:1}.dy-seo-page .cc-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}.dy-seo-page .cc-tags span{font-size:11.5px;font-weight:600;padding:4px 9px;border-radius:999px;background:var(--off-white);color:var(--ink-70)}.dy-seo-page .cc-arrow{font-size:13px;font-weight:600;color:var(--sky-deep)}.dy-seo-page .cat-head{margin-top:56px}.dy-seo-page .cat-head .title{margin-bottom:8px}<\/style>\n<div class=\"dy-seo-page\">\n<section class=\"seo-hero case-hero\">\n<div class=\"wrap hero-inner\">\n<div class=\"hero-eyebrow\">Dygistic Labs &middot; <a href=\"\/nl\/work\/\" style=\"color:inherit\">All work<\/a><\/div>\n<h1 class=\"hero-h1\">Building my own <em>SEO automation stack<\/em> with n8n<\/h1>\n<p class=\"hero-sub\">Why I run automation on my own server instead of stacking SaaS subscriptions, how the stack is set up, and what it runs today.<\/p>\n<\/div>\n<div class=\"case-meta\"><div class=\"cm\"><div class=\"cm-l\">Period<\/div><div class=\"cm-v\">April 2025 to present<\/div><\/div><div class=\"cm\"><div class=\"cm-l\">Project<\/div><div class=\"cm-v\">Dygistic (own)<\/div><\/div><div class=\"cm\"><div class=\"cm-l\">Stack<\/div><div class=\"cm-v\">VPS, Docker, n8n, Nginx, Let&#8217;s Encrypt<\/div><\/div><div class=\"cm\"><div class=\"cm-l\">Disciplines<\/div><div class=\"cm-v\">Automation, integrations, AI agents<\/div><\/div><\/div>\n<\/section>\n<section class=\"section\">\n<div class=\"wrap\">\n<div class=\"case-body\">\n<div class=\"case-side\">\n<div class=\"eyebrow\">In short<\/div>\n<h2 style=\"font-size:clamp(24px,3vw,34px)\">Own the plumbing, rent nothing you do not need.<\/h2>\n<p>SEO work is full of repeatable steps: pulling data, checking pages, formatting reports, publishing content. I built a self-hosted automation environment so those steps run without me, and without a per-task SaaS bill.<\/p>\n<div class=\"kpis\"><div class=\"kpi\"><div class=\"kpi-n\">27<\/div><div class=\"kpi-l\">active workflows (34 built)<\/div><\/div><div class=\"kpi\"><div class=\"kpi-n\">12<\/div><div class=\"kpi-l\">MCP servers for AI assistants<\/div><\/div><div class=\"kpi\"><div class=\"kpi-n\">15 min<\/div><div class=\"kpi-l\">between uptime and noindex checks<\/div><\/div><\/div>\n<\/div>\n<div>\n<h2>The problem with renting every step<\/h2><p>Most SEO tooling is excellent at one thing and charges for it monthly. Chain five of them together and you have a fragile, expensive process that still needs a human to copy data from A to B. I wanted a single place where workflows live, talk to any API, and can call an AI model when judgement is needed.<\/p><h2>What I set up<\/h2><ul><li>An Ubuntu VPS with Docker Compose running n8n on a persistent volume, so upgrades never lose workflow data.<\/li><li>Nginx as reverse proxy on a dedicated subdomain, HTTPS via Let&#8217;s Encrypt, HSTS and authentication in front of the editor.<\/li><li>OAuth connections to Google, WordPress via the REST API with application passwords, and database access to client sites where the client agreed to it.<\/li><li>Guardrails by default: read-only unless a write is needed, write actions limited to a whitelist, destructive and financial actions blocked, and my approval before anything is published or booked.<\/li><\/ul><h2>What runs on it<\/h2><p>The stack powers the operational side of Dygistic. <strong>Monitoring:<\/strong> every 15 minutes each active client site is checked for uptime and an accidental noindex, and I only get an email when something changes. For one large webshop it also compares key pages, robots.txt and sitemaps with the day before every morning and flags URLs that disappeared without a redirect. <strong>Reporting:<\/strong> a work log that every working session writes to, turned into a Friday overview with work per client, draft client updates and the status of all monitored sites. <strong>Integrations:<\/strong> MCP servers that let an AI assistant work on WordPress sites, databases, hosting and DNS, bookkeeping, Search Console and GA4, each with its own limits. <strong>Data:<\/strong> weekly Search Console snapshots per tracked URL, written to a Google Sheet with a history line per week.<\/p><p>The free <a href=\"\/nl\/tools\/\">SEO tools on this site<\/a> en de <a href=\"\/nl\/glossary\/\">glossary tooltips<\/a> came out of the same lab mindset: build the thing once, reuse it everywhere.<\/p>\n<h2>Before and after<\/h2>\n<div class=\"ba\"><div class=\"ba-card\"><div class=\"ba-l\">Before<\/div><div class=\"ba-t\">Every recurring task was manual or spread over separate SaaS tools with their own logins, limits and invoices.<\/div><\/div><div class=\"ba-card after\"><div class=\"ba-l\">After<\/div><div class=\"ba-t\">One self-hosted environment runs the recurring work, connects to any API, and hands me a draft or an alert instead of a to-do.<\/div><\/div><\/div>\n<h2>What this means for you<\/h2>\n<p>If your marketing team copies data between tools every week, that process can almost certainly be automated. I build these pipelines for clients as part of my <a href=\"\/nl\/diensten\/marketingautomatisering\/\">marketingautomatisering<\/a> work, from a single reporting flow to a full content pipeline.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"section\" style=\"padding-top:0\">\n<div class=\"wrap\">\n<div class=\"cta-block\">\n<div>\n<h2 class=\"cta-h\">Tired of copy-pasting between dashboards?<\/h2>\n<p class=\"cta-p\">Tell me which weekly task annoys you most. I will tell you whether it can be automated, what it would take and what it saves.<\/p>\n<\/div>\n<div class=\"cta-right\">\n<a href=\"\/nl\/contact\/\" class=\"btn btn-primary\">Start a conversation<\/a>\n<div class=\"cta-detail\">One consultant, start to finish.<br>Developer-ready deliverables.<br>NL, BE, DE and UK markets.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Why I run automation on my own server instead of stacking SaaS subscriptions, how the stack is set up, and what it runs today.<\/p>","protected":false},"author":1,"featured_media":0,"parent":2906,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2907","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/pages\/2907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/comments?post=2907"}],"version-history":[{"count":3,"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/pages\/2907\/revisions"}],"predecessor-version":[{"id":2976,"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/pages\/2907\/revisions\/2976"}],"up":[{"embeddable":true,"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/pages\/2906"}],"wp:attachment":[{"href":"https:\/\/dygistic.com\/nl\/wp-json\/wp\/v2\/media?parent=2907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}