SEO for Free docs
Connect your website with its address and nothing else. SEO for Free reads every page, scores it, writes the fixes and puts the approved ones live, in Africa and worldwide.
Quick start
- Sign in to the console with your work email and paste your website’s address, or connect it with the API.
- SEO for Free starts reading it straight away. No proof of ownership is needed to begin; you can add it later.
- Review the score, the issues and the suggested fixes. Approve the ones you like, or switch on automatic approval for safe fixes.
- Install the snippet (one line) or use server-side fixes, so approved fixes go live.
- Connect Search Console to see the searches you appear for and your positions.
Connect a website
A website is connected by its address. There is no DNS record to add, no file to upload and no waiting: SEO for Free reads it at once and keeps every read, so the score has a history from the first day.
curl -X POST https://seoforfree.online/api/engine/v1/sites \
-H "Authorization: Bearer eng_sk_live_…" \
-d '{ "url": "https://yourdomain.com", "settings": { "country": "KE", "keywords": ["masai mara safari"] } }'
# → 201 { "id": "…", "host": "yourdomain.com", "status": "connected",
# "ownership": { "level": "none", "via": null },
# "crawl": { "finished": true, "pages": 42, "score": 67, … } }
| Field | Meaning |
|---|---|
url | The website’s address. A bare domain works. Private and internal addresses are refused. |
name | Optional label. |
settings | Optional: country (two letters), language, keywords, competitors (domains), autopilot (approve, safe or auto), business_type, excluded_paths. Bounded by your plan. |
crawl | Send false to connect without reading yet. |
A site too large to read in one run carries on in the background; crawl.finished says which. The same site cannot be connected twice, and your plan’s site limit still applies (409). DELETE /sites/{id} disconnects it.
Proving ownership (optional)
Ownership is a level of trust, not a gate. SEO for Free shows how sure it is that a site is yours, and everything works at every level:
ownership.level | How SEO for Free knows |
|---|---|
none | The site was connected by its address. Nothing has been proven. |
seen | The SEO for Free snippet has reported from the site’s own pages. |
confirmed | Google Search Console is connected for the site. |
verified | A file, a DNS record or a meta tag was found, using the token in your console. |
| Method | What to add |
|---|---|
| File (recommended) | https://yourdomain.com/<token>.txt containing the token. It also turns on instant indexing. |
| DNS record | A TXT record on your domain (or _cabana.yourdomain.com): cabana-site-verification=<token> |
| Meta tag | <meta name="cabana-site-verification" content="<token>"> on your home page |
For a verified site, SEO for Free checks every day that the record is still there and that the site is still the one you registered. If the record goes missing you have seven days to restore it. You promise that you own, or are authorised to manage, every site you connect (see the terms).
How we read your site
SEO for Free reads your pages as CabanaBot: Mozilla/5.0 (compatible; CabanaBot/1.0; +https://seoforfree.online/bot). It follows your robots.txt (rules for CabanaBot, then *), reads your sitemaps, and never fills in forms or signs in. See CabanaBot for details.
The snippet
One line before </head> on every page. The key is publishable and only works on pages of a site you have connected.
<script async src="https://seoforfree.online/e.js" data-key="eng_pk_live_…"></script>
It applies the fixes you approved for each page (title, description, canonical, preview cards, structured data, image alt text, language, viewport), then sends one anonymous page view: where the visitor came from, how fast the page was for them, and whether the page content changed. No cookies, no visitor ID and no IP address are kept. Do Not Track and Global Privacy Control switch the report off.
Google runs JavaScript and sees fixes the snippet applies. Some other crawlers and link previews (WhatsApp, for example) do not, so for those use server-side fixes too.
Where to paste it
- WordPress: a header and footer code plugin → Header.
- Shopify: Online Store → Themes → Edit code →
theme.liquid, before</head>. - Wix: Settings → Custom code → Head, all pages.
- Squarespace: Settings → Advanced → Code injection → Header.
- Webflow: Project settings → Custom code → Head code.
Server-side fixes
For sites that render on the server (Next.js, Nuxt, Laravel, Django, Rails…), fetch the ready-made tags for a page and print them in its <head>. Cache them for a few minutes.
curl "https://seoforfree.online/api/engine/v1/fixes?url=https://yourdomain.com/safaris" \
-H "Authorization: Bearer eng_sk_live_…"
# → { "url": "…", "fixes": [ { "kind": "title", "value": { "text": "…" } }, … ], "head_html": "<title>…" }
Approving fixes
SEO for Free writes each fix from your own page: rewritten titles and descriptions never add a price, number or claim that is not already on the page. You choose: approve each one, or let SEO for Free approve the safe kinds automatically (canonical, viewport, preview cards and structured data built from your content). A fix goes live within minutes of approval; undo it at any time.
Instant indexing
When a page changes or a fix goes live, SEO for Free tells Bing, Yandex, Naver, Seznam and other IndexNow search engines at once, using your verification file as the key. Google finds changes through your sitemap and, if connected, Search Console.
Google Search Console
In the console, open your site → Rankings. Copy the service account address shown there and, in Search Console → Settings → Users and permissions, add it as a Restricted user. SEO for Free then reads your searches, clicks, impressions and positions every day. It cannot change anything in Search Console, and you can remove it at any time.
Competitors
SEO for Free finds the sites that actually rank for your keywords in your country and reads their pages the same way it reads yours, so you see their score next to yours, check by check. You can also name competitors yourself. SEO for Free only reads their public pages, as CabanaBot, following their robots.txt.
Speed and traffic
With the snippet installed, each visit reports Core Web Vitals (LCP, CLS, INP), device type and where it came from: search engines, AI assistants, social, email or direct. Without it, SEO for Free uses Google’s public Chrome UX Report when your site has enough traffic.
The SEO Score
Each page is checked against 83 checks in nine areas (technical, on-page, content, structured data, speed, social previews, AI search, local & Africa, and trust & security) and scored from 0 to 100; the site score weights the pages that matter most. Bands: Excellent 90+, Strong 75–89, Fair 55–74, Weak 35–54, Critical below 35.
Measured, reported, estimated
Every figure SEO for Free produces says how it is known, in the console, on the public reading and in the API (basis):
basis | Meaning |
|---|---|
measured | SEO for Free saw it itself, just now: a header, a tag, a redirect, a robots.txt line. |
reported | An outside source says so and is named in source: a domain registry, the Internet Archive, Tranco, Chrome’s field data, RIPE NCC, public DNS. |
estimate / inferred | Worked out from other facts, such as the speed of a page from its size, or the technology behind a site from its headers. Counted at reduced weight in the score and always labelled. |
When SEO for Free cannot know something it says so, and never fills the gap: an unreachable site is state: "unreachable" with the reason, a firewall that refuses SEO for Free is state: "blocked" with the firewall named, and a page robots.txt closes to CabanaBot is state: "robots_blocked". SEO for Free does not disguise itself to get past a firewall.
Authentication
Base URL https://seoforfree.online/api/engine/v1. Send a secret key in Authorization: Bearer eng_sk_… (or X-Api-Key) from your server only.
Endpoints
Connect a website by its address. See Connect a website.
Your websites with their status (connected or verified), ownership, score, band and last read.
One site: score, scores by area and a summary of the top issues.
Every page read, worst first, with its score and issues.
Read the site again now. Counts towards your plan’s reads.
Disconnect the site and delete what SEO for Free holds for it.
Approved fixes and ready-made head tags for one page. See server-side fixes.
A free reading of any public website, with no key. See The public reading.
The public reading
The box on our home page is an API you can use. GET /api/engine/v1/check?url=example.co.ke needs no key and returns a reading: the home page and up to seven more chosen from the menu and the sitemap, audited with all 83 checks, plus robots.txt, the AI crawler matrix, sitemaps, the four address variants, the certificate, DNS and domain registration. It obeys robots.txt first. Limits: 8 fresh readings per ten minutes per network; a repeat of a reading we hold is free for 30 minutes. Nothing is stored in a database.
# the shape of a reading
{ "state": "ok", "score": 67, "band": { "label": "Fair" }, "scores": { "technical": 91, … }, "basis": { "speed": "estimate", … },
"confidence": { "level": "high", "reasons": [ "8 pages were read of about 113 the site lists, chosen across its sections." ] },
"issues": [ { "id": "…", "title": "…", "problem": "…", "how": "…", "pages": 3, "fix": "title" } ],
"pages": [ … ], "home": { "facts": { … }, "headers": { … }, "tech": [ … ] }, "site": { "robots": { "ai": { "agents": [ … ] } }, "sitemap": { … } },
"intel": { "dns": { "ok": true, "basis": "reported", "source": "…", "data": { … } }, … },
"modules": { "pending": [ "history", "rank", "hosting", "vitals", "lab" ], "token": "…" } }
The slower questions are asked separately, so a page can fill in as answers arrive. Each takes the token the reading gave, which ties the question to a reading that really happened.
| Module | Source |
|---|---|
GET /scan/history?host=…&token=… | The Internet Archive: first and last snapshot. |
/scan/rank | Tranco: popularity among the world’s top million sites, with a month of history. |
/scan/hosting | RIPE NCC: network, place, and the fastest a reply could reach African cities (only when no CDN fronts the site). |
/scan/vitals | Chrome UX Report: real visitors’ Core Web Vitals on phones. Needs a Google API key on the server; answers no_key without one. |
/scan/lab | Google PageSpeed Insights: a Lighthouse run. 20 to 40 seconds. |
/scan/compare?rivals=a.com,b.com | Reads up to three rivals the same way and compares only on the checks both sites could be judged on. Limited to 5 a ten minutes. |
/scan/competitors | Who appears in search results for the phrases the site should be found for. Needs a search data source on the server and says so when it has none. |
Each module answers { id, ok, basis, source, at, data }, or { ok: false, error } with no_key, timeout and similar codes. Every one is its own request: a slow source never delays the others.
Webhooks
| Event | When |
|---|---|
engine.crawl.completed | A read of your site finished: new score, previous score, pages and top issues |
property.verified | A website was verified |
property.updated | Its standing changed in the daily look |
ping | A test from the console |
Each POST carries Cabana-Signature: t=<unix seconds>,v1=<hex>: an HMAC-SHA256 of t + "." + raw body under the endpoint’s signing secret. Reject anything older than five minutes. Failed deliveries are retried after 1, 5 and 30 minutes, then 2, 6 and 24 hours.
import { createHmac, timingSafeEqual } from 'node:crypto';
export function verified(rawBody, header, secret) {
const p = Object.fromEntries(String(header).split(',').map(x => x.split('=')));
if (!p.t || Math.abs(Date.now() / 1000 - Number(p.t)) > 300) return false;
const want = createHmac('sha256', secret).update(`${p.t}.${rawBody}`).digest('hex');
return want.length === String(p.v1).length && timingSafeEqual(Buffer.from(want), Buffer.from(p.v1));
}
Errors and limits
Errors are JSON: { "error": "…", "code": "…" } with 400 (bad request), 401 (invalid_key), 402 (trial_ended), 403 (wrong_key_kind, origin_not_verified), 404, 409 (not_connected; a site already connected; the plan’s site limit), 429 (quota_exceeded). The free trial covers one site, 100 pages per read, 30 reads, 3 competitors and 1,000 API calls a month.
Privacy
SEO for Free is operated by Cabana, Nairobi, Kenya. Contact hello@seoforfree.online.
- Your website: we read your public pages, robots.txt and sitemaps, and keep what we need to score them and track changes.
- The free reading on our home page: the address typed is read once. The result is held in memory for 30 minutes so a repeat costs nothing, and is not saved to a database. We read only what any visitor’s browser could, and only where robots.txt allows.
- Your visitors: the snippet sends the page address, the referring site, speed measurements, device type and a fingerprint of the page text. No cookies, no visitor ID, no IP address kept, and nothing at all under Do Not Track or Global Privacy Control.
- Search Console: only if you add our service account; we read search performance for your site and nothing else.
- Service providers: hosting and database (Vercel, Supabase), email (Resend), AI writing (Groq, Cloudflare Workers AI, which receive your page text only), and search result data providers for competitor discovery.
- Your account: your team’s email addresses and activity, kept while your account is open.
- Your rights: to see, correct or delete your data. Write to us.
Terms of service
Please read these terms carefully. They explain what you can expect from us and what we expect from you.
1. About these terms
These terms are the agreement between you (the business or organisation that opens a workspace, “you”) and Cabana, operating SEO for Free from Nairobi, Kenya (“we”, “us”). They apply to the SEO for Free website, console, scripts, widgets, links, APIs, webhooks, sandbox and any email or support we provide for it (together, the “Service”). By creating a workspace, adding a website or app, creating an API key, or otherwise using the Service, you accept these terms. If you accept them for an organisation, you confirm you have the authority to bind it. If you do not agree, do not use the Service.
SEO for Free is a separate service. It has its own terms, and nothing here gives you rights in other Cabana services.
2. Who may use it
You must be at least 18, be able to enter a contract, and use the Service for business, professional or organisational purposes, not as a consumer. You must give us true and current information when you sign up and keep it up to date. One person may manage several workspaces; each is a separate account.
3. Your workspace and your team
You are responsible for everything done through your workspace, your sign-in codes and your API keys, including by people you invite. Keep secret keys on your servers only, never in a web page, app or public repository. Tell us at once if you think a key or an email account has been compromised so we can help you revoke it. We may assume anyone using your keys or signed in as you is acting for you.
4. Connecting a website, and proving it is yours
You can connect a website by its address without proving you own it. You promise that you own it or are authorised to analyse and improve it, and that you will not connect a website in order to harm, copy or spy on someone else. Proving ownership (a file, a DNS record, a meta tag, installing the SEO for Free snippet or connecting Google Search Console) is optional: it raises the level of trust SEO for Free shows for the site. For a site you have verified, we re-check the proof every day; if it disappears you have seven days to restore it before the site stops showing as verified. If a connected site appears not to be yours, or you were not authorised to connect it, we may pause the Service on it, tell you why, and restore it once a person at SEO for Free is satisfied. This protects the people who use the site and everyone else who uses the Service. You agree to this monitoring.
5. Acceptable use
You must not, and must not let anyone else:
- break any law, or use the Service for or on a website or app that is unlawful, deceptive, fraudulent or harmful (including gambling or adult content you are not licensed for, phishing, counterfeit or fake documents, investment fraud, drugs or weapons trade, or content that exploits children);
- publish fixes to, or otherwise change, a website you do not own or manage, or pretend to be another business or person;
- probe, scan, overload or try to get around the security or the limits of the Service, or attempt to reach another customer’s data;
- copy, resell, white-label or build a competing service from the Service, or use its output to train a competing model, without our written agreement;
- share your keys, or use more than one free trial by opening several workspaces;
- use the Service in a way that breaches the rights of anyone else.
We may suspend or limit anything that breaks this section, immediately if there is a risk to people or to the Service.
6. What SEO for Free does
SEO for Free reads your website’s public pages, scores them against a set of search-engine checks, suggests fixes, applies the ones you approve (or the safe kinds you switch on for automatic approval), and reports how your pages are found. It also compares your site with competitors’ public pages and, if you connect it, reads your Google Search Console data. It does not promise any ranking, traffic or sales.
7. Crawling and CabanaBot
You authorise CabanaBot to read the pages of websites you connect, at the pace and frequency of your plan, following your robots.txt. SEO for Free also reads a limited number of public pages of other sites that rank for your keywords, as CabanaBot, following their robots.txt, to compare them with yours. You will not ask us to read a site you are not entitled to compare, or use the comparison for anything unlawful. You can keep CabanaBot out of any site by robots.txt.
8. Fixes and the snippet
You decide which fixes go live. A fix is written from your own page and is not allowed to add a number or claim the page does not contain, but you must still check that anything published on your website is accurate and lawful, including prices, claims and structured data. Approved fixes are applied by the one-line snippet on your pages, or by the ready-made tags you place on your server. You can undo or remove any fix and can remove the snippet at any time. You are responsible for your website’s content and for how fixes interact with your own code and theme.
9. Search engines are not ours
Search engines (including Google, Bing and the AI assistants that cite websites) decide rankings with their own rules that change without notice. SEO for Free improves what you can change; it cannot control them. Scores, rankings, competitor lists and estimates are provided to help you and may be incomplete or out of date. Your use of Google Search Console, IndexNow and third-party data is also subject to those services’ own terms.
10. Google Search Console
If you add our service account to your Search Console property, you allow us to read search performance data for that property, and nothing else. You can remove it at any time. We do not change anything in your Search Console.
11. Visitors to your website
If you install the snippet, it sends anonymous page-view information (page address, referrer, speed measurements, device type and a fingerprint of the page text), with no cookies, visitor identifier or IP address kept, and it does nothing at all when the visitor’s browser sends Do Not Track or Global Privacy Control. You are responsible for your own privacy notices to your visitors, and should mention the snippet in them.
12. Data protection
We read public pages and your account details, and, through the snippet and Search Console, aggregate visitor information about your site. For any personal data in them we act on your instructions and on these terms, and we handle it as set out in the privacy notice, which forms part of these terms. Each of us will comply with the data protection laws that apply to us, including the Kenya Data Protection Act, 2019, and, where they apply, the GDPR and similar laws.
13. Trial, plans and prices
SEO for Free is free during the trial programme, with the limits shown in your console, for the period shown there. Paid plans and their prices are coming soon. We will announce them well before any charge, you will not be charged anything unless you choose a paid plan and agree to its price, and we will give you reasonable notice before the free trial or any free feature ends or changes. Limits may be adjusted to prevent abuse.
14. Our service, and changes to it
We work hard to keep the Service available and correct, but we do not promise it will be uninterrupted or error-free. We may change, improve or remove features, run maintenance, and set or change usage limits. If we make a change that materially harms you, we will give notice where we reasonably can. The sandbox and test keys are for building and are not for production use.
15. Intellectual property
We own the Service and everything in it, including its software, models, scores, designs, documentation and brand. You get a limited, non-exclusive, non-transferable, revocable right to use the Service during these terms, for your own business, in line with them. You keep everything that is yours: your websites, content, data and brand. You give us the rights we need to read, process and store them to run the Service for you, and, where these terms or the privacy notice say so, to improve our fraud and quality systems. Feedback you give may be used by us without obligation.
16. Confidentiality
Each of us will keep the other’s non-public information confidential, use it only for the Service, and protect it with reasonable care, except where we must disclose it by law or to our advisers and service providers who are bound to confidentiality. Information that is public, or that we learn lawfully from someone else, is not confidential.
17. Disclaimer
The Service is provided “as it is” and “as available”. To the fullest extent the law allows, we give no warranties of any kind, express or implied, including merchantability, fitness for a particular purpose, accuracy, non-infringement, or that results will be achieved. Outputs of automated systems, including AI, can be wrong; you are responsible for how you use them and for your own decisions. Nothing in these terms limits anything that cannot lawfully be limited.
18. Limits on our liability
To the fullest extent the law allows, we are not liable for indirect, incidental, special, consequential or punitive loss, loss of profit, revenue, goodwill or data, or business interruption, even if told it might happen. Our total liability to you for all claims arising from the Service in any 12 months is limited to the amount you paid us for the Service in the 12 months before the first claim, or, if you have paid nothing, to KES 10,000. These limits do not apply to liability that cannot be limited by law, including for fraud or for death or personal injury caused by negligence.
19. Your responsibility to us
You will compensate us for losses, claims, fines and reasonable costs that come from your breach of these terms, your breach of law, your content, or your use of the Service in a way we did not allow, including claims by people whose data you handled through the Service. We will tell you promptly of a claim, let you help defend it, and not settle it in a way that binds you without your agreement, which you will not unreasonably withhold.
20. Suspension and ending
You may stop using the Service at any time and ask us to close your workspace. We may suspend or end the Service for you if you break these terms, if the law requires, if keeping you would put people or the Service at risk, or if we stop offering the Service, and we will tell you why where we can. When a workspace ends, your keys stop working. We delete or anonymise its data as set out in the privacy notice, keeping only what we must by law or need to protect people from fraud. Clauses that by their nature should survive (including ownership, confidentiality, disclaimers, liability, compensation and governing law) do.
21. Notices and support
We will contact you at the email of your workspace owner, and by notices in your console. You can write to us at hello@seoforfree.online. Please keep the owner email current: notices sent to it count as received.
22. Changes to these terms
We may update these terms. We will give notice of material changes in your console or by email before they apply, and the date at the bottom will change. If you keep using the Service after the change applies, you accept the new terms. If you do not agree, you may stop and close your workspace.
23. Law and disputes
These terms and any dispute about them are governed by the laws of Kenya. We will try to settle any dispute in good faith first. If we cannot, the courts of Kenya have exclusive jurisdiction, except that either of us may ask any court for urgent protection of its intellectual property or confidential information. If a part of these terms is found unenforceable, the rest still applies. Our failure to enforce a right is not a waiver of it. You may not transfer these terms without our written consent; we may transfer them as part of a merger or sale of the business. These terms, with the privacy notice, are the whole agreement for the Service.
Last updated 21 October 2026.