# netweft — complete site > netweft is an SEO research and rank-tracking platform. Keyword research, scheduled rank checks, site audits and backlink data for the sites you own — every position stored as a timestamped observation, every paid lookup priced in credits before it runs. Generated 2026-10-24 from https://netweft.com. Every document below is also available on its own at its page path plus `.md`. ## Key facts - **Plans.** Pro is $50 a month with 125,000 credits a month, 5 projects and 250 tracked keywords per project, Studio is $100 a month with 280,000 credits a month, 12 projects and 500 tracked keywords per project and Agency is $200 a month with 600,000 credits a month, 25 projects and 1,000 tracked keywords per project. Billed yearly, up to 20% off. - **No free tier.** A workspace with no subscription has no access. Every plan opens with a free trial and its own trial credits (Pro 3,000, Studio 5,000 and Agency 8,000). - **Credits.** One credit is $0.0001 of raw vendor cost. Credits are reserved at the rate card's price before a paid call runs and settled against what the vendor actually charged. A workspace that cannot cover a call is refused with the shortfall named — there is no overage. Plan credits expire with their month; top-up credits never do, and a dollar buys 2,500 of them. - **What it does.** Keyword research, rank tracking, site audit, domain and backlinks, and AI visibility: 5 capabilities, priced per operation. - **What it does not do.** No link index of its own, no content tooling, no paid-search or social or local features, no white-label client reporting, and no authority score of netweft's invention. - **Rankings.** Every check is stored as a timestamped observation. A week where the domain did not rank is stored as a category, never as a zero and never as a gap. - **Data.** Real data comes from DataForSEO, cached and rate limited per workspace, behind a port with a deterministic mock implementation. Payments run on Polar as merchant of record; netweft stores no card data. - **Machine surface.** An OpenAPI 3.1 document over the whole HTTP API, and an MCP server at POST /mcp under a scoped API key. Every MCP tool is read-only over stored rows and none of them spends a credit. - **Sign-in.** Google, GitHub, or an email and a password. Passwords are checked against known breaches and stored as scrypt hashes, and an email account is confirmed with a six-digit code. Search Console and GA4 are connected per project, read-only, with scopes requested at connection time. --- # netweft — rank tracker and SEO tools, priced per lookup > netweft is an SEO research and rank-tracking platform. Keyword research, scheduled rank checks, site audits and backlink data for the sites you own — every position stored as a timestamped observation, every paid lookup priced in credits before it runs. Source: https://netweft.com/ ## What netweft is netweft is an SEO research and rank-tracking platform. Keyword research, scheduled rank checks, site audits and backlink data for the sites you own — every position stored as a timestamped observation, every paid lookup priced in credits before it runs. ## What makes it different - **Rankings are stored observations.** A position check is written as a snapshot at the moment it was taken, so history is a record of what was seen rather than a number recomputed on read. - **A week that did not rank is a value.** It is stored and drawn as `not ranking`, never as a zero and never as a gap. - **Every paid operation is metered before it runs.** One credit is $0.0001 of raw vendor cost. Credits are reserved ahead of the call and settled against what the vendor actually charged. - **The data provider sits behind a port.** A mock provider serves deterministic fixtures with no credentials, so the product runs offline; DataForSEO serves real data, cached and rate limited per workspace. - **There is a machine surface.** `POST /mcp` under an API key exposes a workspace's audits, keywords, rankings and project overview, and the HTTP API is described by an OpenAPI 3.1 document. - **The assistant cannot invent a figure.** The project chat and the onboarding strategist are restricted to numbers read back through tools. ## A sample month on the record: example.com, February 2026 One project at Pro's own limits, checked weekly. The project and its findings are sample material; every credit figure is the live rate card the API reserves against. | Date | Entry | Operations | Credits | | --- | --- | --- | --- | | 2026-02-02 | Keyword research | Keyword ideas × 1 lookup; Keyword volume × 1,000 keywords | 1,800 | | 2026-02-02 | Rank check | Rank check × 500 results pages | 10,000 | | 2026-02-04 | Site audit | Page crawled × 1,000 pages | 1,000 | | 2026-02-09 | Rank check | Rank check × 500 results pages | 10,000 | | 2026-02-11 | Domain and backlinks | Domain overview × 1 lookup; Referring domains × 1 lookup | 674 | | 2026-02-16 | Rank check | Rank check × 500 results pages | 10,000 | | 2026-02-17 | Assistant | Assistant reply × 1 turn | 223 | | 2026-02-19 | Agent read | read of stored rows | 0 | | 2026-02-23 | Rank check | Rank check × 500 results pages | 10,000 | | | **Month total** | | **43,697** | The crawl is netweft's own compute; the rest is $4.27 of vendor cost. Pro grants 125,000 credits a month, enough for 2 months like this one. ## Capabilities - [Keyword research](https://netweft.com/features/keyword-research): Keyword research tool: volume, CPC, competition, difficulty and intent for a keyword or a seed, with twelve months of history, saved to a project. - [Rank tracking](https://netweft.com/features/rank-tracking): Keyword rank tracking on a daily, weekly or monthly schedule or on demand, with every check stored as a snapshot rather than recomputed. - [Site audit](https://netweft.com/features/site-audit): Technical SEO site audit: a crawl that honours robots.txt, finds broken links and redirect chains, and ranks every issue by severity. - [Domain and backlinks](https://netweft.com/features/backlinks): Backlink checker and domain overview: links, referring domains, ranked keywords and top pages for your domain or anyone else's. - [AI visibility](https://netweft.com/features/ai-visibility): AI visibility tracker: how often AI answers on Google and ChatGPT name your domain, which sources they cite, and your share against competitors. - Machine surface: A machine surface at POST /mcp, authenticated by API key, so an agent can read a workspace's audits, keywords, rankings and project overview. The whole HTTP API is described by an OpenAPI 3.1 document. ## Common questions **Is there a free plan?** No. netweft has no free tier — a workspace with no subscription has no access. Every plan opens with a free trial: Pro $50 a month with a 3-day trial, Studio $100 a month with a 7-day trial and Agency $200 a month with a 7-day trial. **Does the trial need a card?** Yes. The checkout takes a card to start the trial and charges nothing until the trial ends — Pro 3 days, Studio 7 days and Agency 7 days. Cancel from billing before the last day and nothing is charged at all; otherwise the plan starts and its first period is billed then. **What is a credit?** One netweft credit is $0.0001 of raw vendor cost, so 10,000 credits is exactly $1.00 of vendor spend. Every operation that costs money — a data lookup, a crawled page, an AI call — reserves credits before it runs and settles against what the vendor actually charged, so a workspace with no credits is refused before the money is spent rather than billed afterwards. **Do unused credits roll over?** Plan credits are granted every month, on monthly and yearly billing alike, and expire at the end of that month. Credits bought as a top-up never expire, because expiring something somebody paid cash for invites chargebacks. Plan credits are always spent first, so nobody loses credits they could have used. **How much does a top-up cost?** A dollar buys 2,500 credits, with a $10 minimum. Bought as top-ups, each plan's monthly credits would cost Pro $50 against $50 for the plan, Studio $112 against $100 for the plan and Agency $240 against $200 for the plan. The plan also buys the platform — the projects, tracking, audits and assistant that credits alone do not — so it is never the dearer way to buy credits, and from Studio up its credits alone cost less than top-ups. **How do I sign in?** With Google, GitHub, or an email address and a password. A Google or GitHub sign-in creates the account on first use; an email account is confirmed with a six-digit code sent to the address. Search Console and GA4 access is requested separately, per project, when you connect those integrations rather than at sign-in. **Can an AI agent read my workspace?** Yes. netweft exposes an MCP server at POST /mcp, authenticated by API key, so an agent can read a workspace's audits, keywords, rankings and project overview. The whole HTTP API is also described by an OpenAPI 3.1 document, so a client can be generated from it. **Can netweft's AI assistant invent a number?** No. The per-project chat and the onboarding strategist are both restricted to figures read back through tools, so an answer either cites something the product measured or says it does not have it. **Where does the SEO data come from?** Real data comes from DataForSEO, cached and rate limited per workspace so switching to it does not uncap spend. The provider sits behind a port with a mock implementation that serves deterministic fixtures and needs no credentials, which is what lets the product run offline. Nothing above the port knows which one answered. --- # Features > Keyword research, rank tracking, site audits and backlink reporting — what each one does and what each one costs in credits. Source: https://netweft.com/features netweft answers the questions a project raises, one capability per question. ## Keyword research Keyword research tool: volume, CPC, competition, difficulty and intent for a keyword or a seed, with twelve months of history, saved to a project. Read more: https://netweft.com/features/keyword-research ## Rank tracking Keyword rank tracking on a daily, weekly or monthly schedule or on demand, with every check stored as a snapshot rather than recomputed. Read more: https://netweft.com/features/rank-tracking ## Site audit Technical SEO site audit: a crawl that honours robots.txt, finds broken links and redirect chains, and ranks every issue by severity. Read more: https://netweft.com/features/site-audit ## Domain and backlinks Backlink checker and domain overview: links, referring domains, ranked keywords and top pages for your domain or anyone else's. Read more: https://netweft.com/features/backlinks ## AI visibility AI visibility tracker: how often AI answers on Google and ChatGPT name your domain, which sources they cite, and your share against competitors. Read more: https://netweft.com/features/ai-visibility --- # Keyword research tool with 12 months of volume > Keyword research tool: volume, CPC, competition, difficulty and intent for a keyword or a seed, with twelve months of history, saved to a project. Source: https://netweft.com/features/keyword-research netweft is a keyword research tool for the sites you own, priced per lookup in credits. Research starts from a keyword you already suspect or a seed you want expanded. What comes back is the whole picture for that term in the project's market — monthly search volume, cost per click, advertiser competition, a difficulty score and the intent behind the query — with the last twelve months of volume beside it, so a term that is seasonal reads as seasonal rather than as a single number in a row. ## Twelve months, not one number A keyword's volume is stored as a series. A term that triples in November and collapses in January is visible as that shape, which is the difference between planning a page for it and being surprised by it. ## Charged per keyword, so the cost is legible Keyword metrics are billed the way the vendor bills them: per keyword, plus a fee per request for the vendor's own task charge. Refreshing five hundred saved keywords costs 720 credits. The two Google Ads endpoints — the fallback for countries the Labs dataset does not cover — are billed per request instead, so one keyword and a thousand keywords cost the same. That distinction is in the rate card rather than in a footnote, because a per-unit reservation against a per-request charge is exactly how metered products quietly overbill. ## Saved to a project, tagged, and re-readable A researched keyword is saved against the project whose market it was researched in, and tagged. Nothing is global: a keyword set belongs to a site and a market, not to an account. ## What it costs | Operation | Basis | Credits | | --- | --- | --- | | Keyword metrics | per keyword, plus a per-request fee | 1.2 | | Keyword ideas | per request, up to 200 rows | 360 | | Ads keyword metrics | per request, outside Labs coverage | 900 | | Ads keyword ideas | per request, outside Labs coverage | 900 | --- # Keyword rank tracker with stored history > Keyword rank tracking on a daily, weekly or monthly schedule or on demand, with every check stored as a snapshot rather than recomputed. Source: https://netweft.com/features/rank-tracking netweft is a keyword rank tracker: it checks a domain's positions daily, weekly, monthly or on demand, and keeps every check as a dated observation. A project names one domain and a set of keywords to watch. A background worker checks them on a schedule, and you can run a check by hand whenever you want one. Every check writes a snapshot: the position seen, the URL that held it, and the moment it was seen. The history is the list of those snapshots. ## Snapshots, not recomputation The distinction matters the first time a number disagrees with your memory. A tracker that recomputes history from today's index can quietly rewrite what you saw last Tuesday. netweft stores each observation as it was taken, so last Tuesday's row is last Tuesday's row, and a change in the record means the SERP changed rather than the model did. ## Not ranking is a value, not a gap A keyword that did not rank is stored and drawn as a category called not ranking. It is never a zero, never an empty cell, and never a line that skips across the missing week. A zero means position zero; a gap means the check did not run. Neither is what happened. ## Search Console sits beside it, per project Search Console and GA4 connect per project with read-only scopes, requested when the integration is connected rather than at sign-in. Granting access is account-wide and choosing a property is per project, which is why netweft keeps them as two steps: a control that sometimes does one and sometimes both is why these flows feel broken elsewhere. ## What it costs | Operation | Basis | Credits | | --- | --- | --- | | SERP page | per 10 results, per keyword, per device | 20 | --- # Technical SEO site audit, ranked by severity > Technical SEO site audit: a crawl that honours robots.txt, finds broken links and redirect chains, and ranks every issue by severity. Source: https://netweft.com/features/site-audit netweft's site audit is a technical SEO crawler: it finds broken internal links, redirect chains and on-page issues, and ranks them by severity. The audit is netweft's own crawler rather than a vendor's. It reads robots.txt and honours it, walks the site up to the plan's page ceiling, classifies what it finds, and reports issues by severity so the list is worked from the top rather than read end to end. ## Our crawler, so the cost is compute and not vendor spend A crawled page costs one credit. That credit covers netweft's own compute and bandwidth — there is no vendor invoice behind it. It is also the single biggest driver of infrastructure cost in the product, which is why the per-run page ceiling is a plan limit rather than an unbounded setting. ## The performance check is opt-in, and priced where you can see it A Lighthouse pass costs 50 credits a page against $0.005 of vendor cost. netweft measures a sample rather than every crawled page, the start URL and one page per URL shape up to 10, so the pass adds at most 500 credits to an audit. It is opt-in per audit, and the number is stated here rather than discovered in a ledger afterwards. ## Severity, so the list has a top Findings are classified rather than listed. An audit that returns four hundred equal-weight items is a backlog nobody starts; an audit that ranks them is a morning's work. ## What it costs | Operation | Basis | Credits | | --- | --- | --- | | Crawled page | per page | 1 | | Performance check | per page, opt-in per audit | 50 | --- # Backlink checker and domain overview > Backlink checker and domain overview: links, referring domains, ranked keywords and top pages for your domain or anyone else's. Source: https://netweft.com/features/backlinks netweft is a backlink checker and domain overview for your domain or a competitor's, priced per lookup. Point netweft at a domain and it answers the questions you would otherwise assemble by hand: what it ranks for, which of its pages carry that traffic, who links to it, how many distinct domains those links come from, and what it links out to. It works the same on a competitor as on your own site. ## Priced per call, and cached Every domain and backlink lookup is a vendor call with a price on it. Responses are cached in Workers KV and every paid endpoint is rate limited per workspace, so switching from the offline mock provider to real data does not uncap spend. ## The overview is two calls, and says so A domain overview is a Labs rank overview plus a backlinks summary, summed. 362 credits is those two calls, not a number chosen to look round. Where a figure is the sum of vendor calls, the rate card says which calls. ## The same port, whichever provider is behind it The data provider sits behind a port. In the default mock mode the whole product runs offline on deterministic fixtures with no vendor account at all; in DataForSEO mode it buys real data. Nothing above the port knows which one answered, which is what makes the offline mode a real development surface rather than a demo. ## What it costs | Operation | Basis | Credits | | --- | --- | --- | | Domain overview | per request | 362 | | Ranked keywords | per request, up to 200 rows | 360 | | Top pages | per request, up to 200 rows | 360 | | Backlink summary | per request | 241 | | Individual links | per request, up to 200 rows | 312 | | Referring domains | per request, up to 200 rows | 312 | | Linked pages | per request, up to 200 rows | 312 | | Domain keyword ideas | per request, up to 200 rows | 360 | --- # AI visibility tracker for ChatGPT and Google > AI visibility tracker: how often AI answers on Google and ChatGPT name your domain, which sources they cite, and your share against competitors. Source: https://netweft.com/features/ai-visibility netweft tracks AI search visibility: how often answers on Google and ChatGPT name your domain, and who they name instead. Ask once per assistant and netweft returns what an AI-search dataset has recorded for the project's domain: how many generated answers named it, how often the questions behind those answers are asked, which sources the answers cite, and the domain's share of mentions against the competitors recorded in the project's context. Google's AI answers are covered in every market; ChatGPT's in the US and in English only. ## A sampled figure, labelled as one A generated answer has no position to read and differs between runs, so what comes back is a count of mentions from a sampled dataset, not a rank. The lookup's cost is modelled rather than billed back to netweft line by line, so its price is labelled estimated wherever it appears. ## One platform, one price Each lookup reads one assistant's half of the dataset, at 2,150 credits, because the vendor prices Google and ChatGPT separately: asking about both at once would double the spend on a question you may only have about one. Nothing runs until you ask, and the receipt is printed with the result. ## Measured against competitors you named Share of voice compares the domain with the competitors recorded in the project's own context, not with a list netweft chose. With no competitors recorded, the share is left empty rather than computed against nobody, and changing the list drops answers measured against the old one. ## What it costs | Operation | Basis | Credits | | --- | --- | --- | | AI brand visibility | per platform lookup | 2,150 | --- # SEO pricing: plans, credits and the rate card > Three plans, monthly or yearly at up to 20% off, no free tier, and the whole credit rate card. One credit is $0.0001 of raw vendor cost, reserved before an operation runs and settled against the real charge. Source: https://netweft.com/pricing ## Plans There is no free tier. A workspace with no subscription has no access. ### Pro — $50 a month, or $540 a year - 3-day trial with 3,000 credits - 125,000 credits a month (each month's expire with it, on monthly and yearly billing alike) - Billed yearly: 10% off - 5 projects - 250 tracked keywords per project - 1,000 saved keywords per project - 60 audits a month, 1,000 pages per run ### Studio — $100 a month, or $1,020 a year - 7-day trial with 5,000 credits - 280,000 credits a month (each month's expire with it, on monthly and yearly billing alike) - Billed yearly: 15% off - 12 projects - 500 tracked keywords per project - 2,500 saved keywords per project - 150 audits a month, 2,500 pages per run ### Agency — $200 a month, or $1,920 a year - 7-day trial with 8,000 credits - 600,000 credits a month (each month's expire with it, on monthly and yearly billing alike) - Billed yearly: 20% off - 25 projects - 1,000 tracked keywords per project - 5,000 saved keywords per project - 300 audits a month, 5,000 pages per run ## Credits - One credit is $0.0001 of raw vendor cost, so 10,000 credits is exactly $1.00 of vendor spend. - Plan credits are granted each month and expire at the end of it, on monthly and yearly billing alike. - Top-up credits are bought with money and never expire. Plan credits are always spent first. - A dollar buys 2,500 top-up credits. - A trial workspace gets its own credits (Pro 3,000, Studio 5,000 and Agency 8,000), is held to a tighter rate limit, and cannot use auto top-up. It can start its plan early at any time. ## Rate card Credits reserved per unit. The reservation is a ceiling; the real charge is read off the vendor's response and settled against it. | Operation | Charged | Credits | | --- | --- | --- | | Ads keyword ideas (`adsKeywordIdeas`) | per request | 900 | | Ads keyword metrics (`adsKeywordMetrics`) | per request | 900 | | Keyword ideas (`keywordIdeas`) | per request, up to 200 rows | 360 | | Keyword metrics (`keywordMetrics`) | per keyword, plus 120 per request | 1.2 | | AI-search brand lookup (`brandVisibility`) | per platform | 2,150 | | SERP page (`serp`) | per 10 results, per keyword, per device | 20 | | Crawled page (`auditPage`) | per page | 1 | | Performance check (`lighthousePage`) | per page, opt-in | 50 | | Backlink summary (`backlinkSummary`) | per request | 241 | | Individual links (`backlinks`) | per request, up to 200 rows | 312 | | Linked pages (`backlinkTopPages`) | per request, up to 200 rows | 312 | | Domain keyword ideas (`domainKeywordIdeas`) | per request, up to 200 rows | 360 | | Ranked keywords (`domainKeywords`) | per request, up to 200 rows | 360 | | Domain overview (`domainOverview`) | per request | 362 | | Top pages (`domainPages`) | per request, up to 200 rows | 360 | | Referring domains (`referringDomains`) | per request, up to 200 rows | 312 | | Assistant turn (`chatTurn`) | ceiling per turn | 223 | | Context section draft (`draftContextSection`) | ceiling per draft | 12 | | Onboarding strategy turn (`strategyTurn`) | ceiling per turn | 256 | - Ads keyword metrics: The fallback for countries the Labs dataset does not cover. Charged per request, so one keyword and a thousand cost the same. - Keyword metrics: Refreshing 500 saved keywords costs 720 credits: the vendor charges a fee per request and a little per keyword. - AI-search brand lookup: Estimated rather than verified against a vendor invoice. - SERP page: A check reads one page per ten positions of depth. At the default depth of 20 that is 40 credits per keyword per device. - Crawled page: netweft's own crawler. No vendor cost behind it — this covers compute and bandwidth. - Performance check: Measured on a sample of up to 10 pages, one per URL shape, so it adds at most 500 credits to an audit. Opt-in per audit. - Domain overview: Two vendor calls summed: a Labs rank overview plus a backlinks summary. - Assistant turn: The most one chat turn can cost at the configured caps. A turn that answers straight away settles for a fraction of it. - Onboarding strategy turn: Model spend only. Paid lookups the strategy tools make settle against their own entries above. --- # Use cases > Four shapes of team — agencies, SaaS, ecommerce and in-house — each with the month priced line by line against the live rate card. Source: https://netweft.com/use-cases Four shapes of team, each with an illustrative month priced line by line against the live rate card. - [Agencies](https://netweft.com/use-cases/agencies): A team running organic for a portfolio of client sites, where every hour and every lookup eventually has to be attributed to one of them. 356,240 credits a month, 59% of Agency's allowance. - [SaaS teams](https://netweft.com/use-cases/saas): A product team that owns one domain, publishes docs and comparison pages against it, and has to show whether organic moved at the end of a quarter. 44,400 credits a month, 36% of Pro's allowance. - [Ecommerce](https://netweft.com/use-cases/ecommerce): A catalogue site where the page count is in the thousands, most of it never ranks, and the audit is the only thing that can tell you which part of it is broken. 223,240 credits a month, 37% of Agency's allowance. - [In-house teams](https://netweft.com/use-cases/in-house): A small team inside a larger company, where the SEO tool is a line in somebody else's budget and gets looked at once a year. 19,450 credits a month, 16% of Pro's allowance. --- # Rank tracking and SEO tools for agencies > Per-project metering, so a client's month is a sum of rows, not a share of one subscription. What a twenty-site portfolio costs, and the reporting left out. Source: https://netweft.com/use-cases/agencies netweft is rank tracking and SEO research for agencies that bill per client: every project is metered on its own. An agency's problem with a seat-priced suite is that the cost of a client is unknowable: the subscription is one number and the clients are twenty, so what any one of them cost this month is an allocation rather than a measurement. netweft charges per operation against a project, so the month a client cost is a sum of rows rather than a division. ## Who this is A team running organic for a portfolio of client sites, where every hour and every lookup eventually has to be attributed to one of them. ## A project per client One project per client site, each with its own market, tracked keyword set and Search Console connection. Credits are spent against the project that asked for them, so the ledger is already per client before anybody exports it. ## History that survives a renewal conversation Every scheduled rank check is written as a timestamped observation, so the history a client sees in month nine is the record of what was observed in months one to eight — not a series recomputed today against today's index. ## Scoped keys for whatever you build on top An API key scoped to a subset of the workspace is what a reporting script or an agent uses. It is shown once, stored as a hash, narrowed per key, and revocable — which is the shape you want when a contractor needs read access to two clients and nothing else. ## What a month costs Unit counts are stated; per-unit prices are the live rate card the API reserves against. | Operation | Units | Credits | | --- | --- | --- | | Scheduled rank checks | ×16,000 results pages: 8,000 keyword checks across the portfolio read to the top 20 | 320,000 | | Monthly audits | ×10,000 crawled pages | 10,000 | | Backlink summaries | ×80 requests | 19,280 | | Research for pitches | ×5,000 keywords | 6,960 | | **Total** | | **356,240** | That is 59% of Agency's 600,000 credits a period, at $200 a month. ## What netweft will not do There is no white-label export, no client portal and no branded PDF. Reporting is the dashboard and the API — an agency that needs a logo on a deliverable has to build that step itself, over the API or the MCP surface. --- # SEO tools for SaaS teams > A few hundred keywords that matter and a record that holds up a year later. What a month costs at Pro's ceilings, and the content tooling netweft does not have. Source: https://netweft.com/use-cases/saas netweft is an SEO tool for SaaS teams: rank tracking, keyword research, site audits and an MCP server for agents. A SaaS team's organic work is narrow and long: a few hundred keywords that matter, a documentation tree that keeps growing, and a quarterly conversation about whether any of it moved. The expensive part is not the research — it is having a record twelve months later that was not recomputed to suit the argument. ## Who this is A product team that owns one domain, publishes docs and comparison pages against it, and has to show whether organic moved at the end of a quarter. ## Search Console beside the observations Search Console sits beside the rank record rather than replacing it: one is what Google reports about impressions and clicks, the other is what was observed at a position on a date. A quarter that moved shows in both, and a quarter that did not shows in both too. ## The audit is cheap enough to run weekly A docs tree grows faster than anybody audits it. The crawler is netweft's own, so a crawled page costs compute rather than vendor spend, and a weekly pass over five hundred pages is an affordable habit rather than a quarterly event. ## What the assistants say about you AI-search brand lookups ask what an assistant says about the product, per platform, priced per platform. It is the one figure in the product labelled as estimated rather than verified against a vendor invoice, and it says so where it appears. ## What a month costs Unit counts are stated; per-unit prices are the live rate card the API reserves against. | Operation | Units | Credits | | --- | --- | --- | | Scheduled rank checks | ×800 results pages: 400 keyword checks read to the top 20 | 16,000 | | Weekly audits of the docs tree | ×2,000 crawled pages | 2,000 | | Keyword research | ×400 keywords | 600 | | AI-search brand checks | ×12 platform lookups | 25,800 | | **Total** | | **44,400** | That is 36% of Pro's 125,000 credits a period, at $50 a month. ## What netweft will not do netweft will not write or score the content. There are no briefs, no outlines and no optimisation grades — the assistant answers questions about the workspace's own stored figures and is prevented from stating a number it did not read back through a tool. --- # SEO site audits for ecommerce catalogues > Crawl cost priced per page before the run, so a 5,000-page audit is a decision, not a surprise. What a catalogue month costs, and what netweft leaves alone. Source: https://netweft.com/use-cases/ecommerce netweft audits ecommerce catalogues with its own crawler, priced per page before the run. A catalogue makes pages faster than a team can read them. The questions that matter are which of them are broken, which of them rank, and which category terms are worth a landing page — and all three of those are counting problems where the cost has to be legible before the crawl starts. ## Who this is A catalogue site where the page count is in the thousands, most of it never ranks, and the audit is the only thing that can tell you which part of it is broken. ## The audit's price is visible before it runs A crawled page costs one credit, so even a five-thousand-page crawl is priced before it runs. The performance check is opt-in per audit and measures a sample, one page per template up to 10, so turning it on adds at most 500 credits however large the catalogue is. ## Severity, not a score Issues are classified by severity against a documented rule rather than scored, so the list has a top and the top is defensible. Nobody has to argue about whether a 73 is worse than a 68. ## Twelve months of volume, not one number A category term that is seasonal reads as seasonal: keyword research carries the last twelve months of volume beside the current number, so a term that peaks in November is not mistaken for a term in decline in March. ## What a month costs Unit counts are stated; per-unit prices are the live rate card the API reserves against. | Operation | Units | Credits | | --- | --- | --- | | Catalogue audits | ×20,000 crawled pages | 20,000 | | Scheduled rank checks | ×8,000 results pages: 4,000 keyword checks read to the top 20 | 160,000 | | Category research | ×100 idea requests | 36,000 | | Competitor domain overviews | ×20 domains | 7,240 | | **Total** | | **223,240** | That is 37% of Agency's 600,000 credits a period, at $200 a month. ## What netweft will not do There is no product-feed tooling, no merchant-centre integration and no paid-shopping research. netweft crawls the site, tracks the terms and reports the links; the storefront's own systems are somebody else's product. --- # SEO tools for in-house teams, itemised > An itemised month instead of an allowance nobody can explain. What a single-domain team spends, and what netweft does not offer procurement. Source: https://netweft.com/use-cases/in-house netweft is an SEO tool for in-house teams whose spend has to be itemised: every paid lookup is priced before it runs. An in-house team's constraint is rarely the work — it is explaining the tooling spend to somebody who does not do the work. A subscription that includes an allowance nobody can itemise is hard to defend. A ledger of operations, each with a unit count and a price, is not. ## Who this is A small team inside a larger company, where the SEO tool is a line in somebody else's budget and gets looked at once a year. ## The month is a list of rows Every paid operation reserves credits at a named price before it runs and settles against what the vendor actually charged. The month is therefore a list of rows, each with a unit count, rather than a percentage of an allowance. ## No overage, only refusal A workspace out of credits is refused before the money is spent, with the shortfall named. Nobody discovers an overage on an invoice, because there is no overage — there is a refusal. ## Roles that survive a reorganisation Owners, admins and members, with nobody able to act on a peer. An admin cannot demote another admin, which is the property you want when the team changes and the workspace does not. ## What a month costs Unit counts are stated; per-unit prices are the live rate card the API reserves against. | Operation | Units | Credits | | --- | --- | --- | | Scheduled rank checks | ×800 results pages: 400 keyword checks read to the top 20 | 16,000 | | Monthly audit | ×500 crawled pages | 500 | | Keyword research | ×500 keywords | 720 | | Assistant questions | ×10 turns, at the per-turn ceiling | 2,230 | | **Total** | | **19,450** | That is 16% of Pro's 125,000 credits a period, at $50 a month. ## What netweft will not do One workspace, one subscription, and no per-seat pricing to negotiate — but also no SSO beyond Google and GitHub, no SAML and no procurement-grade contract. Sign-in is Google, GitHub or an email and a password. --- # netweft vs Ahrefs, Semrush, Moz and DataForSEO > How netweft differs from the SEO suites people already pay for, and the five cases where it is the wrong tool and something else is the right one. Source: https://netweft.com/compare netweft is compared on the shape of the product rather than on a feature count. No page quotes another product's price, counts its features or rates its data. ## The comparisons - [Ahrefs alternative, compared on shape](https://netweft.com/compare/ahrefs): A crawled link index sold per seat, against per-operation metering over a vendor's data. What each one charges for, and five things netweft does not do. - [Semrush alternative, compared on shape](https://netweft.com/compare/semrush): A whole marketing platform against five metered capabilities. What is inside each subscription, and the five categories netweft leaves out entirely. - [Moz alternative, compared on shape](https://netweft.com/compare/moz): Proprietary authority metrics against measured observations with named provenance. What netweft refuses to compute, and why that is sometimes the wrong choice. - [DataForSEO API, or a product on top of it](https://netweft.com/compare/dataforseo): netweft's own data provider, and the honest case for skipping netweft and calling it directly. What the layer adds, and when it adds nothing. ## Where netweft is the wrong tool **The work is link building** netweft reads backlink data from a provider per request. It does not crawl the web, it holds no index of its own, and it cannot answer a question that requires one — such as which pages on the whole web link to a phrase. **You need content tooling** There are no briefs, no outlines, no optimisation scores and no writing assistant. The per-project assistant answers questions about the workspace's own stored figures, and is explicitly prevented from stating a number it did not read back through a tool. **You need paid, social or local** Organic only. Paid search, display, social and local are not in the product and are not planned into it. **You need white-label client reporting** Reports are the dashboard and the API. There is no white-label PDF, no client portal and no branded export. **You need to evaluate for free** There is no free tier and no free trial without a subscription started — a workspace with no subscription has no access. If the requirement is to evaluate without entering a card, netweft cannot meet it. --- # Ahrefs alternative, compared on shape > A crawled link index sold per seat, against per-operation metering over a vendor's data. What each one charges for, and five things netweft does not do. Source: https://netweft.com/compare/ahrefs netweft is an Ahrefs alternative for teams that want to pay per lookup and keep a stored rank history, and not one for link building. Ahrefs is built around an index it crawls itself, and the subscription buys access to it. netweft buys its data per call from a provider, stores what it fetched as a timestamped observation, and shows you the price of the next call before it makes it. Neither of those is the right answer in general; they are answers to different questions. Nothing below states Ahrefs's price, counts its features or rates its data. ## What a lookup costs **netweft.** Priced per operation in credits, and the price is shown before the operation runs. One credit is $0.0001 of raw vendor cost, the reservation is a ceiling, and the settled charge is read off what the vendor actually billed. **Ahrefs.** Priced per seat and per plan, with monthly allowances — keyword lookups, tracked keywords, crawled pages — that reset on a cycle. What an individual lookup costs is not a number the interface has to show you, because it is not a number the billing model uses. ## What ranking history is **netweft.** A rank check is a stored observation: keyword, location, device, position, the URL that held it, and the moment it was taken. History is the list of those rows, and a week where the domain did not rank is stored as a category rather than as a zero or a gap. **Ahrefs.** Rank history is a first-class feature in every suite of this kind. What differs is not whether it exists but whether the absence of a ranking is a value you can read back, and whether the number you are shown was observed or derived. ## What a machine can read **netweft.** The whole HTTP API is described by an OpenAPI 3.1 document, and there is an MCP server at POST /mcp under a scoped API key, so an agent can read a workspace's audits, keywords, rankings and project overview without a person in the loop. **Ahrefs.** An HTTP API is normally available on the higher tiers, priced in its own units. An MCP surface, where one exists, is a separate product decision from the API. ## Where link data comes from **netweft.** Backlinks, referring domains and linked pages are read from DataForSEO, priced per request on the rate card, and cached per workspace. netweft has no crawler of the wider web and does not pretend to. **Ahrefs.** A large suite of this kind runs its own web crawl and its own link index, which is the single most expensive thing to build in this category and the reason the seat price is what it is. ## What netweft does not do - A backlink index of its own — netweft reads a vendor's, it does not crawl the web for links - Content tooling: briefs, outlines, writing assistants, content gap scoring - A proprietary authority metric - Paid-search research and ad copy tooling - White-label client reporting ## Pick Ahrefs when If the work is link building, or if a proprietary authority score is what a client or a colleague expects on the report, use the tool that owns the index behind it. netweft reads link data through a vendor; a tool that crawls the web itself is answering a question netweft is only relaying. --- # Semrush alternative, compared on shape > A whole marketing platform against five metered capabilities. What is inside each subscription, and the five categories netweft leaves out entirely. Source: https://netweft.com/compare/semrush netweft is a Semrush alternative for teams whose work is organic search only, metered per lookup. Semrush sells a marketing platform — organic, paid, social, content and local, under one subscription with its own allowance for each. netweft does four things and meters them. If most of that platform would go unused, the comparison is not feature against feature; it is how much of a subscription is being paid for and never opened. Nothing below states Semrush's price, counts its features or rates its data. ## What a lookup costs **netweft.** Priced per operation in credits, and the price is shown before the operation runs. One credit is $0.0001 of raw vendor cost, the reservation is a ceiling, and the settled charge is read off what the vendor actually billed. **Semrush.** Priced per seat and per plan, with monthly allowances — keyword lookups, tracked keywords, crawled pages — that reset on a cycle. What an individual lookup costs is not a number the interface has to show you, because it is not a number the billing model uses. ## What ranking history is **netweft.** A rank check is a stored observation: keyword, location, device, position, the URL that held it, and the moment it was taken. History is the list of those rows, and a week where the domain did not rank is stored as a category rather than as a zero or a gap. **Semrush.** Rank history is a first-class feature in every suite of this kind. What differs is not whether it exists but whether the absence of a ranking is a value you can read back, and whether the number you are shown was observed or derived. ## What a machine can read **netweft.** The whole HTTP API is described by an OpenAPI 3.1 document, and there is an MCP server at POST /mcp under a scoped API key, so an agent can read a workspace's audits, keywords, rankings and project overview without a person in the loop. **Semrush.** An HTTP API is normally available on the higher tiers, priced in its own units. An MCP surface, where one exists, is a separate product decision from the API. ## How wide the product is **netweft.** Five capabilities — keyword research, rank tracking, site audit, backlinks and AI visibility — plus a per-project assistant that cannot state a figure it did not read back through a tool. Nothing else is sold in the same box. **Semrush.** A marketing platform: organic research alongside paid, social, content, local and reporting, each with its own limits inside the plan. ## What netweft does not do - Paid search, display and PPC keyword tooling - Social media publishing and monitoring - Content marketing tooling: briefs, optimisation scoring, plagiarism checks - Local SEO and listing management - Agency client portals and white-label reporting ## Pick Semrush when If the job description covers paid, social and content as well as organic, a broad suite is one subscription instead of four. netweft covers organic research, rank tracking, site audit and link reporting, and nothing beyond that line. --- # Moz alternative, compared on shape > Proprietary authority metrics against measured observations with named provenance. What netweft refuses to compute, and why that is sometimes the wrong choice. Source: https://netweft.com/compare/moz netweft is a Moz alternative for teams that want numbers from a named provider rather than a proprietary authority score. Moz is organised around metrics it computes itself from an index it maintains itself. netweft deliberately publishes no score of its own invention — every number in it either came from a named provider or is a direct observation, and it says which. That is a real trade, and for some teams it is the wrong one. Nothing below states Moz's price, counts its features or rates its data. ## What a lookup costs **netweft.** Priced per operation in credits, and the price is shown before the operation runs. One credit is $0.0001 of raw vendor cost, the reservation is a ceiling, and the settled charge is read off what the vendor actually billed. **Moz.** Priced per seat and per plan, with monthly allowances — keyword lookups, tracked keywords, crawled pages — that reset on a cycle. What an individual lookup costs is not a number the interface has to show you, because it is not a number the billing model uses. ## What ranking history is **netweft.** A rank check is a stored observation: keyword, location, device, position, the URL that held it, and the moment it was taken. History is the list of those rows, and a week where the domain did not rank is stored as a category rather than as a zero or a gap. **Moz.** Rank history is a first-class feature in every suite of this kind. What differs is not whether it exists but whether the absence of a ranking is a value you can read back, and whether the number you are shown was observed or derived. ## What a machine can read **netweft.** The whole HTTP API is described by an OpenAPI 3.1 document, and there is an MCP server at POST /mcp under a scoped API key, so an agent can read a workspace's audits, keywords, rankings and project overview without a person in the loop. **Moz.** An HTTP API is normally available on the higher tiers, priced in its own units. An MCP surface, where one exists, is a separate product decision from the API. ## Whose metrics you are reading **netweft.** No score netweft invented appears anywhere in the product. Keyword difficulty comes from the provider and is labelled as the provider's; a position is a position; a crawled issue is classified by severity against a documented rule, not scored. **Moz.** Domain Authority and Page Authority are the product's own metrics, modelled from its own index, and much of the tool is organised around them. ## What netweft does not do - Domain Authority, or any proprietary authority metric - A link index crawled in-house - Local listing management - Content optimisation tooling - A free tier of any kind ## Pick Moz when Domain Authority is the reason to use Moz. It is a metric a lot of the industry has agreed to talk in, and netweft does not compute it or any substitute for it. If a report has to carry a DA number, netweft cannot produce one. --- # DataForSEO API, or a product on top of it > netweft's own data provider, and the honest case for skipping netweft and calling it directly. What the layer adds, and when it adds nothing. Source: https://netweft.com/compare/dataforseo netweft runs on DataForSEO's data: it is the product around the API, for teams that do not want to build one. DataForSEO is where netweft's real data comes from — that is documented on the pricing page, not buried. So this comparison is not netweft against a competitor; it is netweft against calling the provider yourself, which is a legitimate thing to do and the right thing to do for some teams. Nothing below states DataForSEO's price, counts its features or rates its data. ## What the pricing tells you **netweft.** One credit is $0.0001 of raw vendor cost, and the rate card names the credits for every operation before it runs. The markup is therefore a number you can compute, not one you have to infer from an invoice. **DataForSEO.** You are billed by the provider at the provider's rate, per call, in arrears. There is no ceiling, no reservation and no refusal — a loop with a bug is a loop that bills. ## What happens to a response **netweft.** Every result is written as a row with the moment it was taken. A second request for the same week reads the stored observation rather than paying for the lookup again, and the history that builds up is the product. **DataForSEO.** A response is a response. Storing it, dating it, deduplicating it, and making twelve weeks of it into a series is work that belongs to whatever you build on top. ## What runs on a schedule **netweft.** Scheduled rank checks run on a worker, per project, against the tracked keyword set, and settle credits per check. Search Console and GA4 sit beside the results, connected per project. **DataForSEO.** Scheduling, retries, rate limiting and back-off are yours to write, as is anything that joins vendor data to first-party Google data. ## What a machine can read **netweft.** The whole HTTP API is described by an OpenAPI 3.1 document, and there is an MCP server at POST /mcp under a scoped API key, so an agent can read a workspace's audits, keywords, rankings and project overview without a person in the loop. **DataForSEO.** An HTTP API is normally available on the higher tiers, priced in its own units. An MCP surface, where one exists, is a separate product decision from the API. ## What netweft does not do - Raw access to every endpoint the provider offers — netweft exposes the subset it stores against - Your own choice of provider, or several at once - Per-call pricing at the provider's own rate, with no markup ## Pick DataForSEO when If the plan is to build the storage, the scheduler, the cache, the deduplication and the cost controls yourself, call the provider directly. That is the honest answer: netweft is those things, and if you are going to write them anyway, the layer is not worth paying for. --- # Frequently asked questions > Plans, credits, where the data comes from, what an API key can read, and what an agent can do with a workspace — answered in full, with every figure read from the product's own catalogue. Source: https://netweft.com/faq ## Plans and billing **Is there a free plan?** No. netweft has no free tier — a workspace with no subscription has no access. Every plan opens with a free trial: Pro $50 a month with a 3-day trial, Studio $100 a month with a 7-day trial and Agency $200 a month with a 7-day trial. **Does the trial need a card?** Yes. The checkout takes a card to start the trial and charges nothing until the trial ends — Pro 3 days, Studio 7 days and Agency 7 days. Cancel from billing before the last day and nothing is charged at all; otherwise the plan starts and its first period is billed then. **What is the difference between the plans?** Pro is $50 a month for 5 projects, 250 tracked keywords per project and 125,000 credits a month, Studio is $100 a month for 12 projects, 500 tracked keywords per project and 280,000 credits a month and Agency is $200 a month for 25 projects, 1,000 tracked keywords per project and 600,000 credits a month. Agency costs 4 times Pro and carries 4.8 times the credits, which is where the volume discount is. Billed yearly, Pro is 10% cheaper, Studio is 15% cheaper and Agency is 20% cheaper. **What do I get during the trial?** A trial workspace gets its own credits rather than the plan's full allowance (Pro 3,000, Studio 5,000 and Agency 8,000), is held to a tighter rate limit of 10 requests a minute, and cannot switch on auto top-up. Everything else behaves exactly as it will after the trial, including the price shown before every paid operation. **What happens when a subscription ends?** The workspace stops being able to run anything that costs money, and the API refuses those calls rather than queueing them. Everything already stored stays readable — past rank checks, audits and saved keywords do not disappear when a subscription lapses. **Who processes payments?** Payments run on Polar, which is the merchant of record. netweft never sees or stores a card number; the checkout, the invoices and the tax handling are Polar's. ## Credits **What is a credit?** One netweft credit is $0.0001 of raw vendor cost, so 10,000 credits is exactly $1.00 of vendor spend. Every operation that costs money — a data lookup, a crawled page, an AI call — reserves credits before it runs and settles against what the vendor actually charged, so a workspace with no credits is refused before the money is spent rather than billed afterwards. **Do unused credits roll over?** Plan credits are granted every month, on monthly and yearly billing alike, and expire at the end of that month. Credits bought as a top-up never expire, because expiring something somebody paid cash for invites chargebacks. Plan credits are always spent first, so nobody loses credits they could have used. **How much does a top-up cost?** A dollar buys 2,500 credits, with a $10 minimum. Bought as top-ups, each plan's monthly credits would cost Pro $50 against $50 for the plan, Studio $112 against $100 for the plan and Agency $240 against $200 for the plan. The plan also buys the platform — the projects, tracking, audits and assistant that credits alone do not — so it is never the dearer way to buy credits, and from Studio up its credits alone cost less than top-ups. **Is the price I am shown the price I pay?** Credits are reserved before the call goes out, at the rate card's price, and settled afterwards against what the vendor actually charged. The reservation is a ceiling, so an operation that comes back cheaper than quoted releases the difference — you are never charged more than the number you were shown before you pressed the button. **What happens when a workspace runs out of credits?** It is refused before the money is spent, with the shortfall named. That is the whole point of reserving ahead of the call: a workspace out of credits gets an error it can act on rather than an invoice it did not expect. **Which operations cost no credits?** Reading anything netweft has already stored is free. Past rank checks, audit results, saved keywords, project overviews and every MCP tool cost nothing, because no vendor call and no crawl happens. Credits are only spent when new data is fetched, a page is crawled or a model is called. ## Data and measurement **Where does the SEO data come from?** Real data comes from DataForSEO, cached and rate limited per workspace so switching to it does not uncap spend. The provider sits behind a port with a mock implementation that serves deterministic fixtures and needs no credentials, which is what lets the product run offline. Nothing above the port knows which one answered. **How is ranking history stored?** A rank check is written as a snapshot at the moment it was taken — keyword, location, device, position and the URL that held it — and history is a list of those rows. Nothing is recomputed on read, so a chart of the last twelve weeks is a record of what was observed rather than an estimate produced today. **What happens to a week where the site did not rank?** It is stored as a value in its own right and drawn as `not ranking`. It is never written as position zero and never left as a gap in the series, because both of those make a week where the domain was absent look like a week nobody measured. **Does the site audit use a third-party crawler?** The site audit is netweft's own crawler, so a crawled page costs compute rather than vendor spend. A Lighthouse performance pass is a vendor call, charged separately at 50 credits a page and opt-in per audit; it measures a sample of up to 10 pages, one per URL shape, so it adds at most 500 credits. ## Access and security **How do I sign in?** With Google, GitHub, or an email address and a password. A Google or GitHub sign-in creates the account on first use; an email account is confirmed with a six-digit code sent to the address. Search Console and GA4 access is requested separately, per project, when you connect those integrations rather than at sign-in. **What Google access does netweft ask for?** Search Console and GA4 are connected per project, and the scopes are requested at connection time rather than at sign-in — so an account that never connects either never grants them. Both are read-only. **How are API keys stored and scoped?** An API key is shown once, at creation, and only its SHA-256 hash is stored; a lost key is replaced rather than recovered. Each key is narrowed to some of six scopes — audit, billing, context, keywords, projects, rank_tracking — so a key handed to an outside integration can be stopped from reading the workspace's balance and plan. **What can each team role do?** A workspace has owners, admins and members. Owners can act on owners and on the workspace itself; admins can act on members; members can act on neither. Nobody can act on a peer, so an admin cannot demote another admin. **Are there rate limits?** Spending is rate limited per user at 60 requests a minute, an API key at 120 a minute, and a trial workspace at 10 a minute. A refused request carries a Retry-After header rather than failing silently. ## Agents and machines **Can an AI agent read my workspace?** Yes. netweft exposes an MCP server at POST /mcp, authenticated by API key, so an agent can read a workspace's audits, keywords, rankings and project overview. The whole HTTP API is also described by an OpenAPI 3.1 document, so a client can be generated from it. **Can netweft's AI assistant invent a number?** No. The per-project chat and the onboarding strategist are both restricted to figures read back through tools, so an answer either cites something the product measured or says it does not have it. **Is this site readable without parsing HTML?** Every page on this site is also served as plain markdown at the same path with `.md` appended, and /llms.txt indexes all of them. A model reading the site does not have to parse HTML to find the numbers on it. **Can an agent spend credits on my behalf?** The MCP tools are read-only over rows netweft already stores. None of them writes, none of them starts a crawl, and none of them spends a credit — an agent can read a whole workspace without moving its balance. --- # How SEO lookups are priced in credits > One credit is $0.0001 of raw vendor cost. It is reserved before an operation runs, settled against what the vendor actually charged, and refused rather than invoiced when a workspace cannot cover it. Source: https://netweft.com/credits ## A credit is a unit of vendor cost One credit is $0.0001 of raw vendor cost, so 10,000 credits is exactly $1.00 of vendor spend. The unit is not an invented token with a made-up exchange rate — it is a fixed fraction of a real cost, which is what makes the rate card checkable rather than decorative. ## Reserved first, settled after Before any paid call goes out, credits are reserved at the rate card's price. The reservation is a ceiling: when the vendor's response comes back, the real charge is read off it and the difference is released. You are never charged more than the number you were shown, and often less. ## Refused, never invoiced A workspace that cannot cover a call is refused before the vendor is reached, with the shortfall named. Nothing is bought and nothing is charged. There is no overage line on an invoice because there is nothing to overrun — the failure happens at the point of decision rather than at the end of the month. The one exception is auto top-up, on by default: it buys more credits first, at most $60 a day, and can be switched off in billing. ## Two pools, spent in the right order Plan credits are granted at the start of each billing period and expire at the end of it. Top-up credits are bought with money and never expire, because expiring something somebody paid cash for invites chargebacks. Plan credits are always spent first, so nobody loses credits they could have used. ## Reading is free Reading anything netweft has already stored costs nothing. Past rank checks, audit results, saved keywords, project overviews and every MCP tool are free, because no vendor call and no crawl happens. Credits are spent only when new data is fetched, a page is crawled, or a model is called. ## Top-ups - A dollar buys 2,500 top-up credits, with a $10 minimum. - Bought as top-ups, each plan's monthly credits would cost Pro $50 against $50 for the plan, Studio $112 against $100 for the plan and Agency $240 against $200 for the plan. The plan also buys the platform — the projects, tracking, audits and assistant that credits alone do not — so it is never the dearer way to buy credits, and from Studio up its credits alone cost less than top-ups. - A trial workspace gets its own credits (Pro 3,000, Studio 5,000 and Agency 8,000), a tighter rate limit, and no auto top-up. --- # Roadmap > No dates and no promises. What netweft does today, what it will not do at any point, and the rules the next thing has to satisfy before it ships. Source: https://netweft.com/roadmap No dates. One person builds netweft, and a quarter-by-quarter roadmap from a team of one is a forecast dressed as a commitment. ## What exists today - [Keyword research](https://netweft.com/features/keyword-research): Keyword research tool: volume, CPC, competition, difficulty and intent for a keyword or a seed, with twelve months of history, saved to a project. - [Rank tracking](https://netweft.com/features/rank-tracking): Keyword rank tracking on a daily, weekly or monthly schedule or on demand, with every check stored as a snapshot rather than recomputed. - [Site audit](https://netweft.com/features/site-audit): Technical SEO site audit: a crawl that honours robots.txt, finds broken links and redirect chains, and ranks every issue by severity. - [Domain and backlinks](https://netweft.com/features/backlinks): Backlink checker and domain overview: links, referring domains, ranked keywords and top pages for your domain or anyone else's. - [AI visibility](https://netweft.com/features/ai-visibility): AI visibility tracker: how often AI answers on Google and ChatGPT name your domain, which sources they cite, and your share against competitors. - The machine surface: an OpenAPI 3.1 document over the whole HTTP API, and an MCP server under a scoped key. See https://netweft.com/mcp. ## What the next thing has to satisfy ### Nothing spends without quoting If an operation costs money, its price appears before it runs and credits are reserved at that price. A feature that spends without quoting is not shippable, whatever it does. ### Measurements are stored, not derived A measurement is written as an observation with the moment it was taken. Nothing is recomputed on read and presented as history, and no absence is stored as a zero. ### No invented metrics No figure in netweft is a score netweft invented. A number either came from a named provider, or is a direct observation, or is a documented rule applied to one — and the interface says which. ### Every capability has a machine surface Anything the dashboard can read, the HTTP API can read, and anything read-only over stored rows belongs on the MCP surface too. A capability that only exists behind the dashboard is half-built. ### The assistant never invents a figure The assistant answers from figures read back through tools. It cannot state a number the product did not measure, and a feature that would require it to is a feature that gets redesigned instead. ## What netweft will not become ### The work is link building netweft reads backlink data from a provider per request. It does not crawl the web, it holds no index of its own, and it cannot answer a question that requires one — such as which pages on the whole web link to a phrase. ### You need content tooling There are no briefs, no outlines, no optimisation scores and no writing assistant. The per-project assistant answers questions about the workspace's own stored figures, and is explicitly prevented from stating a number it did not read back through a tool. ### You need paid, social or local Organic only. Paid search, display, social and local are not in the product and are not planned into it. ### You need white-label client reporting Reports are the dashboard and the API. There is no white-label PDF, no client portal and no branded export. ### You need to evaluate for free There is no free tier and no free trial without a subscription started — a workspace with no subscription has no access. If the requirement is to evaluate without entering a card, netweft cannot meet it. --- # The HTTP API > Every netweft route is described by an OpenAPI 3.1 document, every failure carries a named code a client can branch on, and every paid call answers 402 with the shortfall rather than billing for it afterwards. Source: https://netweft.com/api The dashboard is a client of this API and nothing more. Every route is described by an OpenAPI 3.1 document served from the API itself at `GET /openapi.json`, generated from the route definitions rather than written beside them. ## Authentication - The dashboard authenticates with a session cookie, created by signing in with Google, GitHub or an email address and a password. - The MCP server at `POST /mcp` authenticates with an API key, sent as `Authorization: Bearer` or `x-api-key`, narrowed to some of 6 scopes. The other routes take only the session cookie. - A key is looked up by its public prefix and decided by a constant-time comparison against a stored SHA-256 hash. It is shown once, can carry an expiry, and is revoked rather than deleted. ## Named failures A failing response carries a human sentence in `error` and a stable machine code in `code`. Each code has exactly one HTTP status. | Code | Status | Meaning | | --- | --- | --- | | `insufficient_credits` | 402 | The workspace cannot cover the call. Answered before the vendor is reached, so nothing was bought and nothing was charged. available and required come with it, so a client can say by how much. | | `rate_limited` | 429 | The fixed window is full. A Retry-After header comes with it, so a client library backs off on a number rather than on a guess. | | `insufficient_role` | 403 | The caller is in the workspace but not with a role that may do this. Distinct from not being a member at all: the fix is a role change, not an invitation. | | `background_unavailable` | 503 | The background service that runs audits and scheduled checks is unreachable. Nothing was charged and nothing was lost — the run simply cannot start yet. | ## Rate limits Every policy is a fixed window. A refused request carries `Retry-After`. - **Spending endpoints** (per user): 60 requests per 60s. Keyed per user rather than per workspace, so a team of ten is not throttled by one member's script. - **API key requests** (per key): 120 requests per 60s. Applied at the MCP endpoint against the key's public prefix. - **Trial workspaces** (per workspace): 10 requests per 60s. Tighter while a workspace is on trial, and back to the normal policy the moment it is not. --- # SEO MCP server for Claude and AI agents > SEO MCP server for Claude, Cursor and any MCP client: 25 read-only tools over projects, rankings, audits and keywords. Install with npx netweft-mcp. Source: https://netweft.com/mcp netweft is an SEO MCP server: Claude, Cursor or any MCP client reads a workspace's projects, keywords, rank tracking, site audits and context through 25 read-only tools under a scoped API key. The endpoint is `POST https://api.netweft.com/mcp`. Every tool is read-only over rows netweft already stores — nothing writes, nothing starts a crawl, and nothing spends a credit. ## Connect a client Create a key under Settings, then API keys. A client that speaks HTTP points at the endpoint with the key in the `Authorization` header; a client that only starts local servers, such as Claude Desktop, runs `netweft-mcp` from npm. Every other client's setup: https://netweft.com/docs/mcp-server ### Claude Code ```bash claude mcp add --transport http netweft https://api.netweft.com/mcp \ --header "Authorization: Bearer $NETWEFT_API_KEY" ``` ### Claude Desktop ```json { "mcpServers": { "netweft": { "command": "npx", "args": ["-y", "netweft-mcp"], "env": { "NETWEFT_API_KEY": "nw_..." } } } } ``` ### Cursor ```json { "mcpServers": { "netweft": { "url": "https://api.netweft.com/mcp", "headers": { "Authorization": "Bearer ${env:NETWEFT_API_KEY}" } } } } ``` ### VS Code ```json { "inputs": [ { "type": "promptString", "id": "netweft-key", "description": "netweft API key", "password": true } ], "servers": { "netweft": { "type": "http", "url": "https://api.netweft.com/mcp", "headers": { "Authorization": "Bearer ${input:netweft-key}" } } } } ``` ## Projects — `projects` Projects, their overviews and who the key belongs to - `whoami`: Which workspace the key belongs to, and what it may read. - `list_projects`: Every project in the workspace. - `get_project`: One project's domain, market and settings. - `get_project_overview`: The dashboard's own summary of a project, as one object. ## Rank tracking — `rank_tracking` Rank trackers, tracked keywords and their results - `list_rank_trackers`: The trackers configured on a project. - `get_rank_tracker`: One tracker's schedule, market and device. - `list_tracked_keywords`: The keyword set a tracker checks. - `get_latest_rank_results`: The most recent check, with each keyword's position. - `get_rank_trend`: A keyword's positions over time, as stored observations. - `get_rank_position_matrix`: Every tracked keyword against every check date, in one grid. - `get_keyword_rank_history`: One keyword's whole record, including the weeks it did not rank. - `estimate_rank_check_cost`: What a check would cost in credits. It estimates; it does not run. ## Site audit — `audit` Site audits, their issues and the pages they crawled - `list_audits`: Audit runs against a project, newest first. - `get_audit`: One run's status, page count and issue totals. - `list_audit_issues`: The issues found, classified by severity. - `list_audit_pages`: The pages crawled, with what was found on each. ## Keywords — `keywords` Saved keywords and their tags - `list_saved_keywords`: Keywords saved against a project, with their metrics. - `list_keyword_tags`: The tags a project uses to group them. ## Context — `context` Project context, competitors, key pages and backlinks - `get_project_context`: What the project has been told about itself. - `list_competitors`: The domains the project is measured against. - `list_key_pages`: The pages the project cares about. - `list_research_log`: What has been researched against the project, and when. - `list_backlink_snapshots`: Stored backlink summaries, by the date they were taken. ## Billing — `billing` The workspace's credit balance and subscription - `get_credit_balance`: Plan credits, top-up credits and what is reserved. - `get_subscription`: The plan, its period and its limits. --- # Integrations > Search Console and GA4 per project with read-only scopes requested at connection time, DataForSEO behind a port, Polar as merchant of record, and an MCP server for agents. Source: https://netweft.com/integrations Nothing is connected by signing in. Google access is requested at the moment a project connects it, and both Google scopes are read-only. ## Google Search Console Per project. Read-only, requested at connection time rather than at sign-in. Real queries, clicks and impressions for the project's own site, read straight from Google. It sits beside the rank record rather than replacing it: one is what Google reports about a property, the other is what was observed at a position on a date. ## Google Analytics 4 Per project. Read-only, requested at connection time rather than at sign-in. Sessions, engaged users and key events for the project. Connected separately from Search Console, so a workspace that wants one and not the other grants one and not the other. ## DataForSEO Per workspace. Server-side, through a port with a mock implementation behind it. Where netweft's real SEO data comes from — keyword metrics, SERP positions, backlink summaries, domain overviews. The provider sits behind a port, cached and rate limited per workspace. A mock implementation serves deterministic fixtures with no credentials, which is what lets the product run offline; nothing above the port knows which one answered. ## Polar Per workspace. Merchant of record. netweft never sees or stores a card number. Subscriptions, top-ups and invoices. Polar is the merchant of record, so the checkout, the tax handling and the receipts are theirs, and the only thing netweft stores is which plan a workspace is on and what it has left. ## MCP, for agents Per workspace. Scoped API key, read-only over stored rows. An MCP server at POST /mcp, so an agent can read a workspace without a person in the loop. 25 tools across 6 scopes, none of which writes, starts a crawl or spends a credit. --- # Security > Breach-checked, scrypt-hashed passwords, read-only Google scopes asked for per project, API keys stored as hashes and compared in constant time, and spending bounded by credits already paid for, plus the four things netweft does not have. Source: https://netweft.com/security netweft holds no SOC 2 report and no ISO certificate. What follows is what the build does, and then what it does not have. ## What the build does ### Passwords are checked, hashed and verified by code Sign-in is Google, GitHub, or an email address and a password. A password must be 10 to 128 characters, is refused if it appears in a known breach (only the first five characters of its SHA-1 leave netweft, so the password itself is never sent), and is stored as a salted scrypt hash. An email account is not usable until a six-digit code sent to the address is entered; a code lives five minutes and allows three wrong attempts, and a password is reset with a code rather than a link. ### Sign-in is rate limited and bot checked Every request that signs in, creates an account or sends an email must carry a Cloudflare Turnstile token, and sign-in paths have their own per-address rate limits: ten sign-in attempts a minute, five sign-ups and three code requests. Resetting a password signs out every other session. ### Google access is asked for late and narrow Search Console and Analytics access is requested per project, at the moment that project connects them, and both scopes are read-only. An account that never connects either never grants them. The scopes are not bundled into sign-in, which is the usual way a tool ends up holding more access than it needs. ### Keys are hashed, and compared in constant time An API key is generated as three parts — a fixed prefix, a public random prefix and a secret — and shown once. Only its SHA-256 hash is stored. A request is looked up by the public prefix and decided by a constant-time comparison against that hash, so a key cannot be recovered from the database and a timing difference cannot be measured against it. ### Keys are scoped, expirable and revocable Every key is narrowed to some of 6 scopes when it is created, can be given an expiry, and can be revoked. Revoking leaves the row in place: the audit log still shows that the key existed and what it could reach, which is the part that matters after the fact. A scope this build does not recognise is dropped rather than honoured, so a row written by a newer deploy can never widen a key here. ### Roles cannot act on peers A workspace has owner, admin, member. Everything an admin can do, plus owners and the workspace. Manages keys, projects, billing and people. Cannot delete the workspace. Reads everything and works in projects. No keys, no billing, no people. Nobody may act on a peer — an admin cannot demote another admin — so a compromised admin account cannot lock out the rest of the workspace's administration. ### Cross-site requests and oversized bodies are named failures A state-changing request that arrives with a browser's ambient credentials but without proof that netweft's own dashboard sent it is refused with a distinct code, not a permission error. Request bodies have a documented cap, and every field a route accepts has a maximum well inside it, so an oversized body is a runaway client rather than a legitimate large request. ### Spending is bounded, and the bound is named Every paid operation reserves credits before the vendor is reached, and a workspace that cannot cover the call is refused with the shortfall named. There is no overage and no post-hoc invoice. The one way past the balance is auto top-up, which is on by default and charges the saved card at most $60 a day; with it switched off, a key that leaks cannot spend beyond the credits the workspace already holds. No MCP tool spends a credit at all. ### No card data ever reaches netweft Payments run on Polar, which is the merchant of record. netweft never sees a card number, never stores one, and does not handle the checkout, the invoices or the tax. What it stores is which plan a workspace is on and what it has left. ## What netweft does not have ### No certifications and no audit report netweft holds no SOC 2 report, no ISO 27001 certificate and no completed third-party penetration test. If your procurement process requires one, netweft cannot pass it today, and no amount of wording on this page changes that. ### No SSO beyond Google and GitHub, and no SCIM Sign-in is Google, GitHub or an email and a password, and nothing else. There is no SAML, no OIDC against your own provider, and no SCIM provisioning. A company that must own its own identity provider cannot use netweft. ### No DPA, and the sub-processors are the ones named here There is no signed data processing agreement on offer and no published sub-processor list beyond what this site already names: Cloudflare for hosting, the database and bot checks; Google and GitHub for sign-in, and Google for the two read-only connections; DataForSEO for SEO data; OpenRouter for the AI model calls; Resend for email; PostHog for product analytics; Polar for payments. ### No bounty programme There is no bug bounty and no formal disclosure programme. Reports go to the same address as everything else, and the same one person reads them. --- # About netweft > What netweft is, how it is built, and the claims this site deliberately does not make. Source: https://netweft.com/about ## Why netweft exists Most SEO tools answer a question and hand you a number without telling you what the number cost to produce or when it was true. netweft was built the other way round: an observation is stored with the moment it was taken, and the price of producing it is visible before it is produced. ## How it is built - A Hono API on Cloudflare Workers with an OpenAPI 3.1 document, a TanStack Start dashboard, and a Cloudflare D1 schema shared through Drizzle. - Cloudflare Workflows run audits and rank checks; a cron starts the scheduled ones. - The cache (Workers KV) and the rate limiter (Workers Rate Limiting) fail open. If either cannot answer, every lookup misses and every request is allowed; that is the intended degraded behaviour rather than a failure mode. - Sign-in is Google, GitHub, or an email and a password confirmed by a six-digit code. Search Console and GA4 connect per project, with read-only scopes requested at connection time. - Payments run on Polar. Credits meter every vendor lookup, crawl and AI call. ## Who builds it Sourav Ukil, founder and engineer. Sourav builds netweft on his own — the API, the dashboard, the worker and this site. The guides here are working notes from that build, not marketing written around it. There is no team page because there is no team. If something on this site is wrong, one person wrote it and one person will fix it: hello@netweft.com. ## What we will not claim This site carries no customer logos, testimonials, user counts, benchmarks or uptime figures, because none have been measured. Sample data is labelled where it appears. Prices and credit costs are read from the product's own catalogue at build time rather than typed into a page. --- # Contact > How to reach netweft about the product, billing or security. Source: https://netweft.com/contact Email: hello@netweft.com netweft has no sales team and no sales calls. To see the product, open the read-only demo at https://app.netweft.com/demo. To evaluate it, start a trial, connect one project, and check the first scheduled rank check against a domain you already have opinions about. - Product and billing questions: hello@netweft.com - Security reports: hello@netweft.com - Machine-readable index of this site: https://netweft.com/llms.txt --- # Free SEO tools > Six free SEO tools: SERP snippet preview, page checker, redirect checker, robots.txt tester, schema markup and hreflang generators. No sign-up. Source: https://netweft.com/tools Six tools for the checks an SEO runs every week. Four run entirely in your browser and send nothing anywhere; two fetch one URL from netweft's servers. None needs an account. ## Run in your browser Nothing you type leaves the page. - [SERP snippet preview](https://netweft.com/tools/serp-snippet-preview): See how a title and meta description fit a Google result, measured by width the way Google cuts them. - [Robots.txt tester](https://netweft.com/tools/robots-txt-tester): Test whether a robots.txt allows a crawler to fetch a path, and see the rule that decided. - [Schema markup generator](https://netweft.com/tools/schema-markup-generator): Fill in a form and get JSON-LD for an organization, an article, a product or a breadcrumb trail. - [Hreflang generator](https://netweft.com/tools/hreflang-generator): Write and check hreflang tags for every language version of a page, as link tags or sitemap entries. ## Fetch one URL netweft's servers fetch the one URL you give, behind a Cloudflare check. - [SEO page checker](https://netweft.com/tools/seo-page-checker): Check one page against the single-page rules of netweft's site audit: title, description, headings, content and indexing. - [Redirect checker](https://netweft.com/tools/redirect-checker): Follow a URL's redirects hop by hop and read the status code and headers of every answer. --- # SERP snippet preview > Free SERP snippet preview: type a title, description and URL to see how the result looks and where Google is likely to cut it off. Source: https://netweft.com/tools/serp-snippet-preview Type a title, a meta description and a URL to see the result as a searcher would, with the width of each and where Google is likely to cut it. Runs in your browser. Nothing you type is sent anywhere. ## How to use it 1. Type the page title and meta description. 2. Add the page's URL for the breadcrumb line. 3. Shorten anything the preview cuts off, ideally ending on a whole idea. ## Why width, not characters Google cuts a title by how wide it renders, not by how many characters it has: a title of narrow letters fits more characters than one of wide capitals. The preview measures your text in the font the result uses, Arial, at the sizes Google shows. Google does not publish its limits. The preview uses about 600 pixels for a desktop title and about 920 for a description, the widths desktop results are commonly measured at, so treat the cut as an estimate. ## When Google rewrites anyway Google sometimes replaces a title or description with text from the page that it judges better for the query. A specific, accurate title that matches the page's h1 is the one it rewrites least. ## Questions **Is what I type sent anywhere?** No. The preview is drawn in this page, and nothing you type is sent anywhere. **Are the limits exact?** No. A title fits about 600 pixels and a description about 920, as measured in Arial at 20 and 14 pixels. Google does not publish the limits, so treat the cut as an estimate. **Why does my live result look different?** Google may rewrite it for a query, or show a date, a site name or rich result details beside it. The preview shows the basic result. ## Related tools - [SEO page checker](https://netweft.com/tools/seo-page-checker): Check one page against the single-page rules of netweft's site audit: title, description, headings, content and indexing. - [Schema markup generator](https://netweft.com/tools/schema-markup-generator): Fill in a form and get JSON-LD for an organization, an article, a product or a breadcrumb trail. - [Redirect checker](https://netweft.com/tools/redirect-checker): Follow a URL's redirects hop by hop and read the status code and headers of every answer. netweft shows each page's real clicks, impressions and CTR from Search Console, so you can see which snippet changes earned the click. [See how](https://netweft.com/docs/search-performance). --- # SEO page checker > Free SEO page checker: fetch one URL and check its status, title, meta description, headings, content and indexability, with a fix for each issue. Source: https://netweft.com/tools/seo-page-checker Paste a URL and netweft fetches that one page and checks it against the rules its site audit runs on every page, with a fix for each issue it finds. netweft fetches the one URL you give. No sign-up, no stored results. ## How to use it 1. Paste the page's URL, with or without https://. 2. Choose Check page. A Cloudflare check runs out of sight first. 3. Read the facts, then each issue with how to fix it. ## What it checks The checker fetches the page once and runs the rules netweft's site audit can answer from one page: the HTTP status, redirects on the way, the title and meta description and their lengths, the h1 and heading order, images without alt text, thin content, links out, noindex, a canonical pointing elsewhere, and a slow response. Length rules are guidance rather than errors. A title outside 30 to 60 characters or a description outside 70 to 160 can still rank; the checker says so because Google often rewrites or cuts them. ## What it cannot check Rules that compare pages need a crawl: duplicate titles, duplicate content, broken internal links and pages nothing links to. A netweft site audit crawls the whole site to find those. ## Questions **How does the check run?** netweft's API fetches the one URL from its own servers, for at most 10 seconds and 1 MB, and does not follow links to other pages. It allows 5 checks a minute and 20 a day per visitor. **Does it run the page's JavaScript?** No. The page is fetched without running scripts, so content a page builds in the browser is not seen. Search engines render scripts, so a page that relies on them may look thinner here than it does to Google. **What can it check?** Only an HTML page under 1 MB. A PDF, an image or a larger page is refused with a reason. ## Related tools - [Redirect checker](https://netweft.com/tools/redirect-checker): Follow a URL's redirects hop by hop and read the status code and headers of every answer. - [SERP snippet preview](https://netweft.com/tools/serp-snippet-preview): See how a title and meta description fit a Google result, measured by width the way Google cuts them. - [Robots.txt tester](https://netweft.com/tools/robots-txt-tester): Test whether a robots.txt allows a crawler to fetch a path, and see the rule that decided. A netweft site audit runs these rules on every page of a site, adds the ones that compare pages, and ranks every issue by severity. [See how](https://netweft.com/docs/site-audit). --- # Redirect checker and HTTP header viewer > Free redirect checker: follow a URL through every redirect, see each status code and Location, and read the final response headers. Source: https://netweft.com/tools/redirect-checker Paste a URL to follow it through every redirect to the page that finally answers, with the status code, Location and headers at each step. netweft fetches the one URL you give. No sign-up, no stored results. ## How to use it 1. Paste a URL, with or without https://. 2. Choose Check redirects. A Cloudflare check runs out of sight first. 3. Read each hop's status and Location, then the final headers. ## Why the chain matters Every redirect is a round trip before the page starts loading, and a chain of them is common after a migration or an http to https move. Point the first URL straight at the last one and the chain is gone. A 301 or 308 says the move is permanent; a 302 or 307 says it is temporary. Use a permanent redirect for a page that has moved for good. ## What the headers show The final answer's headers show how the page is served: its content type, caching, an X-Robots-Tag that can noindex a page without touching its HTML, and the security headers such as Strict-Transport-Security. Cookies are left out. ## Questions **How does the check run?** netweft's API follows the URL from its own servers, one hop at a time, up to 5 redirects and 10 seconds. It reads headers only, never the page body, and allows 5 checks a minute and 20 a day per visitor. **Can it reach a private or internal address?** No. Every hop is checked before it is requested, and an address inside a private network is refused. **Why does a page I can open show an error here?** The site's firewall or bot protection answered the request from netweft's servers differently from a browser. Check the same URL in your browser's network panel. ## Related tools - [SEO page checker](https://netweft.com/tools/seo-page-checker): Check one page against the single-page rules of netweft's site audit: title, description, headings, content and indexing. - [Robots.txt tester](https://netweft.com/tools/robots-txt-tester): Test whether a robots.txt allows a crawler to fetch a path, and see the rule that decided. - [SERP snippet preview](https://netweft.com/tools/serp-snippet-preview): See how a title and meta description fit a Google result, measured by width the way Google cuts them. A netweft site audit finds every redirect chain on a site at once, along with broken links and error pages. [See how](https://netweft.com/docs/site-audit). --- # Robots.txt tester > Free robots.txt tester: paste a file, pick a crawler and a path, and see whether it is allowed and which rule decided it. Source: https://netweft.com/tools/robots-txt-tester Paste a robots.txt file, name a crawler and a path, and see whether the crawler may fetch it and exactly which line decided. Runs in your browser. Nothing you type is sent anywhere. ## How to use it 1. Paste the robots.txt file. 2. Enter the crawler's user agent, such as Googlebot. 3. Enter a path, such as /blog/post, and read the verdict and the rule behind it. ## How a crawler reads robots.txt A crawler obeys the one group whose User-agent line names it, and only falls back to the group for * when no group names it. Rules from the * group do not add to a named group. Within the group, the longest matching rule wins, and an Allow beats a Disallow of the same length. A * matches any characters and a $ at the end anchors the end of the path. This is how Google documents the standard, RFC 9309. ## What robots.txt does not do Blocking a path stops crawling, not indexing: a blocked page that other sites link to can still appear in results, without a description. To keep a page out of results, let it be crawled and mark it noindex. ## Questions **Is my robots.txt sent to netweft?** No. The file is read and matched in this page. Nothing you paste is sent anywhere. **Does netweft's own crawler follow robots.txt?** netweft's site audit crawler identifies itself as netweft-audit and obeys the group that names it, or the * group. **Will every crawler read it the same way?** Matching follows RFC 9309 as Google documents it. Other crawlers may differ in details, such as how they treat unsupported lines. ## Related tools - [Redirect checker](https://netweft.com/tools/redirect-checker): Follow a URL's redirects hop by hop and read the status code and headers of every answer. - [SEO page checker](https://netweft.com/tools/seo-page-checker): Check one page against the single-page rules of netweft's site audit: title, description, headings, content and indexing. - [Hreflang generator](https://netweft.com/tools/hreflang-generator): Write and check hreflang tags for every language version of a page, as link tags or sitemap entries. A netweft site audit reports when its crawler is blocked, and skips the paths robots.txt disallows. [See how](https://netweft.com/docs/site-audit). --- # Schema markup generator for JSON-LD > Free schema markup generator: build JSON-LD for Organization, Article, Product or BreadcrumbList from a form and copy the script tag. Source: https://netweft.com/tools/schema-markup-generator Choose a schema type, fill in the form, and copy JSON-LD that is valid schema.org, with empty fields left out. Runs in your browser. Nothing you type is sent anywhere. ## How to use it 1. Choose the type that matches the page. 2. Fill in the fields; required ones are marked. 3. Copy the script tag into the page. ## What structured data is for JSON-LD describes a page's content in a vocabulary search engines read, schema.org. It can make a page eligible for a rich result, such as a product's price in the listing; eligibility is not a guarantee, and the search engine decides. Mark up only what the page shows. A price, rating or author in the markup that is not on the page breaks the search engines' guidelines. ## The four types here Organization names the business behind a site, with its logo and profiles. Article describes a post, with its author and dates. Product carries a price and currency. BreadcrumbList describes the trail from the home page to this one. ## Questions **Where does the markup go?** In the page's head or body as a script tag of type application/ld+json. The tool writes the whole tag. **How do I check it works?** Run the page through Google's Rich Results Test or the Schema Markup Validator after you publish it. **Is what I type sent anywhere?** No. The markup is built in this page and nothing is sent anywhere. ## Related tools - [Hreflang generator](https://netweft.com/tools/hreflang-generator): Write and check hreflang tags for every language version of a page, as link tags or sitemap entries. - [SERP snippet preview](https://netweft.com/tools/serp-snippet-preview): See how a title and meta description fit a Google result, measured by width the way Google cuts them. - [SEO page checker](https://netweft.com/tools/seo-page-checker): Check one page against the single-page rules of netweft's site audit: title, description, headings, content and indexing. netweft keeps a project's key pages and competitors as context, so the assistant plans work against what the site actually has. [See how](https://netweft.com/docs/project-context). --- # Hreflang tag generator and checker > Free hreflang generator: list each language version of a page, catch bad codes and duplicates, and copy link tags or sitemap entries. Source: https://netweft.com/tools/hreflang-generator List every language version of a page and get the hreflang annotations for all of them, checked for the mistakes that make Google ignore the set. Runs in your browser. Nothing you type is sent anywhere. ## How to use it 1. Add one row per language version: its code and its full URL. 2. Add an x-default row if one version should catch everyone else. 3. Fix anything the checker flags, then copy the link tags or the sitemap entries. ## What hreflang tells Google hreflang marks pages that are the same content in different languages or for different regions, so Google shows a searcher the version in their language. Each version lists every version, itself included, and the set must match on every page in it. A code is an ISO 639-1 language, such as en, optionally followed by an ISO 3166-1 region, such as en-GB. The region on its own is not a valid code, and the United Kingdom is GB, not UK. ## What the checker catches The tool flags a code that is not a language, the UK mistake, a URL that is not absolute, and a code listed twice. It also notes a missing x-default, which is optional and names the page for visitors no other code matches. ## Questions **Do I need both link tags and sitemap entries?** No. Put them in the head of each page or in the sitemap; one method is enough, and the sitemap is easier to keep consistent on a large site. **Does a page list itself?** Yes. Every version lists all the versions, including itself, which is why the tool writes the same set for each page. **Is anything I type sent anywhere?** No. It runs in this page. Nothing you type is sent to netweft or anywhere else. ## Related tools - [Schema markup generator](https://netweft.com/tools/schema-markup-generator): Fill in a form and get JSON-LD for an organization, an article, a product or a breadcrumb trail. - [SEO page checker](https://netweft.com/tools/seo-page-checker): Check one page against the single-page rules of netweft's site audit: title, description, headings, content and indexing. - [Robots.txt tester](https://netweft.com/tools/robots-txt-tester): Test whether a robots.txt allows a crawler to fetch a path, and see the rule that decided. netweft tracks each market separately: a project has its own country and language, so rankings are read where your customers search. [See how](https://netweft.com/docs/projects-and-markets). --- # Docs > How to use netweft, page by page: projects, keyword research, rank tracking, site audits, backlinks, credits, team, API keys and MCP. Source: https://netweft.com/docs How to use netweft, page by page, in reading order. Every doc is also available as markdown at the same path plus `.md`. - [Quickstart: from sign-in to your first rank check](https://netweft.com/docs/quickstart) (Getting started): Sign in with Google, GitHub or an email address, choose a plan to start its trial, then answer six onboarding steps. You finish with a project, saved keywords and a rank tracker that checks them weekly. - [Plans and trials](https://netweft.com/docs/plans-and-trials) (Getting started): Every workspace needs one of three plans: Pro, Studio or Agency. Each starts with a free trial and trial credits, bills monthly or yearly, and sets the limits on projects, keywords and audits. - [Projects and markets](https://netweft.com/docs/projects-and-markets) (Getting started): A project is one site: a domain and the market its keywords are measured in. netweft has keyword data for 143 countries; 49 of them come without keyword difficulty and search intent. - [Keyword research](https://netweft.com/docs/keyword-research) (Research): Enter a seed keyword and get up to 200 ideas in one lookup, each with search volume, keyword difficulty, cost per click and intent, measured in the project's market. Open any idea to see the live results page. - [Domain overview](https://netweft.com/docs/domain-overview) (Research): Name a domain and netweft reports its domain rank, organic keyword count, estimated monthly visits and their value, with three paid lists behind it: ranking keywords, pages and keyword ideas. - [Backlinks](https://netweft.com/docs/backlinks) (Research): Name a domain to see its live backlinks, referring domains and most linked pages. Every lookup stores a snapshot, and the History tab charts how the totals moved between them. - [Saved keywords and tags](https://netweft.com/docs/saved-keywords-and-tags) (My site): Saved keywords are the list the rest of a project works from. Tag them to group them, refresh their volume and difficulty when the market moves, and export the list as CSV. - [Rank tracking](https://netweft.com/docs/rank-tracking) (My site): A tracker checks where a domain ranks for a list of keywords, daily, weekly, monthly or on demand, on desktop, mobile or both. Every position is stored with the time it was seen, and a check's price depends on its depth. - [Site audit](https://netweft.com/docs/site-audit) (My site): A site audit crawls up to the plan's page limit from one start URL, obeys robots.txt, and ranks 25 kinds of problem as critical, warning or info. Page speed is an opt-in Lighthouse measurement on up to 10 pages. - [Search performance](https://netweft.com/docs/search-performance) (My site): Search performance shows a project's own Google data: Search Console queries and pages with clicks, impressions, CTR and position, and Analytics sessions, active users and key events. Reading it costs no credits. - [AI visibility](https://netweft.com/docs/ai-visibility) (My site): AI visibility counts the AI answers that name the project's domain on Google or ChatGPT, how often those answers are asked for, which pages they cite, and how the domain's mentions compare with its competitors'. - [Project assistant](https://netweft.com/docs/project-assistant) (Assistant and context): The assistant answers questions about one project from the data netweft already stores. Every figure it quotes comes from a read-only tool, it never spends credits on a lookup, and a turn costs only the model calls it makes. - [Project context](https://netweft.com/docs/project-context) (Assistant and context): Project context is the brief an agent reads before working on a project: four written sections, a competitor list, key pages with their roles, and an append-only research log. - [Credits and billing](https://netweft.com/docs/credits-and-billing) (Account): One credit is $0.0001 of data-vendor cost. A lookup holds its most likely ceiling before it runs and is charged what the vendor actually billed, never more. Plan credits expire monthly; bought credits never expire. - [Team and roles](https://netweft.com/docs/team-and-roles) (Account): A workspace has three roles. Members read everything and work in projects; admins also manage projects, billing, keys and people; owners can do all of that and hand out the owner role. - [API keys](https://netweft.com/docs/api-keys) (Account): An API key lets an agent read a workspace through the MCP server. Keys belong to the workspace, are shown once, read only what their scopes allow, and can never change data or spend credits. - [MCP server](https://netweft.com/docs/mcp-server) (Developers): netweft runs a Model Context Protocol server at https://api.netweft.com/mcp. An agent with an API key gets 25 read-only tools over the workspace's stored data, and clients that only run local servers connect through netweft-mcp on npm. - [HTTP API](https://netweft.com/docs/http-api) (Developers): Every dashboard screen runs on a documented HTTP API at https://api.netweft.com, described by an OpenAPI 3.1 document. It authenticates with a signed-in session; agents should use the MCP server instead. --- # Quickstart: from sign-in to your first rank check > Create a netweft account, pick a plan and trial, set up your first project and run its first rank check, in the order the dashboard asks for them. Source: https://netweft.com/docs/quickstart Updated: 2026-10-15 **Sign in with Google, GitHub or an email address, choose a plan to start its trial, then answer six onboarding steps. You finish with a project, saved keywords and a rank tracker that checks them weekly.** This page walks one workspace from the first sign-in to the first stored rank check. Each step links to the page that covers it in full. ## Sign in Open [app.netweft.com](https://app.netweft.com) and sign in one of three ways: 1. **Google.** The first sign-in creates the account. netweft asks for no Search Console or Analytics access here; those are requested later, per project. 2. **GitHub.** The same as Google: the first sign-in creates the account. 3. **Email and password.** Choose a password of 10 to 128 characters. netweft emails a six-digit code, and entering it verifies the address and signs you in. A code works for five minutes and allows three wrong attempts. Every sign-in passes a Cloudflare Turnstile check. Most of the time it runs out of sight; occasionally Cloudflare asks for one click. Your first sign-in also creates your **workspace**: the account-level container that holds projects, credits, the plan and the team. You are its owner. ## Choose a plan netweft has no free tier. A workspace with no plan can sign in and read its settings, but every screen that does SEO work asks for a plan first. Each plan opens with a free trial and trial credits: | Plan | Price | Trial | Trial credits | Credits a month after the trial | | --- | --- | --- | --- | --- | | Pro | $50 a month | 3 days | 3,000 | 125,000 | | Studio | $100 a month | 7 days | 5,000 | 280,000 | | Agency | $200 a month | 7 days | 8,000 | 600,000 | A workspace gets one trial, whichever plan or billing interval it picks. [Plans and trials](/docs/plans-and-trials) covers the limits, yearly billing and what happens when a trial ends. ## Answer the onboarding steps A new workspace goes through six short steps once. You can skip any of them and come back from the project later. 1. **About you.** Who you do SEO for and what you came for. This only shapes the onboarding that follows. 2. **Your site.** The domain your first project tracks. 3. **Market.** The country and language every lookup in the project uses. 4. **Brief.** A few sentences about the business, saved as the project's [context](/docs/project-context) for the assistant to read. 5. **Search Console.** Connect Google Search Console for the project, or skip it. See [Search performance](/docs/search-performance). 6. **Strategy.** The onboarding strategist reads your site and proposes keywords and a first plan, using only figures it looked up. ## Save keywords and start tracking 1. Open **Keyword research**, enter a seed such as your product category, and choose how many ideas to fetch. Ideas arrive with volume, cost per click, difficulty and intent. See [Keyword research](/docs/keyword-research). 2. Select the ideas worth keeping and save them. Saved keywords keep their metrics and monthly volume history. 3. Open **Rank tracking**, choose **Track a domain**, and add saved keywords to the tracker. A new tracker reads the top 20 results, so each check costs 40 credits per keyword per device. See [Rank tracking](/docs/rank-tracking). 4. Choose **Run check now**, or let the weekly schedule run it. When the check finishes, every position is stored with the time it was seen. A keyword that did not rank is stored as "not ranking", never as a zero. ## What to open next - [Site audit](/docs/site-audit) to crawl the domain and rank what is broken. - [Credits and billing](/docs/credits-and-billing) to see what each operation costs before you run it. - The [read-only demo](https://app.netweft.com/demo) to see every screen with a workspace already filled in. --- # Plans and trials > The three netweft plans, what each one includes, how the free trial works, and what happens when you change plan, end a trial early or cancel. Source: https://netweft.com/docs/plans-and-trials Updated: 2026-10-15 **Every workspace needs one of three plans: Pro, Studio or Agency. Each starts with a free trial and trial credits, bills monthly or yearly, and sets the limits on projects, keywords and audits.** netweft has no free tier. A workspace needs a plan before any screen that does SEO work opens, and every plan starts with a free trial. ## The three plans | | Pro | Studio | Agency | | --- | --- | --- | --- | | Monthly price | $50 | $100 | $200 | | Yearly price | $540 (10% off) | $1,020 (15% off) | $1,920 (20% off) | | Credits a month | 125,000 | 280,000 | 600,000 | | Projects | 5 | 12 | 25 | | Saved keywords per project | 1,000 | 2,500 | 5,000 | | Tracked keywords per project | 250 | 500 | 1,000 | | Audits a month, whole workspace | 60 | 150 | 300 | | Pages per audit | 1,000 | 2,500 | 5,000 | Limits count what a workspace holds or starts. Credits pay for the lookups themselves, and [Credits and billing](/docs/credits-and-billing) lists what each one costs. A workspace can sit inside every limit and still be refused a lookup because its balance is empty. ## Monthly and yearly billing A yearly plan bills once a year at the discounted price. Its credits still arrive one month at a time, and each month's credits expire at the end of that month, the same as on a monthly plan. ## The free trial Choosing a plan opens a checkout with a free trial: | Plan | Trial | Trial credits | | --- | --- | --- | | Pro | 3 days | 3,000 | | Studio | 7 days | 5,000 | | Agency | 7 days | 8,000 | A workspace gets one trial, whichever plan or billing interval it picks. During the trial: - The workspace has the plan's full limits and its trial credits, which expire with the trial. - Paid requests are limited to 10 a minute, against 60 a minute on a paid plan. - You can buy top-up credits. Auto top-up stays off until the trial ends. When the trial ends, the card from checkout is charged and the first month's credits arrive. ### Ending a trial early If the trial credits run out before the trial does, an owner or admin can start the paid plan straight away from **Billing**. The card is charged now, the month's full credits arrive, and any trial credits left keep their own expiry. ## Changing plan Owners and admins change plan from **Billing**: - **Upgrading** (a dearer plan, or monthly to yearly) takes effect at once. You pay the prorated difference, and on the same billing interval the current month's credits are topped up by the difference between the two allowances. - **Downgrading** (a cheaper plan, or yearly to monthly) waits for the next renewal, so you keep what you paid for until then. - **During a trial**, any change is immediate and the trial carries on. A downgrade can leave a workspace over its new limits. netweft deletes nothing: existing projects, keywords and trackers stay usable, and creating more is refused until you are back under the limit. Scheduled rank checks check only the project's oldest tracked keywords, up to the new plan's limit. ## Cancelling **Manage subscription** on **Billing** opens the Polar customer portal, where an owner or admin cancels the subscription or updates the card. A failed payment keeps the workspace working while Polar retries the card. When the subscription ends or Polar gives up on the card, screens that do SEO work ask for a plan again; the projects and everything in them stay in the workspace. --- # Projects and markets > How a netweft project ties a domain to a market, which countries carry full keyword data, and how to edit, archive and restore a project. Source: https://netweft.com/docs/projects-and-markets Updated: 2026-10-15 **A project is one site: a domain and the market its keywords are measured in. netweft has keyword data for 143 countries; 49 of them come without keyword difficulty and search intent.** A project is one site you work on. It holds a name, a domain and a market, and every saved keyword, tracker, audit and assistant chat in it belongs to that project alone. ## Create a project Owners and admins choose **New project** on **Projects**. A project needs a name of up to 120 characters; the domain and the market can be set now or later. The onboarding steps create the first project for you. Each plan caps how many projects a workspace holds at once: 5 on Pro, 12 on Studio and 25 on Agency. Archived projects do not count against the cap. ## The domain The domain is what audits crawl, what rank trackers look for in the results, and what the Search Console connection reads. Change it under **Project settings**. Changing it keeps the project's history, so earlier audits and rank checks stay as they were recorded against the old domain. Two active projects in one workspace cannot share a domain. ## The market The market is a country and a language. Search volume, cost per click, rankings and competitors are all read from it, and every lookup in the project uses it unless the screen lets you pick another country for one lookup. netweft has keyword data for 143 countries, served by two sources: | Countries | Search volume, cost per click, competition | Keyword difficulty and search intent | | --- | --- | --- | | 94 | yes | yes | | 49 | yes | no | **Project settings** says so under the market when the chosen country is one of the 49. Some countries search in more than one language, and the language list offers each of them; the largest market is the default. When a screen looks up a country other than the project's, the language switches to that country's default, so a Vietnamese-language project that looks up Germany asks in German. ## Archive and restore Archiving a project stops its scheduled work: queued audits and rank checks are cancelled, scheduled checks stop, and nothing new is bought for it. Everything recorded stays readable by everyone in the workspace, and nobody can change it until it is restored. Restoring picks up where the project left off, with its trackers, keywords and history intact. Owners and admins archive and restore projects from the **Archived** and **Active** tabs on **Projects**. Members see both tabs and every project, and cannot create, edit or archive one. See [Team and roles](/docs/team-and-roles). --- # Keyword research > Find keyword ideas from a seed, read their volume, difficulty, cost per click and intent, see who ranks for one, and save the ones worth keeping. Source: https://netweft.com/docs/keyword-research Updated: 2026-10-15 **Enter a seed keyword and get up to 200 ideas in one lookup, each with search volume, keyword difficulty, cost per click and intent, measured in the project's market. Open any idea to see the live results page.** **Keyword research** turns one seed word into a list of keywords people search for, measured in the project's [market](/docs/projects-and-markets). ## Find ideas from a seed 1. Open **Keyword research** in a project. 2. Type a seed, such as `project management software`. 3. Choose how many ideas to fetch: 50, 100 or 200. 4. Choose **Find keywords**. One lookup costs the same whatever number you choose, so 200 ideas cost no more than 50: | Market | Credits per lookup | | --- | --- | | A country with full keyword data | 360 | | One of the 49 countries without difficulty and intent | 900 | The same seed asked again with the same settings within 24 hours answers from a stored copy and costs nothing. ## Read the results Each idea has five columns, and every column sorts: | Column | What it is | | --- | --- | | Keyword | The search term. | | Volume | Average monthly searches in the market. | | Difficulty | 0 to 100: how hard the top results are to outrank. | | CPC | What advertisers pay per click in the market. | | Intent | What the searcher wants: informational, navigational, commercial or transactional. | Above the table, a summary line adds up the combined monthly volume of all ideas, their average difficulty and average CPC, and what this lookup cost. In the 49 countries without full data, Difficulty and Intent stay empty. ## See who ranks for a keyword **Who ranks** on any row opens the live results page for that keyword in the project's market: every organic result, top to bottom, with its URL and position. It opens on desktop with the top 10 results. Pick **mobile** or a depth of 20, 50 or 100 to look again. Each look is a fresh lookup, charged at 20 credits per page of 10 results: one page for the top 10, ten pages for the top 100. ## Save keywords Select rows and save them to the project. A saved keyword keeps its metrics and monthly volume history, and it is what rank trackers and the assistant work from. See [Saved keywords and tags](/docs/saved-keywords-and-tags). Each plan caps saved keywords per project: 1,000 on Pro, 2,500 on Studio and 5,000 on Agency. ## When a lookup cannot run - **The balance is too low.** netweft checks the balance before asking the data vendor and refuses the lookup if it cannot cover it, so nothing is charged. Top up from **Billing**. - **The project is archived.** Archived projects do not look anything up live. Restore the project first. - **No ideas came back.** The seed is too narrow for the market. A broader word usually has more around it. --- # Domain overview > Look up any domain for its rank, organic keywords, traffic and traffic value, then page through its ranking keywords, top pages and keyword ideas. Source: https://netweft.com/docs/domain-overview Updated: 2026-10-15 **Name a domain and netweft reports its domain rank, organic keyword count, estimated monthly visits and their value, with three paid lists behind it: ranking keywords, pages and keyword ideas.** **Domain overview** answers one question about any domain: what does it rank for, and what is that worth? It works the same on your own domain and on a competitor's. ## Look up a domain Nothing runs until you name a domain, because every lookup on this screen is paid. Type the domain and choose **Look it up**. The four figures at the top cost 362 credits: | Figure | What it is | | --- | --- | | Domain rank | A 0 to 100 authority score, worked out from the links pointing at the domain. | | Organic keywords | How many keywords the domain ranks for in the market. | | Organic traffic | Estimated monthly visits from those rankings. | | Traffic value | What those visits would cost as paid clicks, per month. | The figures come from the project's market. Keyword difficulty and the domain figures exist only in the 94 countries with full keyword data, so a project in one of the other 49 is looked up in the United States. ## The three lists Below the figures, three tabs each page through a list: - **Ranking keywords**: every keyword the domain ranks for, with its position, search volume, estimated traffic and the URL that ranks. - **Pages**: the domain's pages by organic traffic, with how many keywords each ranks for. - **Keyword ideas**: keywords related to what the domain ranks for, with volume, difficulty and intent, for finding gaps against a competitor. Every page of every list is its own lookup. Choose 50, 100 or 200 rows per page. netweft holds up to 360 credits for a page and charges what the vendor bills for it, which is a fixed fee per request plus a little per row, so a page of 50 rows costs less than a page of 200. The footnote under the tabs adds up everything bought for the domain while you are on the screen. ## Repeat lookups The same lookup with the same settings within 24 hours answers from a stored copy and costs nothing, so reopening a domain you looked at this morning is free. ## Related - [Backlinks](/docs/backlinks) for who links to the domain. - [Keyword research](/docs/keyword-research) to expand one keyword instead of one domain. - [Credits and billing](/docs/credits-and-billing) for every operation's price. --- # Backlinks > Look up the links pointing at any domain: totals, new and lost links, referring domains, the most linked pages, and a history built from every lookup. Source: https://netweft.com/docs/backlinks Updated: 2026-10-15 **Name a domain to see its live backlinks, referring domains and most linked pages. Every lookup stores a snapshot, and the History tab charts how the totals moved between them.** **Backlinks** shows who links to a domain, yours or a competitor's. Only links that still exist count, and links between pages of the same site are left out. ## Look up a domain Type the domain and choose **Look it up**. The summary costs 241 credits and shows five figures: | Figure | What it is | | --- | --- | | Backlinks | Live links pointing at the domain, subdomains included. | | Referring domains | Distinct domains those links come from. | | New backlinks | Links found recently, with how many were lost beside it. | | Broken backlinks | Links that point at a page on the domain that no longer answers. | | Domain rank | A 0 to 100 authority score, worked out from the links. | Every lookup also stores a snapshot of these totals for the project. ## The lists Four tabs sit under the summary: - **Backlinks**: each link, with the page it comes from, its anchor text, the linking domain's rank and whether the link is follow or nofollow. - **Referring domains**: each linking domain, with its rank, how many links it sends and how many of them are follow. - **Most linked pages**: the domain's pages ordered by links, with how many links and linking domains each has. - **History**: the stored snapshots, one row per lookup, with the backlink and referring-domain totals at the time. It needs two lookups before it shows movement, and reading it is free. The first three tabs are paid lists. Each page of 50, 100 or 200 rows is its own lookup: netweft holds up to 312 credits for a page and charges what the data vendor bills, a fixed fee per request plus a little per row. The same lookup within 24 hours answers from a stored copy and costs nothing. ## Snapshots of your own domain The project **Overview** reports backlinks for the project's own domain. Taking a fresh snapshot there costs the same 241 credits as a summary here, and only one snapshot per project runs at a time. ## Related - [Domain overview](/docs/domain-overview) for what the domain ranks for. - [Project context](/docs/project-context) to name the competitors the assistant compares you with. --- # Saved keywords and tags > Keep the keywords a project cares about, group them with coloured tags, refresh their metrics in one lookup and export them as CSV. Source: https://netweft.com/docs/saved-keywords-and-tags Updated: 2026-10-15 **Saved keywords are the list the rest of a project works from. Tag them to group them, refresh their volume and difficulty when the market moves, and export the list as CSV.** **Saved keywords** is the project's own list of keywords. Rank trackers add keywords from it, and the assistant reads it when it plans work. ## Add and remove keywords Keywords arrive from [Keyword research](/docs/keyword-research): select rows there and save them. Each saved keyword keeps the volume, difficulty, cost per click and intent it was saved with. To remove keywords, select them and choose **Stop following**. They leave the project's saved list and their tags go with them; saving one again later brings it back untagged. Each plan caps saved keywords per project: 1,000 on Pro, 2,500 on Studio and 5,000 on Agency. ## Read the list The figures above the table cover every saved keyword: combined monthly volume, average difficulty and how many tags are in use. The table sorts by keyword, volume or difficulty, and the tag filter narrows it to one tag. ## Tags A tag is a name of up to 60 characters and one of eight colours. Use tags to split a list by topic, funnel stage or page, for example `pricing` or `blog: guides`. - **Manage tags** creates, renames, recolours and deletes tags. - Select rows and choose the tag action to tag many keywords at once. - Deleting a tag removes it from every keyword; the keywords stay. ## Refresh metrics Search volume and difficulty move. **Refresh metrics** looks up every saved keyword in the project's current market again, in one lookup, and the button states its price before you press it: | Market | Price | | --- | --- | | A country with full keyword data | 120 credits per refresh plus 1.2 per keyword | | One of the 49 countries without difficulty and intent | 900 credits per refresh, whatever the count | Only keywords saved in the project's current market are refreshed. A keyword the data vendor returns nothing for keeps the figures it had. ## Export **Export CSV** downloads every saved keyword with these columns: `keyword`, `location_code`, `language_code`, `search_volume`, `keyword_difficulty`, `cpc`, `competition`, `intent` and `tags`. A keyword's tags share one cell, separated by commas, so a cell pasted into the tag field adds the same tags. Export also works on an archived project; refreshing and tagging do not. --- # Rank tracking > Track rankings for any domain on a schedule, on desktop and mobile, read positions, trends and the position matrix, and see each check's cost. Source: https://netweft.com/docs/rank-tracking Updated: 2026-10-15 **A tracker checks where a domain ranks for a list of keywords, daily, weekly, monthly or on demand, on desktop, mobile or both. Every position is stored with the time it was seen, and a check's price depends on its depth.** A rank tracker reads the live search results for each of its keywords and records where one domain appears. A project can hold several trackers, for example one for your own domain and one for each competitor. ## Create a tracker On **Rank tracking**, choose **Track a domain** and set: | Setting | Options | Default | | --- | --- | --- | | Domain | Any domain; subdomains count as the same site | none | | Schedule | daily, weekly, monthly, or manual (only when you run it) | weekly | | Devices | desktop, mobile, or both | both | | Depth | how many results to read: 10, 20, 50 or 100 | 20 | A keyword that is not within the depth is stored as **not ranking**, never as a zero. Pause a tracker from its settings to stop scheduled checks without losing its history; **Resume checks** starts them again. ## Add keywords Add keywords from the project's [saved keywords](/docs/saved-keywords-and-tags) or paste them, one per line. The cap counts tracked keywords across all of a project's trackers: 250 on Pro, 500 on Studio and 1,000 on Agency. ## What a check costs The data vendor bills one page of 10 results at a time, so depth sets the price. One check costs 20 credits per page, per keyword, per device: | Depth | Pages | Credits per keyword per device | | --- | --- | --- | | 10 | 1 | 20 | | 20 | 2 | 40 | | 50 | 5 | 5 × 20 | | 100 | 10 | 10 × 20 | The tracker screen shows the price of its next check before you run it. A check holds its whole price before the first lookup and is charged only for what it bought. If the balance runs out partway, the check pauses and carries on after a top-up. A scheduled check repeats every 1, 7 or 30 days after the last one. **Run check now** starts one at once. ## Read the results A tracker's page has three views of the same stored positions: - **Latest positions**: each keyword's position from the last check, with the figures above it: tracked keywords, average position, how many are in the top 10 and how many were not found. - **Trend**: for each check in the last 30, 90 or 365 days, how many keywords ranked 1 to 3, 4 to 10 and 11 to 20, and how many ranked lower or not at all. - **Position matrix**: every keyword against the last 5, 10 or 30 checks, to spot when a keyword moved. Choose **History** on a keyword to open its full position history. Each check also stores the URL that held the position; the [assistant](/docs/project-assistant) and the [MCP server](/docs/mcp-server) return it with every position. ## After a plan change A downgrade can leave a project tracking more keywords than the new plan allows. Nothing is deleted. Scheduled checks then check the oldest tracked keywords, up to the new limit, and adding keywords is refused until the project is back under it. --- # Site audit > Crawl a site with netweft's own crawler, read the 25 issue types it checks for by severity, measure page speed on a sample of pages, and export what it found. Source: https://netweft.com/docs/site-audit Updated: 2026-10-15 **A site audit crawls up to the plan's page limit from one start URL, obeys robots.txt, and ranks 25 kinds of problem as critical, warning or info. Page speed is an opt-in Lighthouse measurement on up to 10 pages.** A site audit crawls a site page by page and lists what is broken, ranked by how much it matters. netweft runs its own crawler, so a crawled page costs 1 credit. ## Run an audit On **Site audit**, set the run's options and choose **Run audit**: - **Crawl up to**: 10, 50, 200, 1,000 or 5,000 pages, capped by the plan: 1,000 on Pro, 2,500 on Studio and 5,000 on Agency. - **Start URL**: leave it empty to start from the project's domain, or name a page such as `https://example.com/docs` to audit one section. - **Measure page speed**: opt-in, described below. The audit holds credits for the full page count before it starts and is charged only for the pages it crawled. One audit runs per project at a time, and the plan caps audits per month across the whole workspace: 60 on Pro, 150 on Studio and 300 on Agency. ## How the crawler behaves - It starts at the start URL and follows links breadth-first, so the shallow pages are crawled before the deep ones. - It stays on the start URL's origin. - It reads `robots.txt` and skips any path disallowed for its user agent, `netweft-audit`. A site owner can allow or block it by that name. - A `401`, `403`, `429` or `503` answer counts as the crawler being refused, reported as **Crawler was blocked**, and not as a fault in the page. ## Issues Every issue has a severity. The audit page counts critical issues and warnings at the top, and the severity filter narrows the list. | Severity | Issues | | --- | --- | | Critical | Crawler was blocked; Broken internal link; Missing title tag; Server error | | Warning | Page returns an error; Conflicting canonical; Duplicate page content; Duplicate meta description; Duplicate title; Images without alt text; Missing h1; Missing meta description; Orphan page; Redirect chain; Slow server response; Thin content | | Info | Page is buried deep in the site; Heading levels skip a step; Meta description is too long; Meta description is too short; More than one h1; Page links nowhere; Page is set to noindex; Title is too long; Title is too short | Open an issue to see every page it affects. **Pages crawled** lists each page with its title, HTTP status, word count and whether it can be indexed. ## Page speed **Measure page speed** runs Lighthouse on a sample: the start URL plus one page of each kind the site has, such as a category page and an article, up to 10 pages at 50 credits each. Each measured page reports: - Performance, accessibility, best-practices and SEO scores, 0 to 100. - Largest Contentful Paint, Interaction to Next Paint, Cumulative Layout Shift and Time to First Byte. ## Export and delete Export an audit's issues as CSV from the audit page. **Delete audit** removes a finished audit with its crawled pages, issues and scores; the credits it used are not returned. A running audit cannot be deleted. --- # Search performance > Connect Google Search Console and Analytics 4 to a project and read real clicks, impressions, positions, sessions and key events at no credit cost. Source: https://netweft.com/docs/search-performance Updated: 2026-10-15 **Search performance shows a project's own Google data: Search Console queries and pages with clicks, impressions, CTR and position, and Analytics sessions, active users and key events. Reading it costs no credits.** **Search performance** shows what Google itself reports about the project's site. The figures come straight from Google, so reading them costs no credits. ## Connect Google netweft asks Google only for read-only access, and only when a project needs it, never at sign-in: | Source | Google permission | What it reads | | --- | --- | --- | | Search Console | `webmasters.readonly` | queries and pages with clicks, impressions, CTR and position | | Analytics | `analytics.readonly` | sessions, active users, engagement and key events | To connect a project: 1. Open **Project settings**, then **Integrations**. 2. Choose to connect Search Console or Analytics. Google asks you to approve the read-only permission for the Google account you are signed in with. 3. Pick the Search Console property or the Analytics property this project reads, and choose **Use this property**. Owners and admins connect and disconnect properties. Each project picks its own, so two projects can read two different sites from the same Google account. ## Search Console The **Search Console** tab shows totals for the window (clicks, impressions, CTR and average position) and a table that switches between search queries and pages: - Choose a window of 7, 28, 90 or 365 days; 28 is the default. - Filter queries or pages by text. The filter searches the whole window, not only the rows on screen. - Page through 25, 50 or 100 rows at a time, and export the table as CSV. Google's data lags a few days, so the most recent days of any window are usually empty. ## Analytics The **Analytics** tab shows sessions, active users and key events for the same window, broken down by channel, landing page or device. ## When something is wrong - **Not connected.** Nobody has picked a property for this project yet. Open **Integrations**. - **Permission missing or expired.** Google no longer grants the read-only permission, for example after it was revoked in the Google account. Connect again from **Integrations**. - **Archived project.** An archived project keeps any connection it had but cannot start a new one. --- # AI visibility > See how often Google's AI answers and ChatGPT mention your domain, which of your pages they cite, and your share of voice against up to nine competitors. Source: https://netweft.com/docs/ai-visibility Updated: 2026-10-15 **AI visibility counts the AI answers that name the project's domain on Google or ChatGPT, how often those answers are asked for, which pages they cite, and how the domain's mentions compare with its competitors'.** **AI visibility** measures how a domain shows up inside AI answers rather than in the ten blue links. It reads one assistant at a time: - **Google AI answers**: the AI-written answers Google shows above search results. - **ChatGPT**: answers from OpenAI's assistant. ## Run a check Pick the assistant and choose **Check AI visibility**. Nothing runs until you ask, because each check is a paid lookup of 2,150 credits. Switching to the other assistant is a separate lookup. The same check within 24 hours answers from a stored copy and costs nothing. ## Read the result | Figure | What it is | | --- | --- | | Mentions | How many AI answers in the dataset name the project's domain. | | AI search volume | How often the questions behind those answers are asked. | Below the figures: - **Share of voice** compares the domain's mentions with those of the project's competitors. - **Cited sources** lists the domain's pages the assistant cites, with how many citations each has. ## Competitors The comparison uses the competitors recorded in the project's [context](/docs/project-context), up to nine of them. With no competitors recorded, the check still reports the domain's own figures and the share of voice has nothing to compare against. The data vendor rebuilds its AI answer dataset about once a month, so checking more often than that rarely changes the figures. --- # Project assistant > Ask about a project's audits, keywords, rankings and context in plain language. The assistant reads stored data and never buys a lookup. Source: https://netweft.com/docs/project-assistant Updated: 2026-10-15 **The assistant answers questions about one project from the data netweft already stores. Every figure it quotes comes from a read-only tool, it never spends credits on a lookup, and a turn costs only the model calls it makes.** The **Assistant** answers questions about the project you have open, such as "which pages lost the most positions since last month?" or "what are the critical issues from the last audit?". ## What it can read The assistant answers by calling read-only tools over the project's stored data, the same tools the [MCP server](/docs/mcp-server) offers: - audits, their issues and crawled pages; - saved keywords and tags; - rank trackers, latest positions, trends, the position matrix and each keyword's history; - stored backlink snapshots; - the project's [context](/docs/project-context): brief, competitors, key pages and research log; - the workspace's credit balance and plan. Three rules hold for every answer: - **Every number comes from a tool.** If no tool returns it, the assistant says the project does not store it instead of guessing. - **It never buys a lookup.** It cannot run a keyword search, a rank check or an audit, so asking a question never triggers a data purchase. - **It sees one project.** Questions about another project have to be asked from inside that project. ## What a question costs A turn is charged for the model calls it makes. Before it starts, netweft holds the most one turn can cost, 223 credits: up to 5 model calls, each with a full prompt and a full answer. A question the assistant answers straight away settles for a fraction of that. If a turn fails partway, it is charged for the model calls that ran. ## Conversations Each conversation is private to the person who started it. The assistant reads the last 20 messages of a conversation as its memory, so start a new conversation when you change topic. **Your conversations** lists earlier ones to reopen. An archived project keeps its conversations readable, but the assistant does not answer new questions until the project is restored. --- # Project context > Record what the business is, who it competes with and which pages matter, so the assistant and any connected agent read the same brief. Source: https://netweft.com/docs/project-context Updated: 2026-10-15 **Project context is the brief an agent reads before working on a project: four written sections, a competitor list, key pages with their roles, and an append-only research log.** **Project context** is what an agent reads before it works on a project: what the business is, who it competes with, and which pages matter. The [assistant](/docs/project-assistant), the onboarding strategist and any agent connected over the [MCP server](/docs/mcp-server) all read it. Open it from **Project settings**, then **Context**. ## The four sections | Section | What to write | | --- | --- | | Business overview | What the business sells, to whom, and where. | | Current goal | The one outcome this project works toward now. | | Positioning | How the business differs from its competitors. | | Writing preferences | Tone, terms to use and terms to avoid. | Each section holds up to 20,000 characters. Write it yourself, or ask for an AI draft built from the project's name, domain and competitors, then edit it. A draft holds up to 12 credits and is charged for the model call it makes, usually a fraction of that. ## Competitors List the domains you compete with, each with an optional name and up to 2,000 characters of notes. [AI visibility](/docs/ai-visibility) compares the project against up to nine of them, and the assistant reads the list when it compares. ## Key pages Mark the pages that matter and give each a role: | Role | Meaning | | --- | --- | | hub | A page that gathers a topic and links out to the pages under it. | | spoke | A page that covers one part of a hub's topic. | | money | A page that converts: pricing, sign-up, product. | | other | Anything that matters for another reason. | A key page also takes a topic of up to 120 characters and notes of up to 2,000. ## Research log The research log records what was learned about the project, newest first, and shows whether each entry came from you or from an agent. Entries are appended and never edited, so the record stays trustworthy. Each entry is a summary of up to 4,000 characters. Owners and admins edit context. Everyone in the workspace reads it, and an archived project's context stays readable. --- # Credits and billing > What each netweft lookup costs in credits, how a charge is held and settled at the vendor's real price, and how top-ups and auto top-up refill it. Source: https://netweft.com/docs/credits-and-billing Updated: 2026-10-15 **One credit is $0.0001 of data-vendor cost. A lookup holds its most likely ceiling before it runs and is charged what the vendor actually billed, never more. Plan credits expire monthly; bought credits never expire.** Credits pay for the work netweft buys on your behalf: search data, results pages, backlink lists, crawled pages and AI model calls. Every workspace shares one balance. ## What a credit is One credit is $0.0001 of the data vendor's cost, so 10,000 credits are $1.00 of vendor spend. A lookup is charged what the vendor billed for it, converted at that rate. ## What each operation costs | Operation | Credits | Per | | --- | --- | --- | | Rank check | 20 | page of 10 results, per keyword, per device (40 at the default depth of 20) | | Keyword volume | 1.2 plus 120 per request | keyword | | Keyword ideas | up to 360 | request of up to 200 ideas | | Domain overview | 362 | request | | Ranked keywords, Top pages, Domain keyword ideas | up to 360 | page of up to 200 rows | | Backlink summary | 241 | request | | Backlinks, Referring domains, Top linked pages | up to 312 | page of up to 200 rows | | AI brand visibility | 2,150 | check, one assistant | | Keyword data in the 49 countries without full data | 900 | request, whatever the keyword count | | Page crawled | 1 | crawled page | | Lighthouse check | 50 | measured page, opt-in | | Assistant reply | up to 223 | question | | AI context draft | up to 12 | draft | | Onboarding strategist | up to 256 | turn | The same lookup with the same settings within 24 hours answers from a stored copy and costs nothing. Keyword metrics, results pages, audits and AI calls are never served from a stored copy. ## How a charge works 1. **Hold.** Before a paid lookup runs, netweft holds its price from the rate card above. If the balance cannot cover the hold, the lookup is refused and nothing is bought. 2. **Run.** netweft asks the vendor. 3. **Settle.** The vendor reports what it billed. The workspace is charged that amount, rounded up to a whole credit, and the rest of the hold is released. The hold is the ceiling: a charge never exceeds it. A list priced "up to" a figure is held at its 200-row ceiling, so a page of 50 rows settles for less. Rank checks and audits hold their whole run up front and settle when they finish; a run that runs out of credits partway pauses and carries on after a top-up. ## Which credits are spent first | Pool | Where it comes from | Expires | | --- | --- | --- | | Trial credits | the plan's free trial | with the trial | | Plan credits | each month of the plan | at the end of that month | | Bought credits | top-ups | never | Credits that expire are spent first, soonest expiry first, so bought credits always go last. **Billing**, then **Credits**, shows the balance, a daily chart of where credits went, and every settled charge with the lookup that made it. ## Top-ups Owners and admins buy credits at 2,500 credits per dollar, from $10 to $10,000 at a time. Top-ups are allowed during a trial. ## Auto top-up Auto top-up charges the card on file when the balance falls low, so a scheduled rank check is not interrupted. It is on by default once the trial ends, with these settings: | Setting | Default | | --- | --- | | Reload amount | $20 | | Fires below | 10% of the plan's monthly credits | | Most it can charge in a day | $60 | | Most charges in a day | 3 | Owners and admins change or switch it off under **Credits**. A declined card is retried once; after a second decline auto top-up stops until an owner or admin turns it back on. ## Rate limits Paid requests are limited to 60 a minute per workspace, and 10 a minute during a trial. See [Plans and trials](/docs/plans-and-trials) for prices, limits and plan changes. --- # Team and roles > Invite people to a netweft workspace as owner, admin or member, see what each role can do, and read the workspace's audit log. Source: https://netweft.com/docs/team-and-roles Updated: 2026-10-15 **A workspace has three roles. Members read everything and work in projects; admins also manage projects, billing, keys and people; owners can do all of that and hand out the owner role.** A workspace holds projects, credits, the plan and the team. Everyone in it shares the same credits and the same plan. ## Roles | | Owner | Admin | Member | | --- | --- | --- | --- | | Read every project, audit, keyword and ranking | yes | yes | yes | | Run lookups, audits and rank checks; use the assistant | yes | yes | yes | | Read billing and the credit balance | yes | yes | yes | | Create, edit, archive and restore projects | yes | yes | no | | Edit project context and Google connections | yes | yes | no | | Change plan, buy credits, set auto top-up | yes | yes | no | | Create, revoke and delete API keys | yes | yes | no | | Invite and remove people, change roles | yes | yes | no | | Read the audit log | yes | yes | no | | Make someone an owner | yes | no | no | Two rules sit on top of the table: - **Acting on someone needs a higher role.** An admin can change or remove a member but not another admin, and nobody acts on a peer. - **A workspace always keeps an owner.** The last owner cannot be removed, demoted or erased until another owner exists. ## Invite someone On **Settings**, open **Team** and choose **Invite someone**. Enter an email address and a role. netweft emails an invitation that names the workspace and who sent it; the link opens a page to accept it after signing in with that address. Owners can invite owners, admins and members; admins can invite members. Invitations not yet accepted are listed under **Pending invitations**, where they can be cancelled. A workspace holds up to 99 people. ## Remove someone Removing a person ends their access to the workspace at once. Anything they created stays, and they can be invited back. ## The audit log **Audit log** on **Settings** lists who did what and when: plan changes, top-ups, auto top-up settings, API keys, invitations, role changes, Google connections and project changes. Owners and admins read it. ## Erase your account **Account** on **Settings** erases your account, your sessions and everything only you hold, after you type `ERASE` to confirm. It cannot be undone. If you are the only owner of a workspace, make someone else an owner first. --- # API keys > Issue a workspace API key for netweft's MCP server, narrow what it can read with scopes, set an expiry, and revoke or delete it. Source: https://netweft.com/docs/api-keys Updated: 2026-10-15 **An API key lets an agent read a workspace through the MCP server. Keys belong to the workspace, are shown once, read only what their scopes allow, and can never change data or spend credits.** An API key is how an agent reaches netweft's [MCP server](/docs/mcp-server). Keys belong to the workspace, not to a person, and only owners and admins issue them. ## Issue a key On **Settings**, open **API keys** and fill in: 1. **Name**: up to 80 characters, such as `Claude on my laptop`, so you can tell keys apart later. 2. **Scopes**: what the key may read. A new key reads everything unless you narrow it. 3. **Expires**: never, in 30 days, in 90 days or in a year. The key is shown once, in the form `nw__`. Copy it then: netweft stores only a hash of it and cannot show it again. ## Scopes | Scope | What a key with it reads | | --- | --- | | Projects | Projects, their overviews and who the key belongs to | | Site audit | Site audits, their issues and the pages they crawled | | Keywords | Saved keywords and their tags | | Rank tracking | Rank trackers, tracked keywords and their results | | Context | Project context, competitors, key pages and backlinks | | Billing | The workspace's credit balance and subscription | Every MCP tool is read-only, so a scope decides what a key can see, never what it can change. Leave **Billing** off a key handed to an outside tool to keep the balance and plan private. ## Revoke or delete a key - **Revoke key** stops the key at once, and it cannot be un-revoked. Its record stays in the list for seven days so you can still identify it. - **Delete record** forgets a revoked key's record before the seven days are up. Either way, the [audit log](/docs/team-and-roles) keeps when the key was created, revoked and deleted, and by whom. ## Limits Requests made with one key are limited to 120 a minute. API keys work only on the MCP server; the dashboard's own HTTP routes take a signed-in session instead. See [HTTP API](/docs/http-api). --- # MCP server > Connect Claude, Cursor or any MCP client to netweft with an API key and let an agent read projects, audits, keywords, rankings and context. Source: https://netweft.com/docs/mcp-server Updated: 2026-10-24 **netweft runs a Model Context Protocol server at https://api.netweft.com/mcp. An agent with an API key gets 25 read-only tools over the workspace's stored data, and clients that only run local servers connect through netweft-mcp on npm.** netweft speaks the Model Context Protocol, so an AI agent can read a workspace the way the in-app [assistant](/docs/project-assistant) does. Every tool is read-only over data netweft already stores: an agent can read a workspace but cannot change it or spend its credits. Paid lookups stay in the dashboard. ## Connect a client 1. Issue an [API key](/docs/api-keys) under **Settings**, then **API keys**. The key is shown once, beside the snippets below filled in for your workspace. 2. Add netweft to your client, with the key in the `Authorization` header. | Setting | Value | | --- | --- | | URL | `https://api.netweft.com/mcp` | | Transport | Streamable HTTP (JSON-RPC 2.0 over `POST`) | | Header | `Authorization: Bearer nw__`, or `x-api-key: nw__` | | Protocol versions | `2026-07-28`, and the handshake revisions `2025-11-25`, `2025-06-18` and `2025-03-26` | Clients that speak HTTP connect to that URL directly. Clients that only start local servers, such as Claude Desktop and Windsurf, run [`netweft-mcp`](https://www.npmjs.com/package/netweft-mcp) from npm, which relays each message to the same URL with your key. It needs Node.js 20 or later and nothing installed by hand: the client starts it with `npx`. ### Claude Code ```sh claude mcp add --transport http netweft https://api.netweft.com/mcp \ --header "Authorization: Bearer $NETWEFT_API_KEY" ``` To share the setup with a project without sharing the key, add it to `.mcp.json` and keep the key in an environment variable: ```json { "mcpServers": { "netweft": { "type": "http", "url": "https://api.netweft.com/mcp", "headers": { "Authorization": "Bearer ${NETWEFT_API_KEY}" } } } } ``` ### Claude Desktop Open **Settings**, then **Developer**, then **Edit Config**, and add netweft to `claude_desktop_config.json`. Restart Claude Desktop afterwards. ```json { "mcpServers": { "netweft": { "command": "npx", "args": ["-y", "netweft-mcp"], "env": { "NETWEFT_API_KEY": "nw_..." } } } } ``` Windsurf takes the same entry in `~/.codeium/windsurf/mcp_config.json`, and so does any other client that starts a command. ### Cursor In `~/.cursor/mcp.json`, or `.cursor/mcp.json` in a project: ```json { "mcpServers": { "netweft": { "url": "https://api.netweft.com/mcp", "headers": { "Authorization": "Bearer ${env:NETWEFT_API_KEY}" } } } } ``` ### VS Code In `.vscode/mcp.json`. VS Code asks for the key once and keeps it out of the file: ```json { "inputs": [ { "type": "promptString", "id": "netweft-key", "description": "netweft API key", "password": true } ], "servers": { "netweft": { "type": "http", "url": "https://api.netweft.com/mcp", "headers": { "Authorization": "Bearer ${input:netweft-key}" } } } } ``` ### Codex CLI In `~/.codex/config.toml`: ```toml [mcp_servers.netweft] url = "https://api.netweft.com/mcp" bearer_token_env_var = "NETWEFT_API_KEY" ``` ### Gemini CLI In `~/.gemini/settings.json`, through the npm bridge: ```json { "mcpServers": { "netweft": { "command": "npx", "args": ["-y", "netweft-mcp"], "env": { "NETWEFT_API_KEY": "$NETWEFT_API_KEY" } } } } ``` ### Self-hosted Point a client at your own API's URL followed by `/mcp`. For the npm bridge, add `NETWEFT_API_URL` to its `env` with the API's URL; the bridge adds `/mcp` itself. ## How the server answers The server answers `server/discover`, `initialize`, `ping`, `tools/list` and `tools/call`, and keeps no session. A client on `2026-07-28` sends the version with every request and needs no handshake; an older client opens with `initialize` and is answered in its own version. Both are told how the tools fit together before the first call: start with `list_projects`. Each tool has a title and is marked read-only, so a client that asks before running a tool that writes can skip asking. A tool's answer comes back as text, and as structured content when it is a single object. The server answers with JSON, or with a single event when the client accepts `text/event-stream`. A `GET` request answers `405`, because the server never sends a message unprompted. A request that names a version the server does not speak, or whose headers disagree with its body, answers `400`. ## Tools `tools/list` returns only the tools the key's scopes allow. | Scope | Tools | | --- | --- | | Projects | `whoami`, `list_projects`, `get_project`, `get_project_overview` | | Keywords | `list_saved_keywords`, `list_keyword_tags` | | Rank tracking | `list_rank_trackers`, `get_rank_tracker`, `list_tracked_keywords`, `get_latest_rank_results`, `get_rank_position_matrix`, `get_rank_trend`, `get_keyword_rank_history`, `estimate_rank_check_cost` | | Site audit | `list_audits`, `get_audit`, `list_audit_issues`, `list_audit_pages` | | Context | `get_project_context`, `list_competitors`, `list_key_pages`, `list_research_log`, `list_backlink_snapshots` | | Billing | `get_credit_balance`, `get_subscription` | Start an agent with `list_projects` to get project ids; most other tools take one. `estimate_rank_check_cost` reports what a rank check would cost without running it. ## Limits One key can make 120 requests a minute. A key that is revoked or past its expiry is refused at once. ## Example prompts - "List my netweft projects, then summarise the critical issues from the latest audit of the first one." - "Which tracked keywords fell out of the top 10 in the last check?" - "Read the project context and list the competitors with their notes." --- # HTTP API > The HTTP API behind the netweft dashboard: where its OpenAPI document lives, how requests authenticate, how errors are shaped, and its rate limits. Source: https://netweft.com/docs/http-api Updated: 2026-10-15 **Every dashboard screen runs on a documented HTTP API at https://api.netweft.com, described by an OpenAPI 3.1 document. It authenticates with a signed-in session; agents should use the MCP server instead.** The netweft dashboard runs entirely on an HTTP API at `https://api.netweft.com`. The API describes itself in an OpenAPI 3.1 document, generated from the same schemas that validate every request and response: ```text https://api.netweft.com/openapi.json ``` ## Authentication The HTTP routes authenticate with the session cookie that signing in to the dashboard sets. They do not accept API keys, and the API refuses state-changing requests sent from another site. | What you want | Use | | --- | --- | | An agent or script that reads a workspace | the [MCP server](/docs/mcp-server) with an [API key](/docs/api-keys) | | Everything else, including paid lookups | the dashboard | ## Errors A failed request answers with a named problem: ```json { "code": "limit_audits_per_month", "error": "This plan allows 60 audits a month" } ``` `code` is stable and is what a client should branch on; `error` is a sentence for a person and may change. Each code maps to one HTTP status: | Status | Codes | | --- | --- | | 401 | `unauthenticated` | | 402 | `insufficient_credits` | | 403 | `insufficient_role`, `no_subscription`, `limit_*`, `demo_read_only` | | 404 | `not_found` | | 409 | `already_running`, `project_archived` | | 422 | `validation_failed`, with `issues` when a schema refused the input | | 428 | `not_connected`, `missing_scope` (Google) | | 429 | `rate_limited` | | 503 | `vendor_unavailable` | ## Rate limits | Limit | Applies to | | --- | --- | | 60 paid requests a minute | a workspace on a paid plan | | 10 paid requests a minute | a workspace on a free trial | | 120 requests a minute | one API key on the MCP server | Limits are counted per Cloudflare location, so they hold approximately. ## Health `GET https://api.netweft.com/health` needs no authentication and reports whether the database and cache are up. --- # Guides > Working notes and step-by-step playbooks: ranking drops, site migrations, keyword gaps, rank tracking, crawl cost and reading an SEO workspace from an agent. Source: https://netweft.com/blog Every guide is also available as markdown at the same path plus `.md`. - [An agent's first five calls over MCP](https://netweft.com/blog/an-agents-first-calls): Start with whoami for the workspace and plan, list_projects to find the domain, get_project_overview for counts and the latest audit, then get_rank_trend or get_keyword_rank_history for what moved. Read get_credit_balance before suggesting paid work. Every call reads stored rows and spends nothing. - [Auditing by template, not by page](https://netweft.com/blog/auditing-by-template): A large site is a few templates rendered many times, so a finding on forty product pages is usually one fault in one template. netweft groups URLs into shapes by replacing ids, dates and long slugs, measures performance once per shape, up to ten pages, and lists duplicates with the pages sharing them. - [How netweft is built, and a prompt to build your own](https://netweft.com/blog/build-an-seo-saas-like-netweft): netweft is four Cloudflare Workers over one D1 database: static marketing and dashboard sites, a Hono API with Workflows and a cron, and an analytics relay. Six decisions shaped it: a provider port, reserve-then-settle credits, stored snapshots, one-statement D1 guards, a read-only MCP surface and no free tier. - [Checking a site migration in the first week](https://netweft.com/blog/checking-a-site-migration): Before a migration, audit the old site and run a rank check so there is a baseline. After it, crawl the new site and fix Broken internal link, Redirect chain, Page returns an error, Conflicting canonical and noindex first, then compare a fresh rank check and Search Console with the baseline. - [Choosing which keywords to track](https://netweft.com/blog/choosing-what-to-track): Track the keywords whose movement would change what you do next, and save the rest. At the default depth a rank check is 40 credits per keyword per device, so 100 keywords checked weekly on both devices cost about 32,000 credits a month. - [Diagnosing a ranking drop before you change anything](https://netweft.com/blog/diagnosing-a-ranking-drop): Confirm the drop is real in the keyword's stored history, check whether the ranking URL changed, compare Search Console clicks and impressions for the same window, then audit the affected page. Change nothing until one of those names a cause. - [Measuring and earning mentions in AI answers](https://netweft.com/blog/earning-mentions-in-ai-answers): Record your competitors, check AI visibility once per assistant, read Mentions and Share of voice against them, then improve the pages assistants already cite and write the pages your strongest competitors have and you lack. Check again about once a month, when the dataset is rebuilt. - [Finding keyword gaps against a competitor](https://netweft.com/blog/finding-keyword-gaps-against-a-competitor): List the keywords a competitor ranks for, remove the ones your own domain already ranks for, and keep the rest that match a page you could write. In netweft that is two Ranking keywords lookups on Domain overview, a save, a tag, and a tracker on the survivors. - [GA4 beside Search Console, per project](https://netweft.com/blog/ga4-beside-search-console): Search Console reports what happened on Google: impressions, clicks, click-through rate and position, by query and page. GA4 reports what happened next: sessions, active users, engagement rate and key events, by channel, device and landing page. netweft reads both read-only, per project, for no credits. - [Planning a topic cluster from one seed keyword](https://netweft.com/blog/planning-a-topic-cluster): Research a seed, group the ideas into one broad hub term and the narrower questions under it with tags, give each planned page one group, record the pages as hub and spoke key pages in project context, and audit the cluster for orphan pages once it is live. - [Reading an SEO workspace from an agent](https://netweft.com/blog/reading-a-workspace-from-an-agent): netweft exposes MCP at POST /mcp under an API key, alongside an OpenAPI 3.1 document for the whole HTTP API. An agent reads a workspace's stored audits, keywords, rankings and project overview, and reading costs no credits because the credits were spent when the observation was made. - [Reading a site audit by severity](https://netweft.com/blog/reading-an-audit-by-severity): Work critical first: server errors, broken internal links, missing titles and pages the crawler was blocked from. Warnings hold most of the ranking work, from duplicate titles to thin content and orphan pages. Info findings are often deliberate. A 403 or 429 means the crawl was refused, not that a page is broken. - [Why netweft's cache and rate limiter fail open](https://netweft.com/blog/redis-is-optional): netweft's cache and rate limiter fail open: a cache that cannot answer is a miss, and a limiter that cannot count lets the request through, so the product keeps working, more slowly and more permissively. Choosing that up front is what stops a performance dependency becoming an availability one. - [Refreshing pages that rank just off page one](https://netweft.com/blog/refreshing-pages-in-striking-distance): Sort Search Console queries by impressions, keep those with an average position between 8 and 20, group them by the page that ranks, and refresh the page that collects the most impressions first. Track the queries before the change ships so the result is measurable. - [Reserve, then settle: pricing a call before you know its cost](https://netweft.com/blog/reserve-then-settle): netweft reserves credits at the rate card's price before a paid call goes out, then reads the real charge off the response and settles against it. The reservation is a ceiling, so a cheaper operation releases the difference, and a workspace that cannot cover it is refused before anything is bought. - [Why connecting Search Console is two steps, not one](https://netweft.com/blog/search-console-two-steps): Google access is granted once per account, and the property a project reads is chosen per project. netweft keeps them as two separate steps because a single control that sometimes does one and sometimes both is unpredictable. - [Why a rank tracker should store snapshots, not recompute them](https://netweft.com/blog/snapshots-not-recomputation): Store each rank check as an immutable snapshot — position, URL and the timestamp it was seen — rather than deriving history on read. A recomputed history can change without the SERP changing, which makes it useless as evidence. - [Spending a trial's credits on one real domain](https://netweft.com/blog/spending-a-trial-well): A trial gets 3,000 to 8,000 credits by plan, 10 paid requests a minute and no auto top-up. Spend them on one domain you know: an overview, its referring domains, metrics for your terms, one audit, and a tracker on twenty keywords and one device, run by hand. - [Why the SEO data provider sits behind a port](https://netweft.com/blog/the-provider-sits-behind-a-port): netweft's SEO data provider is an interface with two implementations: DataForSEO for real data, and a mock serving deterministic fixtures with no credentials. Nothing above the port knows which answered, so the product runs offline, every test is deterministic, and credit accounting is identical on both paths. - [Top-ups and auto top-up: when to turn it on](https://netweft.com/blog/top-ups-and-auto-top-up): A dollar buys 2,500 top-up credits, from $10 a purchase. They never expire and are spent after plan credits. Auto top-up starts on: under 10% of the allowance it buys $20 more, at most 3 times and $60 a day. - [What a 500-page crawl costs, and why Lighthouse is opt-in](https://netweft.com/blog/what-a-crawl-costs): A crawled page costs one credit, so a 500-page crawl is 500 credits. A Lighthouse pass costs 50 credits a page, so netweft measures a sample, the start URL and one page per URL shape up to 10, adding at most 500 credits. It is opt-in per audit. - [What a scoped API key is actually protecting](https://netweft.com/blog/what-a-scoped-key-protects): Because every netweft MCP tool is read-only over rows already stored — none of them writes, crawls or spends a credit — a scope cannot withhold a capability, only a subject. The useful one is billing: it is how a key handed to an outside integration is stopped from reading the workspace's balance and plan. - [What an SEO data lookup actually costs](https://netweft.com/blog/what-an-seo-lookup-costs): Almost every number in an SEO tool is bought from a data vendor per call or per keyword. netweft prices one credit at $0.0001 of raw vendor cost, reserves credits before a call runs, and settles the reservation against what the vendor actually charged. - [Volume, CPC, difficulty and intent: what each number is for](https://netweft.com/blog/what-keyword-metrics-mean): Volume says how often a term is searched, the twelve-month history says when, cost per click says what a visit is worth to advertisers, difficulty estimates how hard the first page is to reach, and intent says what the searcher wants. None of them says whether your page can rank: that is what a rank check is for. - [Why netweft has no free tier](https://netweft.com/blog/why-no-free-tier): Every netweft lookup costs real vendor money before anybody pays anything, so a free tier spends that money on accounts that will never convert. Instead there is a read-only demo, and a short trial with 3,000 to 8,000 credits by plan, a tighter rate limit and no auto top-up. --- # An agent's first five calls over MCP > A sensible order for an agent's first session against a netweft workspace over POST /mcp: who it is, what is there, what moved, and what more would cost. Source: https://netweft.com/blog/an-agents-first-calls Updated: 2026-10-08 **Start with whoami for the workspace and plan, list_projects to find the domain, get_project_overview for counts and the latest audit, then get_rank_trend or get_keyword_rank_history for what moved. Read get_credit_balance before suggesting paid work. Every call reads stored rows and spends nothing.** An agent pointed at netweft's [MCP server](/mcp) has a few dozen tools and no context. The order it calls them in decides whether its first answer is about the right project. This is the order we would use. The connection itself is `POST /mcp` with an API key, sent as a bearer token in `Authorization` or in an `x-api-key` header. A key belongs to one workspace and can be [scoped](/blog/what-a-scoped-key-protects) to part of it. ## 1. whoami "What this API key can see": the workspace, whether it is entitled to paid work, its plan, and how many active projects it holds. It takes no arguments and it is the right first call when the agent knows nothing. If it reports no entitlement, the agent should say so rather than plan work the workspace cannot do. Reads of stored data still work; anything that would buy fresh data would be refused. ## 2. list_projects The projects, each with its id, name and domain. Archived projects are left out unless the agent asks for them. Matching the domain the person named to a project id here prevents the most common mistake, which is answering about the wrong site. ## 3. get_project_overview A summary of one project: saved and tracked keyword counts, the latest audit, the latest backlink snapshot, and the average rank position. It is enough to know which of the next tools are worth calling. ## 4. What moved Rank tracking is organised by configuration: one domain in one market. `list_rank_trackers` lists them, with how often each runs and why the last scheduled run was skipped, if it was. Then: - `get_rank_trend` shows how many keywords sat in the top 3, 4 to 10 and 11 to 20 at each check, over the last 30 days unless asked for longer. - `get_keyword_rank_history` is one keyword's stored observations, which is what to quote when somebody asks "when did this drop". - `list_audit_issues` is the same for the site audit, with severities. Every figure these return was observed and stored when the check ran. An agent quoting them is quoting the record, not a fresh estimate. ## 5. What more would cost Agents like to suggest work. Two tools keep the suggestion honest: - `get_credit_balance`: what is available, what is held by calls in flight, and what each pool holds. - `estimate_rank_check_cost`: what running a configuration's check now would cost, keywords times devices. Nothing is bought. An agent that reads both before it says "let's re-check everything daily" can say what that costs in the same breath. ## What the agent cannot do Spend. Every MCP tool reads rows netweft already stored, so none of them buys a lookup, starts a crawl or uses a credit. That is why [reading a workspace from an agent](/blog/reading-a-workspace-from-an-agent) costs nothing: the credits were spent when the observation was made. A key is held to 120 requests a minute, which is room for a long session and not for a loop that never stops. --- # Auditing by template, not by page > Most audit findings on a large site come from a few templates. How netweft groups URLs into shapes, measures performance once per shape, and reads duplicates. Source: https://netweft.com/blog/auditing-by-template Updated: 2026-10-17 **A large site is a few templates rendered many times, so a finding on forty product pages is usually one fault in one template. netweft groups URLs into shapes by replacing ids, dates and long slugs, measures performance once per shape, up to ten pages, and lists duplicates with the pages sharing them.** A 500-page crawl of an online shop is not 500 pages. It is a home page, a few category pages, a few hundred product pages and a blog, each rendered from its own template. When the audit finds forty duplicate titles, it has usually found one template that does not put the product name in the title. Reading an audit by template turns forty fixes into one. ## How a URL becomes a shape netweft decides which pages share a template from their paths alone. Each segment of a path is replaced if it looks like it varies per record: - a number becomes `:id`, so `/orders/1042` is `/orders/:id` - a UUID becomes `:uuid` - a date like `2026-10-08` becomes `:date` - a segment of three or more hyphenated words becomes `:slug`, so `/blog/what-a-crawl-costs` is `/blog/:slug` Two-word segments stay as they are. `/my-account` and `/gift-cards` are usually fixed routes rather than records, and collapsing them would fold a site's whole navigation into one group. ## Performance once per shape A [performance check](/glossary/core-web-vitals) is 50 credits a page, 50 times the cost of crawling it, and it is opt-in per audit. When it is on, netweft does not measure every page. It measures the start URL, then one page per shape it has not measured yet, up to 10 pages. Only pages that loaded are eligible, because measuring a 404 reports the speed of the error page. So the most a performance pass can add to an audit is 500 credits, and a site with three shapes settles at 150. Measuring forty product pages would buy forty copies of one answer; [what a 500-page crawl costs](/blog/what-a-crawl-costs) has the arithmetic. ## Reading duplicates Duplicate titles, duplicate meta descriptions and duplicate content each list, for every affected page, the other pages that share the value, up to twenty of them, with the full count beside it. Read that list for the pattern: - **Every page in one shape shares the value.** The template writes a fixed string. Put the distinguishing attribute, the product or article name, into the template. - **Pairs of pages share it.** Usually the same content at two URLs: with and without a parameter, an old path and a new one. A [canonical](/glossary/canonical-url) or a redirect fixes it. - **Pages from different shapes share it.** Usually a fallback value: the site's default description, printed wherever a page has none of its own. ## Thin content and orphans by shape The same reading helps with the findings that are not duplicates. Thin content across one shape is a template with too little on it, often a listing page with no introduction. Orphan pages across one shape are a section that the navigation forgot, which [internal linking](/glossary/internal-linking) from one hub page fixes for all of them. ## The routine 1. Sort the findings by severity, as in [reading an audit by severity](/blog/reading-an-audit-by-severity). 2. Within each severity, group the affected URLs by shape. 3. Fix the template, not the page. 4. Re-run the audit. A Pro audit is up to 1,000 pages at 1 credit a page, so checking the fix costs less than looking for it did. --- # How netweft is built, and a prompt to build your own > The architecture behind netweft on Cloudflare Workers, the six decisions that shaped it, and a copy-paste prompt for building a metered SEO tool of your own. Source: https://netweft.com/blog/build-an-seo-saas-like-netweft Updated: 2026-10-15 **netweft is four Cloudflare Workers over one D1 database: static marketing and dashboard sites, a Hono API with Workflows and a cron, and an analytics relay. Six decisions shaped it: a provider port, reserve-then-settle credits, stored snapshots, one-statement D1 guards, a read-only MCP surface and no free tier.** netweft is an SEO research and rank-tracking product that one person can run. This guide lays out how it is built, explains the six decisions that shaped it, and ends with a prompt you can hand to an AI coding agent to build a product of the same shape. ## The pieces Everything runs on Cloudflare, as four Workers in one Bun and Turborepo workspace: | Worker | What it is | | --- | --- | | Marketing | an Astro site rendered to static files at build time | | Dashboard | a TanStack Start single-page app, served as static assets | | API | Hono with an OpenAPI 3.1 document, two Cloudflare Workflows and a five-minute cron | | Relay | a small Worker that forwards consented analytics | The API owns all state: a D1 database through Drizzle ORM, a KV namespace for caching vendor answers, and Workers Rate Limiting for request limits. Sign-in is better-auth with Google, GitHub and email codes, payments are Polar, SEO data comes from DataForSEO, AI calls go through OpenRouter and email through Resend. The dashboard and the API are separate origins on the same site, so a `SameSite=Lax` session cookie works across them without a token in the browser. ## Decision 1: the data vendor sits behind a port One module knows DataForSEO exists. Everything else calls an interface with two implementations: the real adapter, and a mock that serves fixtures and needs no account. The whole product runs locally and in tests with no vendor key, and a vendor change touches one folder. See [the provider sits behind a port](/blog/the-provider-sits-behind-a-port). ## Decision 2: credits are reserved, then settled Every paid call holds its price before it runs and settles at what the vendor actually billed, never more than the hold. A workspace that cannot cover the hold is refused before money is spent. Lists are held at their 200-row ceiling; rank checks are priced per page of ten results, because that is how the vendor bills them. See [reserve, then settle](/blog/reserve-then-settle) and the [rate card](/docs/credits-and-billing). ## Decision 3: rankings are stored observations A rank check writes a snapshot per keyword and device: position, URL and the time it was seen. History is the list of snapshots, never a recomputation, so last month's chart cannot change. See [snapshots, not recomputation](/blog/snapshots-not-recomputation). ## Decision 4: D1 guards are single statements D1 has no interactive transactions, so every check-then-write is one conditional statement (`INSERT … SELECT … WHERE` the balance still covers it), one atomic batch, or a short leased lock row. Long work runs in Workflows, which retry steps and survive a Worker being recycled, and the cron starts scheduled checks and ends runs whose Workflow is gone. ## Decision 5: agents read, people spend An [MCP server](/docs/mcp-server) lets an agent read a workspace with a scoped API key. All 25 tools are read-only over stored rows, so a leaked key can read but never write or spend. The in-app [assistant](/docs/project-assistant) uses the same tools and must quote only figures a tool returned. ## Decision 6: no free tier, a trial and a demo instead Every lookup costs real money, so a free tier pays for accounts that never convert. netweft offers a short trial with a tighter rate limit and a read-only demo that answers from sample data. See [why netweft has no free tier](/blog/why-no-free-tier). ## A prompt to build your own Paste this into an AI coding agent such as Claude Code in an empty repository. Replace the bracketed parts. It builds in phases, and each phase ends with tests passing before the next starts. ```text Build a metered SEO SaaS for [your niche] as a Bun + Turborepo monorepo on Cloudflare Workers. Work in phases; finish each with passing tests and a commit before starting the next. Ask me before choosing anything not listed. Stack: - packages/api: Hono with @hono/zod-openapi on a Worker, D1 via Drizzle ORM, KV for caching, Workers Rate Limiting, Cloudflare Workflows for long jobs, a cron trigger every 5 minutes. Vitest with @cloudflare/vitest-plugin against a real local D1. - packages/web: TanStack Start as a static SPA, TanStack Query, Tailwind, shadcn/ui, a typed client generated from the API's route types. - packages/db: one Drizzle schema and its migrations, shared by api and web test fixtures. - Auth: better-auth with organizations (workspaces), Google sign-in and email + password confirmed by a 6-digit code. - Payments: Polar subscriptions and one-off top-ups, mirrored by webhook. Rules that must hold everywhere: 1. The SEO data vendor ([DataForSEO or another]) sits behind a provider interface with a deterministic mock; nothing outside the adapter imports the vendor client. The app must run end to end with the mock. 2. Credits: 1 credit = a fixed fraction of a dollar of vendor cost. Before any paid call, insert a hold with ONE conditional SQL statement that succeeds only if balance minus open holds covers it; refuse with 402 otherwise. After the call, settle at the vendor's reported cost, capped at the hold. Price every operation per the vendor's real billing unit, and hold list lookups at their maximum page size. 3. D1 has no interactive transactions: use single conditional statements, db.batch, or a leased lock row for every check-then-write. 4. Rank checks store immutable snapshots (keyword, device, position or null, URL, timestamp). Never recompute history. 5. Expose a read-only MCP server at POST /mcp authenticated by hashed, scoped API keys. No tool writes or spends credits. 6. Every outbound fetch of a user-supplied URL passes an SSRF guard that resolves DNS and refuses private addresses, follows redirects manually and caps the body size. 7. No free tier: plans with a trial and trial credits, plus a read-only demo workspace that answers paid lookups from sample data. Phases: 1. Monorepo, D1 schema, auth, workspaces and projects (domain + market). 2. Credit ledger, holds, settlement, Polar plans, top-ups and webhook. 3. Keyword research and saved keywords through the provider port. 4. Rank tracking: trackers, Workflow-run checks, snapshots, cron schedule. 5. Site audit: own crawler in a Workflow, robots.txt, issues by severity. 6. Dashboard screens for each of the above, then the MCP server. 7. Marketing site, docs and the read-only demo. ``` The prompt encodes the decisions above as rules rather than suggestions, because an agent follows a numbered rule more reliably than a paragraph of reasoning. Expect to review every phase: the rules prevent the expensive mistakes, and the review catches the rest. --- # Checking a site migration in the first week > Take a baseline before a migration, then crawl, check ranks and read Search Console after it. The audit issues and the order that catch a broken move early. Source: https://netweft.com/blog/checking-a-site-migration Updated: 2026-10-15 **Before a migration, audit the old site and run a rank check so there is a baseline. After it, crawl the new site and fix Broken internal link, Redirect chain, Page returns an error, Conflicting canonical and noindex first, then compare a fresh rank check and Search Console with the baseline.** A migration moves URLs, templates or domains in one release, and most of the traffic it loses is lost to a handful of mechanical faults. Every one of them shows up in a crawl within an hour of the release, which makes the first week the cheapest time to find them. ## Before the release: take a baseline 1. **Audit the old site.** Run a [site audit](/docs/site-audit) at the plan's page limit. Export the issues as CSV and keep the **Pages crawled** list: it is the inventory of URLs that must still answer, directly or through a redirect, after the move. 2. **Run a rank check.** On each tracker, choose **Run check now**. The positions it stores are the baseline the post-migration checks are read against. 3. **Note the Search Console figures.** On [Search performance](/docs/search-performance), the 28-day clicks, impressions and average position are the traffic baseline. ## After the release: crawl first Crawl the new site the day it goes live. These issues explain most migration losses, in the order to fix them: | Issue | What it usually means after a migration | | --- | --- | | Page is set to noindex | a staging setting shipped to production | | Server error, Page returns an error | an old URL with no redirect, or a template that fails | | Broken internal link | navigation or content still points at old URLs | | Redirect chain | old URL to interim URL to new URL; point the first hop at the last | | Conflicting canonical | canonicals still name the old URLs or the staging host | | Crawler was blocked | a firewall or bot-protection rule from staging answering 401, 403, 429 or 503 | Then compare the **Pages crawled** count with the baseline. A new site that crawls far fewer pages from the same start URL has lost internal links, or its `robots.txt` disallows paths the crawler now skips; the **Orphan page** and **Page links nowhere** issues help locate the first. If the domain itself changed, update it under **Project settings**. The project keeps its history, so earlier audits and rank checks stay recorded against the old domain. A tracker keeps the domain it was created with, so create a tracker for the new domain and add the same keywords to it. ## In the first week: watch ranks and Search Console - Run a rank check two or three days after the release and again at the end of the week. Movement of a few places is normal while Google recrawls; a keyword that falls to **not ranking** and stays there points at a URL that was not redirected. - On Search performance, compare the 7-day window with the 28-day baseline you noted. Impressions recover before clicks do, so falling impressions in the second week are the signal to act on. ## What it costs A crawled page costs 1 credit, so the two audits cost the pages they crawl. A rank check at the default depth costs 40 credits per keyword per device, and Search Console reads cost nothing. The audits count toward the plan's monthly audits: 60 on Pro. --- # Choosing which keywords to track > Which saved keywords deserve a scheduled rank check, and what the schedule, devices and depth each do to the monthly credit bill. Source: https://netweft.com/blog/choosing-what-to-track Updated: 2026-10-15 **Track the keywords whose movement would change what you do next, and save the rest. At the default depth a rank check is 40 credits per keyword per device, so 100 keywords checked weekly on both devices cost about 32,000 credits a month.** A Pro project can save 1,000 keywords and track 250 of them. The two numbers differ on purpose. A saved keyword is research: its volume, cost per click and difficulty are stored once and stay readable. A tracked keyword is a standing order: on every scheduled run, netweft buys the search results for it and writes down where the domain sat. So the question is not "which keywords matter". Most saved keywords matter a little. The question is which ones are worth paying to watch. ## What a tracked keyword costs The data vendor bills search results one page of 10 at a time, so a [rank check](/features/rank-tracking) costs 20 credits per page, per keyword, per device. A new tracker reads the top 20 results, two pages, which is 40 credits per keyword per device. It checks desktop and mobile unless you choose otherwise. The schedule multiplies that. A tracker runs daily, weekly, monthly or only when you press the button, and weekly is the default. For 100 keywords at the default depth, in credits a month: | 100 keywords | One device | Both devices | | --- | --- | --- | | Monthly | 4,000 | 8,000 | | Weekly (about 4 runs) | 16,000 | 32,000 | | Daily (about 30 runs) | 120,000 | 240,000 | Pro grants 125,000 credits a month. Daily on one device spends most of that on 100 keywords alone, which is why daily is a setting for twenty keywords rather than a hundred. Before a run, the dashboard and the MCP tool `estimate_rank_check_cost` both say what it will cost: pages times keywords times devices, priced from the [rate card](/pricing). Nothing is bought to produce the estimate. ## The test for a tracked keyword Ask what you would do if it moved five places. If the answer is "nothing", it belongs in the saved list. The keywords that pass are usually these: - **The page's job.** Each important page exists to rank for one or two terms. Track those, not every variant of them. - **Money terms.** A [cost per click](/glossary/cost-per-click) above the site's average is a market telling you what a visit is worth. - **Terms you are about to work on.** Track them before the change ships, so there is a baseline from before. A history that starts after the fix cannot show the fix. - **A few you do not rank for yet.** A keyword that reads "not ranking" every week is still data, and the week it stops reading that is worth knowing. What usually fails the test: near-duplicates of a term already tracked, [long-tail](/glossary/long-tail-keyword) variants with a handful of searches, and brand terms you already rank first for. ## Desktop, mobile, or both Both devices doubles the cost and is worth it when the two results differ: local intent, shopping results, anything where the mobile page is laid out differently. For most informational content, one device answers the question for half the price. The setting is per tracker, so a site can watch its money terms on both and its content on one. ## Depth Depth is how far down the results a check reads before it calls a keyword unranked: 10, 20, 50 or 100. Each extra 10 results is another page, so a depth of 100 costs five times the default of 20. Read deep only for keywords you expect to find on pages three to ten; for the rest, a keyword below the depth reads as "not ranking", never as zero and never as a gap, because zero is a position and a gap would mean the check did not run. See [why the record stores snapshots](/blog/snapshots-not-recomputation). ## When the list should change Rotate the tracked list when the work moves. A keyword you stopped working on six months ago keeps its history when you stop tracking it; the snapshots are already stored and reading them costs nothing. Swap it for the term you are starting on now, and the credits follow the work rather than the past. --- # Diagnosing a ranking drop before you change anything > When a tracked keyword falls, the stored history, the ranking URL, Search Console and one audit usually name the cause. The order to check them in. Source: https://netweft.com/blog/diagnosing-a-ranking-drop Updated: 2026-10-15 **Confirm the drop is real in the keyword's stored history, check whether the ranking URL changed, compare Search Console clicks and impressions for the same window, then audit the affected page. Change nothing until one of those names a cause.** A drop is a symptom with four common causes: the measurement moved, a different page of yours took the slot, the page broke, or competitors got better. Each leaves a different trace, and checking them in order stops a fix being aimed at the wrong one. ## 1. Confirm the drop is real Open the tracker and choose **History** on the keyword to see every stored position. One check is one observation: - A keyword that moved from 6 to 9 and back over three checks is normal movement. Wait for the next check. - A keyword that sat at 4 for two months and has read 15 for the last three checks has dropped. - A keyword that reads **not ranking** may have fallen past the tracker's depth rather than out of the index. At the default depth of 20, position 25 reads as not ranking. Look it up once on [Keyword research](/docs/keyword-research) with **Who ranks** at a depth of 100 before treating it as gone. The **Position matrix** shows whether one keyword moved or a whole group did. A group moving on the same check points at the site or at Google; one keyword alone points at its page. ## 2. Check whether the ranking URL changed Each stored position carries the URL that held it. Ask the [assistant](/docs/project-assistant) for the keyword's ranking URL at each check, or read `get_keyword_rank_history` over [MCP](/docs/mcp-server). If the URL changed when the position dropped, two of your pages are competing for the term and Google swapped them. The fix is to make one page the clear answer: merge them, or point one at the other with a canonical or a redirect. ## 3. Compare Search Console for the same window On [Search performance](/docs/search-performance), filter queries by the keyword and compare the last 7 days with the 28- or 90-day window, which still holds the weeks before the drop: | What moved | Likely cause | | --- | --- | | Position down, impressions steady | competitors improved, or the result page gained features | | Impressions down sharply, position steady | fewer people search for it; check the keyword's monthly volume | | Clicks down, position and impressions steady | the title or snippet stopped earning the click | | Everything down across many queries | a site-wide problem; go to step 4 for the whole site | Search Console reads cost no credits. ## 4. Audit the page, then the site Run a [site audit](/docs/site-audit) with the dropped page as the **Start URL** and a small page count. The issues that explain sudden drops are the critical and warning ones: **Page is set to noindex**, **Server error**, **Page returns an error**, **Redirect chain**, **Conflicting canonical** and **Duplicate page content**. A crawled page costs 1 credit, so a 50-page check of one section costs 50. If many pages dropped at once, crawl the whole site and look for the same issue across one URL shape; see [auditing by template](/blog/auditing-by-template). ## 5. Write down what you found Record the cause and the fix in the project's research log under [context](/docs/project-context). The next person, or the assistant, reads it before suggesting the same investigation again, and the tracker's history after the fix shows whether it worked. --- # Measuring and earning mentions in AI answers > How to read a domain's AI visibility on Google's AI answers and ChatGPT, compare it with competitors, and decide which pages to improve so assistants cite them. Source: https://netweft.com/blog/earning-mentions-in-ai-answers Updated: 2026-10-15 **Record your competitors, check AI visibility once per assistant, read Mentions and Share of voice against them, then improve the pages assistants already cite and write the pages your strongest competitors have and you lack. Check again about once a month, when the dataset is rebuilt.** AI answers on Google and ChatGPT name brands and cite pages. A domain that is named in those answers gets a visit, or at least a mention, from questions where the ten blue links are never read. [AI visibility](/docs/ai-visibility) measures that, one assistant at a time. ## 1. Record the competitors first The comparison reads the competitors in the project's [context](/docs/project-context), up to nine of them. Without them the check reports only your own figures and share of voice has nothing to compare against. Record the competitors you lose deals to, not only the largest ones. ## 2. Run one check per assistant On **AI visibility**, choose **Google AI answers** and **Check AI visibility**, then do the same for **ChatGPT**. Each check costs 2,150 credits, and the same check within 24 hours answers from a stored copy at no cost. ## 3. Read the figures | Figure | What it tells you | | --- | --- | | Mentions | how many AI answers in the dataset name your domain | | AI search volume | how often the questions behind those answers are asked | | Share of voice | your mentions against each competitor's | | Cited sources | which of your pages the assistant cites, and how often | A competitor with twice your mentions on Google AI answers and level with you on ChatGPT has a Google problem you do not; treat the assistants separately. ## 4. Improve what is already cited **Cited sources** is the shortest list to act on. Those pages already earn citations, so they are the pages an assistant trusts on the topic: - Keep them current. A cited page with an outdated figure is a citation that can turn against you. - Make the answer easy to lift: a direct one-paragraph answer near the top, then the detail. - Link from them to the pages you want cited next. ## 5. Close the gaps competitors hold Where a competitor's share of voice is well above yours, look for the page they have and you lack: a comparison, a definition, a pricing explanation. Use [Keyword research](/docs/keyword-research) on the topic to see how often it is searched, then write the page in the [topic cluster](/blog/planning-a-topic-cluster) it belongs to. ## 6. Check monthly, not daily The data vendor rebuilds its AI answer dataset about once a month, so a check every few days returns the same figures. Run both checks once a month and record what changed in the project's research log, next to what you published that month. --- # Finding keyword gaps against a competitor > A keyword gap is a term a competitor ranks for and you do not. How to list them from two domain lookups, keep the ones worth a page, and track them. Source: https://netweft.com/blog/finding-keyword-gaps-against-a-competitor Updated: 2026-10-15 **List the keywords a competitor ranks for, remove the ones your own domain already ranks for, and keep the rest that match a page you could write. In netweft that is two Ranking keywords lookups on Domain overview, a save, a tag, and a tracker on the survivors.** A keyword gap is a search term a competitor ranks for and your domain does not. It is the cheapest research there is, because somebody else has already proved the term brings traffic to a site like yours. This playbook finds them with two lookups on **Domain overview**, sorts them with tags on **Saved keywords**, and watches them with a rank tracker. ## 1. Pick one competitor, not five Choose the competitor whose pages answer the same questions as yours, not the biggest name in the market. A marketplace that outranks everybody tells you little about what a single product site can win. Record it under **Competitors** in the project's [context](/docs/project-context) so the assistant and [AI visibility](/docs/ai-visibility) compare against it too. ## 2. List what the competitor ranks for On **Domain overview**, look up the competitor and open **Ranking keywords**. Each row is a keyword, its position, its search volume, its estimated traffic and the URL that ranks. A page of 200 rows holds up to 360 credits and settles for less if fewer rows come back. Sort by **Traffic**. The keywords at the top are the ones sending the competitor visits today, which is a better guide than volume alone: a high-volume term at position 40 sends nothing. ## 3. Remove what you already rank for Look up your own domain the same way. Any keyword on both lists is not a gap; it is a position fight, and the [rank tracking](/docs/rank-tracking) history for it matters more than another lookup. What is left falls into three groups: | Group | What it means | What to do | | --- | --- | --- | | The competitor ranks in the top 10, you nowhere | a page you do not have | write it, or extend the closest page you have | | The competitor ranks 11 to 30, you nowhere | a term nobody owns yet | cheapest to win; write it first | | Branded or navigational for the competitor | people looking for them | skip it | ## 4. Expand the gaps worth a page On **Keyword ideas** in the same lookup, or in [Keyword research](/docs/keyword-research) from one of the gap terms as a seed, collect the variants a single page would answer. One page usually ranks for a cluster of close terms, so plan pages, not keywords. Check **Difficulty** before committing. A gap with difficulty above the difficulty of terms you already rank for is a gap for later. ## 5. Save, tag and track Save the survivors and tag them, for example `gap: competitor-name`, so the list stays separable from everything else in **Saved keywords**. Then add the ones you are about to write for to a tracker, before the page ships, so the history starts at "not ranking" and shows the climb. A check at the default depth costs 40 credits per keyword per device; see [choosing which keywords to track](/blog/choosing-what-to-track) for what a schedule adds up to. ## What it costs Two **Ranking keywords** pages of 200 rows hold at most 360 credits each. The same lookup repeated within 24 hours answers from a stored copy at no cost, so going back to re-sort is free. Saving and tagging cost nothing. --- # GA4 beside Search Console, per project > Search Console says what Google showed and what was clicked; GA4 says what happened next. What netweft reads from each, with which scopes, at what cost. Source: https://netweft.com/blog/ga4-beside-search-console Updated: 2026-10-08 **Search Console reports what happened on Google: impressions, clicks, click-through rate and position, by query and page. GA4 reports what happened next: sessions, active users, engagement rate and key events, by channel, device and landing page. netweft reads both read-only, per project, for no credits.** A project in netweft can connect two Google properties: a Search Console site and a GA4 property. They are often treated as one integration. They answer different questions, and the useful reading is the two side by side. ## Search Console: before the click Search Console is Google's own account of the results page. For a date range, netweft reads the totals, the top queries and the top pages, each with impressions, clicks, [click-through rate](/glossary/click-through-rate) and average position, and it can compare the range with the one before it. That makes it the record of demand and visibility: which queries the site appeared for, how often, and how often someone chose it. Its average position is not the same thing as a rank check. It is an average over every impression, across devices and personalisation, reported by Google. A [stored rank observation](/blog/snapshots-not-recomputation) is one result page, fetched at a time, in one market. Both are true. They are different measurements, and the gap between them is often the interesting part. ## GA4: after the click GA4 starts where Search Console stops. netweft reads four figures from it: sessions, active users, engagement rate and key events. Each comes broken down one of three ways: by channel, by device, or by landing page. The landing-page breakdown is the one to pair with Search Console. A page that gains clicks in Search Console and shows the same sessions with a falling engagement rate in GA4 is ranking for something it does not answer. ## Two connections, two steps Each project chooses its own Search Console site and its own GA4 property, because a workspace usually holds several sites. Granting Google access is a separate step from choosing the property, for the reasons in [why connecting Search Console is two steps](/blog/search-console-two-steps). The access netweft asks for is read-only: `webmasters.readonly` for Search Console and `analytics.readonly` for GA4. It is requested when you connect the integration, not at sign-in, and netweft never writes to a Google account. ## What it costs Nothing in credits. Neither report appears on the [rate card](/pricing), because Google does not invoice for them and the credit only exists to pass through what a vendor charges. Reading them does need an active subscription, the same as every other screen that fetches fresh data. ## A reading routine Once a month, for each important page: 1. Search Console: did impressions for its main query move, and did the average position move with them? 2. The rank record: does the weekly observation agree with that movement? 3. GA4: did sessions on that landing page follow, and did engagement hold? When all three move together, the change is real. When only one moves, that one is the place to look. --- # Planning a topic cluster from one seed keyword > Turn one seed into a hub page and the spoke pages under it: research the ideas, group them with tags, record the pages' roles, and audit the links between them. Source: https://netweft.com/blog/planning-a-topic-cluster Updated: 2026-10-15 **Research a seed, group the ideas into one broad hub term and the narrower questions under it with tags, give each planned page one group, record the pages as hub and spoke key pages in project context, and audit the cluster for orphan pages once it is live.** A topic cluster is one broad page, the hub, and the narrower pages that each answer one part of its topic, the spokes, all linked to each other. It gives a site one clear answer per question and a path between them, which is easier to rank and easier to read than many pages that overlap. ## 1. Research the seed In [Keyword research](/docs/keyword-research), enter the topic as a seed, such as `email deliverability`, and fetch 200 ideas. One lookup holds up to 360 credits whatever the count, so the largest list costs no more than the smallest. Sort by **Volume** and read the **Intent** column. Informational ideas become spokes; commercial and transactional ones belong on product or comparison pages, not in the cluster. ## 2. Group the ideas into pages Most ideas are variants of a few questions. Group them so that each group is one page: | Group | Example ideas | Page | | --- | --- | --- | | The broad term | email deliverability, what is email deliverability | hub | | One sub-question | spf record, how to set up spf | spoke | | Another sub-question | dkim vs dmarc, dmarc policy | spoke | Save the ideas you keep and tag each one with its page, for example `cluster: deliverability / spf`. Tags hold up to 60 characters, and the tag filter on [Saved keywords](/docs/saved-keywords-and-tags) then shows one page's keywords at a time. Check **Difficulty** per group. Write the easiest spokes first: they can rank while the hub is still new, and their links help the hub. ## 3. Record the pages and their roles In the project's [context](/docs/project-context), add each page under **Key pages** with its role: `hub` for the broad page, `spoke` for the others, and the topic of its tag. The [assistant](/docs/project-assistant) and any agent connected over MCP read this list, so a question such as "which spoke pages have critical issues in the last audit?" is answered against the plan. ## 4. Link and audit Every spoke links to the hub, and the hub links to every spoke. Once the pages are live, run a [site audit](/docs/site-audit) from the hub's URL: - **Orphan page** means a spoke nothing links to. - **Page links nowhere** means a page with no links to the rest of the site, so it passes nothing on to the hub. - **Duplicate title** and **Duplicate page content** mean two spokes answer the same question; merge them. ## 5. Track one keyword per page Add each page's main keyword to a rank tracker. One keyword per page is enough to see the cluster move; the rest of the group follows it. A check at the default depth costs 40 credits per keyword per device. --- # Reading an SEO workspace from an agent > netweft exposes an MCP server and an OpenAPI document, so an agent can read audits, keywords, rankings and project context, and reading stored data is free. Source: https://netweft.com/blog/reading-a-workspace-from-an-agent Updated: 2026-03-03 **netweft exposes MCP at POST /mcp under an API key, alongside an OpenAPI 3.1 document for the whole HTTP API. An agent reads a workspace's stored audits, keywords, rankings and project overview, and reading costs no credits because the credits were spent when the observation was made.** Most SEO tools are built for a person with a browser. The data underneath them is perfectly readable by something else, and the something else is increasingly the thing asking. ## Two surfaces, one product netweft publishes both. The HTTP API is described by an OpenAPI 3.1 document at `/openapi.json`. Everything the dashboard does goes through it, so a generated client is a real client rather than a partial one. The MCP server sits at `POST /mcp`, authenticated by API key. It exposes a workspace's audits, keywords, rankings and project overview as tools an agent can call directly, without you writing the glue. Neither is a side project bolted on after launch. The API is what the dashboard talks to; MCP is the same data under a protocol an agent already speaks. ## Reading is free, because looking was not The credit model makes this cleaner than it usually is. When netweft [checks a keyword's position](/features/rank-tracking), it pays a vendor for a [SERP](/glossary/serp) fetch and charges the workspace for it. That is the moment money changes hands. The observation is then stored. Reading that stored observation later — from the dashboard, from the API, or from an agent — costs nothing. There is no second invoice, so there is no reason to meter the read. An agent can pull a project's entire ranking history every hour and the balance does not move — which works only because that history is [stored rather than recomputed](/blog/snapshots-not-recomputation). The corollary matters too: an agent *cannot* run up a bill by reading. The operations that spend credits are the ones that go to a vendor, and they are the same operations, at the same prices, whichever surface asks for them. ## What the assistant is allowed to say netweft also ships its own AI: a per-project chat and an onboarding strategist. Both are restricted to figures read back through tools. That constraint is not a disclaimer, it is an implementation. The model cannot answer "what is my average position for this cluster" from its own weights, because the number is not in its weights — it has to call a tool, and the tool returns what is stored. If the tool has nothing, the answer says so. An SEO assistant that invents a plausible number is worse than no assistant, because a plausible number is exactly the kind of thing nobody checks. ## A practical shape The pattern that works, in our experience of building it: - Give the agent an API key scoped to one workspace. - Let it read rankings, audits and the project brief. These are cheap, stored, and safe to poll. - Keep the operations that spend money — a fresh SERP fetch, a new [crawl](/features/site-audit), a [backlink pull](/features/backlinks) — behind an explicit decision, whether that decision is a human pressing something or an agent with a budget you set. The [credit ledger](/pricing) is what makes the second half tractable. Every spend has a line, a reservation and a settlement, so an agent's behaviour is auditable in the same units as everything else. --- # Reading a site audit by severity > netweft sorts every audit finding as critical, warning or info. What sits in each band, the thresholds behind borderline ones, and the order to fix them. Source: https://netweft.com/blog/reading-an-audit-by-severity Updated: 2026-10-15 **Work critical first: server errors, broken internal links, missing titles and pages the crawler was blocked from. Warnings hold most of the ranking work, from duplicate titles to thin content and orphan pages. Info findings are often deliberate. A 403 or 429 means the crawl was refused, not that a page is broken.** An audit that returns four hundred findings of equal weight is a backlog nobody starts. netweft gives every finding one of three severities, so the list has a top. There are 25 kinds of finding: 4 critical, 12 warnings and 9 info. ## Critical: fix this week These stop pages being crawled, indexed or reached at all. - **Server error.** The page returned a 5xx. Search engines that keep seeing these crawl the site less. - **Broken internal link.** A link on your own site points at a URL that errors. It wastes [crawl budget](/glossary/crawl-budget) and strands visitors. - **Missing title tag.** The strongest on-page relevance signal is absent. - **Crawler was blocked.** The site answered with a bot challenge or an access denial instead of the page. That last one deserves a note. When the site answers 401, 403, 429 or 503, netweft reports that the crawl was refused rather than counting it as a page fault, because those codes are about the crawler, not about your SEO. The fix is to let the `netweft-audit` user agent through your bot protection and run the audit again. If Google meets the same wall, though, the finding is real. ## Warning: this is where the ranking work is Twelve kinds, and most audits are mostly warnings: - duplicate titles, duplicate meta descriptions and duplicate content - a missing h1 or a missing meta description - [conflicting canonicals](/glossary/canonical-url): a page that is indexable while its canonical points elsewhere - pages that return a 4xx, redirect chains of more than one hop - orphan pages nothing links to, images without alt text - thin content, under 200 words of visible text - slow responses, over 1,500 milliseconds before the server answers Duplicates usually come in groups, and a group is usually one template. Before fixing forty pages, read [auditing by template](/blog/auditing-by-template). ## Info: read, then decide Nine kinds that are often deliberate: - titles under 30 or over 60 characters, meta descriptions under 70 or over 160 - more than one h1, heading levels that skip a step - pages more than four clicks from the home page - pages that link nowhere - pages set to noindex A noindex page is the clearest example. It is fine if somebody meant it and a silent loss of traffic if nobody did. The audit cannot know which, so it tells you and lets you decide. ## Every finding says how to fix it Each finding carries an explanation and a fix in plain words, from the same registry the API returns, so the dashboard, an export and an agent reading `list_audit_issues` over [MCP](/blog/an-agents-first-calls) all describe it identically. ## The crawl's manners The crawler identifies itself as `netweft-audit`, respects [robots.txt](/glossary/robots-txt), and costs 1 credit a page. A Pro audit crawls up to 1,000 pages and Pro runs 60 audits a month; Agency runs 300 audits of up to 5,000 pages. Running the audit after every significant deploy is an affordable habit, which is the point of making it cheap. --- # Why netweft's cache and rate limiter fail open > If the cache cannot answer, every lookup misses; if the limiter cannot count, every request is allowed. That degraded mode was decided, not discovered. Source: https://netweft.com/blog/redis-is-optional Updated: 2026-10-11 **netweft's cache and rate limiter fail open: a cache that cannot answer is a miss, and a limiter that cannot count lets the request through, so the product keeps working, more slowly and more permissively. Choosing that up front is what stops a performance dependency becoming an availability one.** The cache and the rate limiter in netweft do two jobs: the cache keeps provider responses so a repeated lookup is not bought twice, and the limiter counts how fast a workspace is calling. Neither of them is the product. Both of them are optimisations of it. So the question worth answering early is not *what happens when they are fast enough* but *what happens when they are not there at all* — and the answer has to be decided rather than discovered. This post first described Redis, which did both jobs when it was written. On 2026-10-10 netweft moved onto Cloudflare: the cache is now Workers KV and the limits are Workers Rate Limiting. The decision below did not change, which is the point of having made it about the behaviour rather than the vendor. ## The decision **Every cache misses.** A cache that cannot be read is a cache miss, and a cache miss is a slower correct answer. The provider gets called, the credits get spent, the response gets stored where it can be. Nothing is wrong; it is more expensive and slower, which is exactly what a missing cache should cost. **Every rate limit allows.** This is the one people flinch at. The alternative is that a limiter outage refuses every request in the product, which converts a performance dependency into an availability dependency — a counter that cannot count taking down the whole API is a spectacularly bad trade. The exposure is bounded by something more fundamental anyway: nothing in netweft can spend money it does not have. Credits are [reserved before a call goes out](/blog/reserve-then-settle), and a workspace with no credits is refused whether or not a rate limiter is available to have an opinion. The rate limit protects against *rapid* spending of credits that exist. It is not the thing standing between a workspace and an unlimited bill. ## Why writing it down matters more than the choice Most systems have a degraded mode. Very few have a *stated* one, which is why outages are surprising — the behaviour under partial failure was never chosen, so it is whatever falls out of the code paths nobody read. Stating it has a second effect. Once "no cache" is a supported configuration rather than a catastrophe, it becomes one you can test in: the API's own suite runs with no cache and a limiter that allows everything, the same way [the mock data provider](/blog/the-provider-sits-behind-a-port) makes a working netweft without a vendor account. A dependency you can switch off is a dependency you understand. --- # Refreshing pages that rank just off page one > Queries at positions 8 to 20 with steady impressions are the cheapest traffic to win. How to find them in Search Console and decide which page to refresh. Source: https://netweft.com/blog/refreshing-pages-in-striking-distance Updated: 2026-10-15 **Sort Search Console queries by impressions, keep those with an average position between 8 and 20, group them by the page that ranks, and refresh the page that collects the most impressions first. Track the queries before the change ships so the result is measurable.** A query at position 12 with thousands of impressions is a page Google already considers relevant and nearly good enough. Moving it onto page one is usually a refresh of an existing page rather than a new one, which makes these queries the cheapest traffic a site can win. The range people call striking distance is roughly positions 8 to 20. ## 1. Find the queries On [Search performance](/docs/search-performance), open **Search Console**, choose the 90-day window so one bad week does not decide anything, and show **Search queries**. 1. Sort by **Impressions**, highest first. 2. Read down the **Position** column and keep the queries between 8 and 20. 3. Skip queries with a handful of impressions. A position that rests on ten impressions moves with every recrawl. **Export CSV** keeps the list for the next steps. Reading Search Console costs no credits. ## 2. Group them by page Switch the table to **Search pages** and filter by the URLs the queries point at, or work from the export. Several striking-distance queries usually land on the same page. That page is the one to refresh: one edit can move all of them. Rank pages by the impressions their striking-distance queries add up to, and start at the top. ## 3. Check what the page is missing For the first page on the list: - **Look at who ranks above it.** In [Keyword research](/docs/keyword-research), run the main query as a seed and choose **Who ranks** to see the live top 10. Each look costs 20 credits for the top 10 results. - **Compare the intent.** If the top results are comparisons and your page is a product page, a refresh will not close the gap; the page answers a different question. - **Run a small audit.** A [site audit](/docs/site-audit) with the page as the start URL flags a missing h1, a title that is too long or short, thin content and slow responses, at 1 credit a page. ## 4. Track before you change anything Paste the queries into a [rank tracker](/docs/rank-tracking), one per line, before the refresh ships. The tracker's history then starts at the old positions, and the next checks show whether the edit moved them. At the default depth of 20, a check costs 40 credits per keyword per device, which covers every position up to 20. ## 5. Refresh, then wait Update the page: answer what the top results answer, tighten the title around the main query, and link to it from related pages. Then wait two or three weekly checks before judging it. Record what you changed in the project's research log under [context](/docs/project-context), so the next refresh starts from what worked. --- # Reserve, then settle: pricing a call before you know its cost > An AI turn's cost is unknown until it ends; a SERP's charge arrives with the response. Reserving a ceiling and settling the real charge prices both up front. Source: https://netweft.com/blog/reserve-then-settle Updated: 2026-09-12 **netweft reserves credits at the rate card's price before a paid call goes out, then reads the real charge off the response and settles against it. The reservation is a ceiling, so a cheaper operation releases the difference, and a workspace that cannot cover it is refused before anything is bought.** Two operations in netweft have a cost that is genuinely not knowable in advance. A SERP lookup's real charge arrives with the vendor's response. An assistant turn's cost depends on how many tokens the model decides to produce. Both still have to be priced *before* they run, because the product's whole claim is that nothing spends without quoting. The mechanism that resolves that is reserve-then-settle, and it is worth writing down because the obvious alternatives are all worse. ## What it does 1. The rate card names a price for the operation. That price is a **ceiling**, chosen to be at or above the realistic worst case. 2. Before the call goes out, that many credits are reserved against the workspace. A workspace that cannot cover it is refused here — with `available` and `required` in the body — and nothing is bought. 3. The call runs. 4. The real cost is read off what came back and settled against the reservation. If it cost less, the difference is released. The consequence is the one that matters to a person using it: **you are never charged more than the number you were shown, and often less.** ## Why not bill afterwards Because then the refusal has nowhere to happen. A product that bills in arrears discovers that a workspace could not afford the call at the moment it sends the invoice, which is the moment it is too late for everybody. There is no version of "we already spent your money, please pay us" that is good for either party. Reserving first moves the failure to the only point where it is still cheap: in front of the button, before the vendor is reached. ## Why not quote the exact price Because for an assistant turn there isn't one. A ceiling that is occasionally generous is a ceiling that can be quoted honestly; an "exact" price that is really an average is a number that is wrong in both directions and admits to neither. The [assistant's per-turn charge](/pricing) is the clearest case. It is stated as a ceiling, on the rate card, in those words — and the settlement afterwards is what makes the ceiling fair rather than a rounding-up. ## What it costs us Reservations hold credits that the operation may not use. A workspace running close to its balance will occasionally be refused an operation it could in fact have afforded, because the ceiling was conservative and the real cost would have fit. That is a real cost and it is the right way round. The alternative failure — letting a call through that turns out to be unaffordable — is one where the money is already gone. --- # Why connecting Search Console is two steps, not one > Granting Google access is account-wide; choosing the property a project reads is per project. Merging the two into one button is why integrations feel flaky. Source: https://netweft.com/blog/search-console-two-steps Updated: 2026-02-24 **Google access is granted once per account, and the property a project reads is chosen per project. netweft keeps them as two separate steps because a single control that sometimes does one and sometimes both is unpredictable.** Every tool that reads Search Console has the same two facts to handle, and most of them try to hide one. ## The two facts **Access is account-wide.** When you complete Google's OAuth consent screen, you grant an application access to the properties your Google account can see. That grant belongs to your account, not to any particular project inside the tool. **Selection is per project.** A workspace with five projects points at five different domains, and each of them needs one property from the set the grant exposed — the same per-project boundary that [rank tracking](/features/rank-tracking) and the [site audit](/features/site-audit) work within. These are genuinely different operations. One goes to Google and comes back with a token. The other is a choice you make inside the product and can change without touching Google at all. ## Why one button breaks A single "Connect Search Console" control has to guess which of those two it is doing. The first time you press it, it does both: consent, then selection. The second time, on a different project, it does only the second — unless the grant has been revoked, or the scopes have changed, or you are signed into a different Google account, in which case it silently does both again. Sometimes it opens a popup. Sometimes it does not. Nothing about the label tells you which. That is the whole reason these flows feel unreliable. It is not the OAuth. It is a control whose behaviour depends on state you cannot see. ## How netweft does it Two steps, always, in the same order, with the same labels. You grant access once. netweft asks for read-only Search Console and GA4 scopes at the moment you connect the integration, not at sign-in — signing in only needs to know who you are, and asking for analytics scopes at that moment is how a login screen becomes something people close. Then, per project, you choose a property. That choice is a project setting. You can change it, and changing it does not go anywhere near Google. The result is that both screens say what they do, and neither of them depends on invisible state to decide what pressing the button means. ## Read-only, and asked for late Two smaller decisions follow from the same principle. The scopes are read-only. netweft reads Search Console and GA4; it never writes to either. Requesting write access "in case we need it later" is how an integration ends up refused by the person who actually administers the account. And the request happens at connection time. A first-run experience that asks for analytics access before you have created a project is asking you to trust something you have not evaluated yet. The grant is worth more when it is asked for by a product you have already decided to use. Nothing about the connection is metered, incidentally: Search Console and GA4 are your own data coming back from Google, so no credits are reserved for reading them. The [rate card](/pricing) covers the lookups netweft buys from a data vendor, which is a different set of operations entirely. --- # Why a rank tracker should store snapshots, not recompute them > A ranking history is a record of observations. Once a tracker recomputes it from today's index, last month's chart stops being evidence and becomes opinion. Source: https://netweft.com/blog/snapshots-not-recomputation Updated: 2026-02-10 **Store each rank check as an immutable snapshot — position, URL and the timestamp it was seen — rather than deriving history on read. A recomputed history can change without the SERP changing, which makes it useless as evidence.** There are two ways to build the chart [rank tracking](/glossary/rank-tracking) exists to draw — a keyword's position over time. You can store a row every time you look, or you can store the current state and derive the past from it. The first is more rows. The second is cheaper, tidier, and quietly wrong. ## What "recomputed" means in practice A tracker that derives history keeps one authoritative record per keyword and reconstructs earlier positions from whatever it has now — a cached [SERP](/glossary/serp), an index snapshot, a rolling aggregate. It looks the same on screen. The difference shows up on the day something upstream changes. Re-run the derivation after the vendor backfills a dataset, or after your own normalisation rules change, and last month's chart moves. Nobody edited anything. The SERP in March did not change. But the line that described March did. That is fatal for the one job the chart has. You look at a ranking history to answer *did the thing I did work*. If the history can move without the SERP moving, the chart cannot answer that question, and you cannot tell the two cases apart from inside the interface. ## What a snapshot is [netweft's rank tracking](/features/rank-tracking) writes a row every time it looks: - the keyword and the project it belongs to - the position that was seen, or the fact that nothing was - the URL that held the position - the moment the check ran Nothing in that row is derived. Nothing recalculates it later. A month-old row says what was seen a month ago, and if it disagrees with your memory, one of you is wrong in a way that can be investigated rather than argued about. The cost is rows, and rows are the cheapest thing in the system. A hundred tracked keywords checked daily is thirty-six thousand rows a year per project, which the database finds uninteresting. ## The missing week The design decision that follows from snapshots is what to do when a check comes back with nothing. There are three tempting answers and two of them are wrong. Writing a zero is wrong: zero is a position, and some interfaces genuinely use it, so a reader cannot tell a rank of zero from an absence of rank. Writing nothing is also wrong: a gap in the series is indistinguishable from a check that never ran, which is a different fact with a different fix. The right answer is that *not ranking* is a value. netweft stores it as a category and draws it as one. The line does not skip the week, and it does not dip to the bottom of the axis as though the domain were sitting at position 101. It says the domain was not in the results, which is what happened. The same row is what an agent reads back through the API, at no charge, because the credits were spent when the observation was taken rather than when it is read — see [reading an SEO workspace from an agent](/blog/reading-a-workspace-from-an-agent). ## What this buys you Three things, all of them boring, which is the point. A history you can quote. When you tell a client the page moved from 14 to 9 in February, that is a claim backed by two rows with timestamps, not by a reconstruction that might render differently next quarter. A diff you can trust. If a row changes, something changed in the world. There is no second explanation. An audit trail for your own tooling. When a normalisation bug ships, snapshots let you find the checks that ran while it was live. Derived history absorbs the bug into the past and never mentions it again. ## The trade you are actually making Snapshots cost storage and they make backfilling awkward: you cannot retroactively improve a measurement you have declared to be an observation. That is not a limitation to be engineered around. It is the property you wanted. A measurement you can improve after the fact is a measurement, and a measurement you cannot is a record. netweft chose the record. --- # Spending a trial's credits on one real domain > A trial runs on a few thousand credits, a tighter rate limit and no auto top-up. How to spend them so every screen shows your own domain. Source: https://netweft.com/blog/spending-a-trial-well Updated: 2026-10-15 **A trial gets 3,000 to 8,000 credits by plan, 10 paid requests a minute and no auto top-up. Spend them on one domain you know: an overview, its referring domains, metrics for your terms, one audit, and a tracker on twenty keywords and one device, run by hand.** A trial is a real plan with a smaller balance. Pro's trial is 3 days and runs on 3,000 credits, Studio's is 7 days on 5,000, and Agency's is 7 days on 8,000. Every trial is held to 10 paid requests a minute instead of 60 and cannot use auto top-up. The reasons are in [why netweft has no free tier](/blog/why-no-free-tier). This guide spends the smallest of them, Pro's 3,000. ## Pick one domain you already know The trial exists to answer one question: do the numbers match what you know? That only works on a domain you have opinions about. Your own site is best; a competitor you watch closely is next. A domain you have never looked at gives you numbers you cannot judge. ## A budget that fills every screen Each lookup below is held at its ceiling before it runs, and list lookups settle for less when the vendor returns fewer rows, so the real total comes in under this. | What | Credits, at most | | --- | --- | | Domain overview | 362 | | Referring domains | 312 | | Keyword ideas from one seed | 360 | | Metrics for 100 keywords | 240 | | One audit of 500 pages | 500 | | Rank check, 20 keywords, one device, default depth | 800 | | **Total** | **2,574** | On Pro's 3,000 that leaves at least 426 credits for whatever the first pass makes you curious about: another seed, or a second rank check a day later to see the record grow. ## The two settings that eat a trial **Devices.** A new rank tracker checks desktop and mobile unless told otherwise, and each device is a separate 40-credit check at the default depth. One check of 100 keywords on both devices is 8,000 credits, more than all of Pro's trial. Track twenty keywords on one device. **Schedule.** A tracker runs weekly by default. In a short trial the first scheduled run is the one that matters; set it to manual and press the button when the keyword list is final, so the credits buy the list you meant. The audit has a third: page speed. It is off unless you turn it on for an audit, and at 50 credits a page it is worth leaving off during a trial. The [crawl itself](/blog/what-a-crawl-costs) costs 1 credit a page. ## What to check while it runs - Does the domain overview look like the site you know? - Does the audit's first critical issue match something you suspected? - Does the rank check agree with what Search Console says about the same terms? (Connecting Google costs no credits; see [GA4 beside Search Console](/blog/ga4-beside-search-console).) If the answers are yes, the plan's allowance is the same product with a larger balance. If they are no, you found out for a trial's credits. ## If the trial runs out A workspace out of credits is refused before anything is bought, with the shortfall named. Nothing is charged, nothing is half done, and everything already stored stays readable. An owner or admin can also end the trial early from **Billing** to start the paid plan and its full monthly credits. --- # Why the SEO data provider sits behind a port > netweft's real data comes from DataForSEO, but nothing above the port knows it. The mock implementation is not a test convenience; it makes the product run. Source: https://netweft.com/blog/the-provider-sits-behind-a-port Updated: 2026-10-11 **netweft's SEO data provider is an interface with two implementations: DataForSEO for real data, and a mock serving deterministic fixtures with no credentials. Nothing above the port knows which answered, so the product runs offline, every test is deterministic, and credit accounting is identical on both paths.** There is exactly one module in netweft that knows DataForSEO exists. Everything else — the routes, the worker, the credit accounting, the dashboard — talks to an interface with a handful of methods on it. That is not architectural decoration. It buys four specific things. ## The product runs with no vendor account The mock implementation serves deterministic fixtures and needs no credentials. `bun run dev` produces a working netweft: projects, keyword research, rank checks, audits, the dashboard, the assistant. Nobody needs a DataForSEO key to run the thing, review a change, or reproduce a bug. A product that requires a paid third-party account to start is a product with a contributor ceiling, and more immediately, one where every developer's afternoon costs money. ## Every test is deterministic Fixtures do not rate limit, do not return a different SERP on Tuesday, and do not go down. A test suite that talks to a real SERP provider is a test suite that fails for reasons unrelated to the change under test, and the usual response — retries, tolerances, skipped assertions — erodes the suite until it stops catching anything. ## The credit path is the same on both sides This is the subtle one, and the reason the port sits where it does rather than one layer lower. Reservation and settlement happen *above* the port. A mock call reserves credits at the rate card price and settles against a fixture's reported cost exactly as a real call reserves and settles against the vendor's. So the accounting is exercised on every run in development, not only in production against real money. The path that decides whether a workspace is refused is the path everybody runs all day. ## Switching providers is a module, not a migration netweft is not planning to leave DataForSEO. But a provider that changes its pricing, its coverage or its terms is a thing that happens to products, and the version of that event where one module is rewritten is survivable in a way that the version where the vendor's response shape is spread through forty route handlers is not. The same reasoning applies one shelf down: [the cache and the rate limiter fail open](/blog/redis-is-optional). Without them every lookup misses and every request is allowed, which is the intended degraded behaviour rather than a failure mode. A dependency that can be absent is a dependency that cannot take the product down. --- # Top-ups and auto top-up: when to turn it on > Top-up credits never expire and are spent after plan credits. Auto top-up is on by default with two daily caps. What each setting does, and when to change it. Source: https://netweft.com/blog/top-ups-and-auto-top-up Updated: 2026-10-15 **A dollar buys 2,500 top-up credits, from $10 a purchase. They never expire and are spent after plan credits. Auto top-up starts on: under 10% of the allowance it buys $20 more, at most 3 times and $60 a day.** A workspace holds credits in two pools. Plan credits arrive with each billing period and expire when it ends. Top-up credits are bought with money and never expire. Plan credits are always spent first, so a top-up is only touched once the period's allowance has run out. ## The price of a top-up A dollar buys 2,500 credits. The smallest purchase is $10; the dialog offers $10, $20, $50 and $100, and any amount up to $10,000 can be typed in. Per credit, no plan is dearer than that. Pro's 125,000 credits would cost the same as the plan if bought as top-ups, and the plan also buys the platform: the projects, tracking, audits and assistant that credits alone do not. From Studio up, the plan is the cheaper way to buy the credits themselves. A workspace that tops up heavily every month is on the wrong plan; the [pricing sheet](/pricing) shows where the line falls. ## Auto top-up, as it starts When a workspace subscribes, auto top-up is on, with these settings: - **Trigger:** the balance falls below 10% of the plan's monthly credits. The trigger is a fraction rather than a fixed count so that it means the same thing on every plan. - **Reload:** $20. - **At most 3 reloads in any 24 hours.** - **At most $60 in any 24 hours.** The two caps are there because auto top-up charges a saved card with nobody watching. Without them, a runaway script or a leaked key could drain the card; with them, the worst day is bounded. The defaults are set so that both bite at the same moment. Reaching a cap pauses auto top-up and emails the workspace owner. If a charge is declined, netweft tries once more five minutes later. If that fails too, auto top-up stops and stays stopped. Retrying a dead card again and again looks like fraud to card networks, and a card that has expired needs a person, not another attempt. ## When to leave it on Leave it on when work is scheduled. A rank tracker set up weeks ago runs whether or not anyone is looking, and a workspace that runs out of credits is [refused before anything is bought](/blog/reserve-then-settle). The scheduled check pauses until credits arrive, and the positions it records are the ones seen when it resumes, not on the day it was due. A late observation is a gap in the record that nothing can fill afterwards. ## When to turn it off, or down - **You are testing something expensive** and would rather it stopped at the edge of the allowance than continued. - **The reload is too large for the month you have.** Lower the amount; the minimum is the same $10 as a manual top-up. - **The trigger is too late for your schedule.** If a large scheduled run can spend more than 10% of the allowance in one go, raise the threshold so the reload lands before the run rather than after it. Every one of these values is editable per workspace. The defaults are where a workspace starts, not a recommendation for every workspace. ## Trials A trial workspace cannot use auto top-up at all. A trial runs on its own [trial credits](/blog/spending-a-trial-well), and the point of a trial is to see the product on a real domain, not to discover a charge. --- # What a 500-page crawl costs, and why Lighthouse is opt-in > A crawled page costs a credit; a performance check costs 50. Why the check runs on a sample of ten pages, so audits fit a month. Source: https://netweft.com/blog/what-a-crawl-costs Updated: 2026-10-17 **A crawled page costs one credit, so a 500-page crawl is 500 credits. A Lighthouse pass costs 50 credits a page, so netweft measures a sample, the start URL and one page per URL shape up to 10, adding at most 500 credits. It is opt-in per audit.** The [site audit](/features/site-audit) is the one part of netweft that does not buy its data. The crawler is ours, so a crawled page costs compute and bandwidth rather than a vendor call. That makes it cheap, and it makes one adjacent decision expensive. ## The two numbers A crawled page is one credit. Five hundred pages, five hundred credits — about five cents of infrastructure at the basis the credit is priced on. A performance check on a page — the [Core Web Vitals](/glossary/core-web-vitals) pass — is 50 credits. Same page, 50 times the cost, because that one is a vendor call. Measured on every page of a five-hundred-page crawl, the run would go from 500 credits to 25,500, 20% of the 125,000 a Pro workspace gets in a month. So netweft does not measure every page. It measures the start URL, then one page per URL shape it has not measured yet, up to 10. The most a performance pass can add to any audit is 500 credits. ## Why not just make it cheaper Because we would be lying about what it costs. The rate card is derived from the vendor rate card at a fixed basis; moving one line to make it look better would either move the margin or move the truth. Measuring fewer pages changes neither: each page measured still costs what the vendor charges. ## What to do instead The useful shape is not "audit everything, measure everything". It is: **Crawl wide.** The structural findings — broken links, missing [canonicals](/glossary/canonical-url), redirect chains, thin or duplicated titles — come from the crawl itself, at one credit a page. Run that across the whole site as often as you like, subject to your own [crawl budget](/glossary/crawl-budget) rather than ours. **Measure narrow.** Performance is a page-template problem far more often than a page problem, which is why the sample is one page per URL shape. Ten pages that represent your templates tell you almost everything a five-hundred-page sweep would, and the sample keeps the pass at 500 credits at most. The [template guide](/blog/auditing-by-template) shows how the sample is chosen. **Re-measure on change.** A performance check is worth spending after a deployment that touched the template, not on a schedule that touches nothing. ## Severity is the other half An audit that returns four hundred equal-weight findings is a backlog nobody starts. netweft classifies findings by severity so the list has a top, which is the difference between a report and a morning's work. The crawl respects [`robots.txt`](/glossary/robots-txt), which is worth saying plainly: netweft will not fetch what you have asked crawlers not to fetch, including on your own site. If a section is disallowed and you want it audited, the fix is in the robots file, not in a setting here. ## The general rule Where a check is cheap because we run it, run it broadly. Where a check is expensive because someone else runs it, run it where it changes a decision. The [rate card](/pricing) is published in full precisely so that this is a calculation you can do before the run rather than a number you find afterwards. The wider argument for pricing lookups this way is in [what an SEO data lookup actually costs](/blog/what-an-seo-lookup-costs). --- # What a scoped API key is actually protecting > Every tool on netweft's MCP surface reads stored rows, so narrowing a key removes no capability. It removes a subject, and the one that matters is billing. Source: https://netweft.com/blog/what-a-scoped-key-protects Updated: 2026-10-15 **Because every netweft MCP tool is read-only over rows already stored — none of them writes, crawls or spends a credit — a scope cannot withhold a capability, only a subject. The useful one is billing: it is how a key handed to an outside integration is stopped from reading the workspace's balance and plan.** When we added scopes to API keys, the first draft had scopes that mapped to verbs: read, write, admin. That draft was deleted, because it described a product netweft does not have. ## Every tool reads The [MCP surface](/mcp) exposes twenty-five tools across six scopes. Not one of them writes a row, starts a crawl, or spends a credit. They read what netweft has already stored: audits and their issues, saved keywords, rank trackers and their results, project context, the credit balance. That is a deliberate constraint rather than an accident of scheduling. An agent holding a key should not be able to move the workspace's balance, because the whole reason to hand an agent a key is that you are not watching what it does with it. A surface where the worst case is an expensive afternoon is a surface nobody sensible connects. So `write` had nothing to gate, and `admin` had nothing to describe. ## A scope withholds a subject What is left is the question of *what* a key may read, which turns out to be the question people actually have. The scopes are named after tool families rather than HTTP route segments — `rank_tracking`, not `rank-tracking` — because the tools are what a key holder sees. The one that earns its place is `billing`. A key given to a reporting script, a client's own dashboard, or somebody else's agent has no business reading what the workspace pays and what it has left. Withholding `billing` and granting the other five produces a key that can answer every question about the *work* and none about the *account*. ## Two details that took longer than the feature **A key with no scopes named gets all of them.** The alternative — defaulting to none — produces a key that silently does nothing and a support conversation about why. Defaulting to everything is the behaviour people expect from a key they did not narrow. **An unrecognised scope is dropped, not honoured.** A row written by a newer deploy can carry a scope this build has never heard of. Dropping it is the safe direction: the tool it would unlock does not exist here, so keeping the string could only widen a set that nothing can act on. The rest of what a key is — shown once, stored as a SHA-256 hash, compared in constant time, revoked rather than deleted — is on the [security page](/security). --- # What an SEO data lookup actually costs > Behind every keyword metric and rank check is a vendor invoice. What each call costs, why the unit matters more than the price, and how netweft meters it. Source: https://netweft.com/blog/what-an-seo-lookup-costs Updated: 2026-10-15 **Almost every number in an SEO tool is bought from a data vendor per call or per keyword. netweft prices one credit at $0.0001 of raw vendor cost, reserves credits before a call runs, and settles the reservation against what the vendor actually charged.** Nobody sells SEO data at cost, and nobody should. But almost nobody shows you the cost either, and that is a choice rather than a necessity. ## The unit is the interesting part The price of a lookup matters less than what it is a price *for*. Four different units show up in the same product, and confusing them is how metered billing goes wrong. **Per keyword.** [Keyword metrics](/features/keyword-research) — [search volume](/glossary/search-volume), [difficulty](/glossary/keyword-difficulty), [cost per click](/glossary/cost-per-click) — are billed per keyword plus a fixed fee per request, because that is how the vendor bills them: netweft charges 120 credits for the request and 1.2 a keyword. Predictable, and it scales with the thing you can see on screen. **Per results page.** A [rank check](/features/rank-tracking) buys search results ten at a time, and each page of ten is billed. Reading the top 100 is ten pages, so the depth a tracker reads is its price. **Per request.** Some endpoints charge for the call, not its contents. The Google Ads endpoints netweft falls back to for countries the Labs dataset does not cover are like this: one keyword and a thousand keywords cost the same. **Per page.** A [crawl](/features/site-audit) is billed per page fetched, which is the only unit that makes sense for work your own infrastructure does. Mix these up and you get the classic metered-billing failure: a per-unit reservation held against a per-request charge. Reserve one credit for a one-keyword refresh that will actually cost five hundred, and the difference comes out of somebody's margin — or worse, out of a customer who thought they had budget left. netweft's [rate card](/pricing) names the basis on every line for exactly this reason. ## Reserve, then settle The order of operations matters more than the number. A naive implementation runs the call, reads the invoice, and bills you. That works until a workspace is out of money, at which point you have spent real cash on behalf of someone who cannot pay for it. netweft reserves first. Before a paid call runs, the estimated cost is held against the workspace's balance. A workspace with no credits is refused before the money is spent rather than billed afterwards. When the call returns, the real cost is read off the vendor's response envelope and the reservation is settled against it — so you are charged what the vendor charged, and the estimate never becomes the price. For the AI operations the reservation is explicitly a ceiling: the most a chat turn can cost at the configured model caps. A turn that answers straight away settles for a fraction of it. A long one cannot exceed it. ## Why credits and not dollars One credit is $0.0001 of raw vendor cost. Ten thousand credits is exactly one dollar of vendor spend, which was the whole point of choosing that number: it makes every margin question legible without a calculator. Credits also separate two things that a dollar figure fuses together. What the data cost is one fact. What you paid for access is another. A plan grants credits *and* access, and a top-up buys credits alone: the same per credit as Pro, whose price also pays for the platform, and dearer than Studio and Agency, which is where the volume discount lives. ## The one to watch If you take one number from the rate card, take the performance check. A crawled page costs 1 credit. A Lighthouse pass on that same page — the [Core Web Vitals](/glossary/core-web-vitals) measurement — costs 50, because it is a vendor call. Run on every page of a five-hundred-page crawl it would cost many times the crawl, so netweft measures a sample instead: one page per URL shape, at most 10 pages an audit. That is why it is opt-in per audit rather than a default, and why the number is printed on the [pricing page](/pricing) rather than discovered in a ledger three days later. The arithmetic on a real five-hundred-page run is in [what a 500-page crawl costs](/blog/what-a-crawl-costs). A metered product that surprises you has failed at the only thing metering is for. --- # Volume, CPC, difficulty and intent: what each number is for > A saved keyword carries volume, CPC, competition, difficulty, intent and twelve months of history. What each answers, and the question none of them can. Source: https://netweft.com/blog/what-keyword-metrics-mean Updated: 2026-10-15 **Volume says how often a term is searched, the twelve-month history says when, cost per click says what a visit is worth to advertisers, difficulty estimates how hard the first page is to reach, and intent says what the searcher wants. None of them says whether your page can rank: that is what a rank check is for.** Every keyword netweft saves carries the same set of figures. They come from the data provider behind the [provider port](/blog/the-provider-sits-behind-a-port), cost 1.2 credits per keyword plus a fee per request to fetch, and are stored against the project and its market, so reading them again later costs nothing. Each figure answers one question well and gets misused for another. ## Search volume The average number of monthly searches for the term in the project's market. It answers "how many people could arrive". It does not answer "how many will": that depends on where you rank and how the results page is laid out, which is what the [click-through rate](/glossary/click-through-rate) describes. ## Twelve months of history The volume, month by month. This is the figure people skip and should not. A term that averages 1,000 searches can be 3,000 in November and 200 in May, and a page published in May for that term will look like it failed for six months. Read the shape before the average: flat, seasonal, rising or falling. ## Cost per click What advertisers pay for a click on the term. It is the closest thing the data has to a price on a visit. A high [cost per click](/glossary/cost-per-click) with modest volume is often worth more than a high-volume term nobody bids on, because somebody has already measured that those visits convert. ## Competition How contested the paid results are, from 0 to 1. It describes advertisers, not organic results, so read it beside cost per click rather than as a measure of how hard the term is to rank for. ## Keyword difficulty A 0 to 100 estimate of how hard the first page of organic results is to reach, computed by the data provider from the strength of the pages already there. It is a comparison tool: useful for ranking a list of candidates against each other, much less useful as an absolute verdict. See the [glossary entry](/glossary/keyword-difficulty) for what goes into it. ## Intent What the searcher is trying to do: learn something, find a particular site, compare options, or buy. [Search intent](/glossary/search-intent) decides what kind of page can rank at all. A product page will not rank for an informational query however strong it is, because it is the wrong answer. ## What no metric answers Whether your page can rank. Every figure above describes the term and the market, not your site. The only measurement of your site against the term is a [rank check](/blog/choosing-what-to-track), and its result is stored as an observation with a date on it. ## Two prices worth knowing Fetching metrics for a list of keywords costs 120 credits for the request plus 1.2 a keyword, so one refresh of the whole saved list is cheaper than many small ones. Asking for keyword ideas from a seed holds up to 360 credits per request and settles for less when fewer ideas come back. In the 49 countries the provider's keyword dataset does not reach, the lookup falls back to the Google Ads endpoints, which are priced per request: 900 credits whether you ask about one keyword or a thousand. Batch those requests. --- # Why netweft has no free tier > A free tier for a metered product gives vendor spend to accounts that will never pay. The arithmetic that rules it out, and what is offered instead. Source: https://netweft.com/blog/why-no-free-tier Updated: 2026-10-15 **Every netweft lookup costs real vendor money before anybody pays anything, so a free tier spends that money on accounts that will never convert. Instead there is a read-only demo, and a short trial with 3,000 to 8,000 credits by plan, a tighter rate limit and no auto top-up.** Most SEO tools can offer a free tier because the marginal cost of one more free account is close to zero: the index is already crawled, the pages are already stored, and showing them to one more person costs bandwidth. netweft does not have that shape. Every keyword metric, every SERP check, every backlink summary is a call to a provider that invoices for it, and the invoice arrives whether or not the account ever becomes a customer. ## The arithmetic One credit is $0.0001 of raw vendor cost. A rank check reads two pages of results at the default depth, 40 credits a keyword. A hundred tracked keywords checked once on one device is 4,000 credits of somebody else's money, spent on an account that has paid nothing. One check is not the problem. A thousand accounts doing that every day is thousands of dollars a month of pure loss, and a free tier that is useful enough to evaluate with is a free tier that is useful enough to farm. The two properties cannot be separated: the thing that makes a free tier convincing is exactly the thing that makes it expensive. The usual mitigation is to cripple the free tier until it costs nothing — a handful of lookups, most features disabled, a nag screen. That produces an account that cannot answer the question the visitor came with, which is worse than no account at all. It wastes their time and ours. ## What there is instead A [read-only demo](https://app.netweft.com/demo) of a workspace already in use, where every screen is filled and every lookup answers from sample data, so looking around costs nobody anything. Then a [trial](/pricing) on a real plan, with real behaviour: - 3,000 credits on Pro, up to 8,000 on Agency: enough to point it at a domain you already have opinions about and see whether the answers match them, as the [trial guide](/blog/spending-a-trial-well) budgets. - A tighter rate limit while the workspace is on trial, which is the honest defence against automation rather than a feature lock. - No auto top-up, so a trial cannot quietly become a bill. - Every other behaviour identical to the paid product, including [the price shown before every paid operation runs](/credits). Nothing is hidden behind the trial. The [rate card](/pricing) is public in full, so the cost of the work you are evaluating is knowable before you start rather than discovered afterwards. ## The part that is a real cost to us Saying "no free tier" loses visitors who would have converted. That is a straightforward price, and it is paid deliberately, because the alternative is either a free tier that loses money or a free tier that does not work. Both of those are worse trades, and only one of them is honest about it. --- # Changelog > What shipped and when, written the way the guides are: what changed and why it was the right shape. Dated by the day the work landed, newest first. Source: https://netweft.com/changelog Updated: 2026-10-24 What shipped and when, newest first. ## netweft-mcp on npm, and the newest MCP revision *2026-10-24* — Clients that only start local servers, such as Claude Desktop, now connect through netweft-mcp on npm, and the MCP server speaks the 2026-07-28 revision beside the handshake ones. The [MCP server](/docs/mcp-server) was always a remote one: a client that speaks HTTP pointed at `https://api.netweft.com/mcp` with an API key, and that was the whole setup. A client that only starts local programs, Claude Desktop among them, had no way in. It does now. `netweft-mcp` on npm is a small relay the client starts with `npx`: it takes each message the client writes, posts it to the server with your key, and hands the answer back. There is nothing to install by hand, and nothing in it but the relay. The server itself moved to the protocol's newest revision, `2026-07-28`, which drops the opening handshake and sends the version with every request. A client on an older revision still opens with `initialize` and is answered in its own version, so nothing that worked before stops working. Every tool now has a title and says it is read-only, and the server tells the agent how the tools fit together before its first call. Creating an API key now shows where it goes next: the endpoint, a Claude Code command and a config for the npm relay, filled in for your workspace, beside the key itself. The [docs page](/docs/mcp-server) has the setup for Claude Code, Claude Desktop, Cursor, VS Code, Windsurf, Codex CLI and Gemini CLI. ## One mark, and the pages that were missing *2026-09-11* — The netweft mark now generates every icon both deployments serve, sits on every share card, and the site gained comparisons, use cases, an API page, an MCP page, a credit calculator, a security page and this changelog. There is now one brand master, and everything else is generated from it: the favicons, the app icons, the maskable icon, the touch icon and the mark on every share card, in both the marketing site and the dashboard. Nothing has to be kept in step because there is nothing to keep in step. The site also gained the pages it was missing. [Comparisons](/compare) against four tools, written about the shape of each product rather than about its price. [Use cases](/use-cases) with the month priced line by line. An [API page](/api) with the whole error contract, an [MCP page](/mcp) listing every tool by scope, and an [integrations page](/integrations) that says what each connection is allowed to do. A [credits page](/credits) with a calculator that multiplies by the live rate card. A [security page](/security) whose second half is the list of things netweft does not have. And a [roadmap](/roadmap) with no dates on it, because a date would be a guess. ## This site became machine-readable *2026-09-08* — Every page is now served as plain markdown at the same path plus .md, indexed by /llms.txt, with the whole site as one document at /llms-full.txt and the assistant crawlers allowed by name. A model reading this site should not have to parse HTML to find the numbers on it. Every page is now served twice: once as a page, and once as the same document in plain markdown at the same path with `.md` appended. `/llms.txt` indexes all of them and `/llms-full.txt` is the whole site as one document. The assistant crawlers — GPTBot, ClaudeBot, PerplexityBot and the rest — are allowed by name in `robots.txt` rather than left to the wildcard: a product that sells visibility in search cannot credibly block the engines that are becoming search. The markdown twins are generated from the same modules the pages render, never transcribed from them, so a rate change reaches the machine-readable copy in the same commit. ## A rank tracker's settings moved onto its own screen *2026-09-03* — Schedule, devices and result depth are editable per tracker, and the cost of refreshing a metric is stated before the refresh spends anything. A tracker is a standing commitment to spend credits on a schedule, so its settings deserved a screen rather than a dialog. Schedule, devices and depth are all editable, and each change says what it does to the cost of a check before it is saved. The same pass put a price on every metric refresh in the product. A button that spends money and does not say so is the thing this product exists not to be. ## The credit wall and the rate-limit wall stopped looking alike *2026-09-02* — A 402 and a 429 now carry the numbers that explain them, are told apart in the interface, and a credit refusal offers the top-up that would clear it. Two very different failures used to read the same way: one means the workspace cannot afford the call, the other means it asked too quickly. The first is cleared by buying credits and the second by waiting, so presenting them identically sent people to the wrong fix. A 402 now arrives with `available` and `required`, and the interface offers the top-up that would cover the difference. A 429 arrives with `Retry-After`, and the interface says how long. Both are documented on the [API page](/api). ## An onboarding strategist that settles like everything else *2026-09-01* — A short survey becomes a strategy for the project, produced by a model that can only speak from figures read back through tools — and charged as a reserved-then-settled operation like every other paid call. The strategist reads what the workspace already knows about the project and answers with a plan. It is restricted to figures read back through tools, so it cannot state a number the product did not measure, and the turn reserves credits at a ceiling before it runs and settles against what the model actually used. That second part matters more than it sounds. An AI feature that bills in arrears is an AI feature whose cost is unknown until the invoice; one that reserves a ceiling is one that can be refused before it spends. ## Page speed on audits, opt-in and priced *2026-08-31* — A Lighthouse pass can be enabled per audit run. It costs thirty times what crawling the page costs, which is why it is a switch rather than a default. Crawling a page costs one credit, because the crawler is ours and the cost is compute. Measuring that page's performance costs thirty, because it is not. On a five-hundred-page audit that ratio is the difference between a routine run and a third of a month's allowance, so the option is presented with its price attached before the run starts rather than switched on by default and explained afterwards. The arithmetic is written up in [what a 500-page crawl costs](/blog/what-a-crawl-costs). ## Every refusal got a name *2026-08-30* — The routes that used to fail with a status and a sentence now fail with a stable code as well, so a client can branch on the reason rather than on the wording of an error message. A failing response now carries a human sentence in `error` and a stable machine code in `code`. The sentence is free to change; the code is a contract, and each one has exactly one HTTP status so a name never means two different things. Rank tracking, projects, keywords, Google and the dashboard all got their unnamed refusals named in the same pass. A code nobody can trigger is a promise the API does not keep, so a new one is only added when the path that emits it is. The whole contract is on the [API page](/api). ## The plans appear where the wall is, not in a menu *2026-08-29* — An unentitled workspace that tries to add a project is offered the plans in place, at the moment the limit is hit, instead of being sent to a pricing screen to work out which limit it was. There is no free tier, so a workspace with no subscription hits a wall the first time it tries to do anything. Sending that person to a pricing page makes them reconstruct which limit they hit and which plan clears it. Offering the plans at the point of refusal, with the refusal still on screen, does not. ## Projects, and a switcher that remembers where you were *2026-08-28* — Create, rename, archive and restore a project; a switcher in the sidebar; and a workspace overview assembled from the projects rather than from a separate summary table. A workspace holds projects, and every question netweft answers is asked against one of them. The overview is built from the projects themselves rather than from a summary table kept alongside them — a summary that has to be maintained is a summary that eventually disagrees with what it summarises. ## An audit log, and an account that can close itself *2026-08-27* — Project archiving, API key creation and revocation are recorded as audit events, and the account routes land beside them so a workspace can be read and closed by its owner. The first thing written down was not a feature but a record of features being used. Archiving a project, restoring one, creating an API key and revoking one all write an audit event, so a workspace can answer the question of who did what without anybody having to have thought to log it at the time. Revocation leaves the key's row in place rather than deleting it. A deleted key takes the evidence that it existed away with the access it granted, which is exactly backwards. --- # SEO glossary > Plain definitions of the terms netweft measures, each one short enough to quote whole. Source: https://netweft.com/glossary - **AI-search visibility**: Whether, and how, a brand or page is mentioned in the answers generated by assistants and AI search surfaces. Unlike a rank check it has no position to read: the output is a paragraph, it varies between runs, and it frequently produces no click at all. - **Anchor text**: The visible, clickable words of a hyperlink. Search engines read it as a description of the destination, which makes it one of the few signals about a page that is written by somebody other than that page's owner. - **Backlink**: A link from one website to a page on another. Search engines treat backlinks as a signal of relevance and trust, weighted heavily by the linking domain rather than by the raw number of links. - **Canonical URL**: The URL a site declares to be the preferred address for a piece of content, using a rel=canonical link. It consolidates duplicate or near-duplicate URLs so that ranking signals accrue to one address instead of being split. - **Click-through rate**: The share of people who click a result after seeing it — clicks divided by impressions. In organic search it is reported by Search Console per query and per page, and it varies far more with what else is on the results page than with position alone. - **Core Web Vitals**: A set of three field-measured metrics Google uses to describe page experience: Largest Contentful Paint for loading, Interaction to Next Paint for responsiveness, and Cumulative Layout Shift for visual stability. - **Cost per click**: The average amount advertisers pay for one click on a paid result for a keyword. In organic research it is used as a proxy for commercial intent: advertisers rarely bid on terms that do not convert. - **Crawl budget**: The number of pages a search engine is willing and able to fetch from a site in a given period, set by the site's capacity to serve requests and the engine's interest in the content. It matters at scale and rarely below a few thousand pages. - **Domain authority**: A third-party score that estimates how likely a domain is to rank, modelled from a link index the tool crawls itself. It is a vendor's opinion expressed as a number, not a measurement Google publishes or uses. - **hreflang**: An annotation that tells a search engine which language and region a page is meant for, and which other URLs are its equivalents. It does not translate, rank or consolidate anything; it selects between pages that already exist. - **Internal linking**: The links a site makes between its own pages. They determine what a crawler can find, how much of a site's own authority reaches each page, and — through anchor text — what each page is understood to be about. - **Keyword difficulty**: A normalised score estimating how hard it would be to rank on the first page for a keyword, derived from the strength of the pages currently ranking for it. Scores are provider-specific and are not comparable between tools. - **llms.txt**: A proposed convention: a markdown file at a site's root that indexes the site's content for large language models, with a companion llms-full.txt containing the whole site as one document. It is a convention, not a standard, and no model is obliged to read it. - **Long-tail keyword**: A query specific enough to have low individual search volume, usually because it is longer or more qualified. Collectively such queries make up most of search, and individually they carry clearer intent than a head term. - **Organic traffic**: Visits that arrive from unpaid search results. It is measured by the site's own analytics, which counts sessions, and reported separately by Search Console, which counts clicks — and the two never agree. - **Rank tracking**: The practice of checking, on a schedule, where a domain appears in search results for a set of keywords, and keeping the results as a history. Each check is one observation of one SERP at one moment. - **Referring domain**: A distinct website that links to a domain at least once, counted once no matter how many individual links it carries. It is the more meaningful of the two link counts, because signal saturates quickly per source. - **robots.txt**: A file at the root of a domain that tells automated crawlers which paths they may request. It controls crawling, not indexing: a disallowed URL can still appear in search results if other pages link to it. - **Search intent**: What a searcher is trying to accomplish with a query — typically classified as informational, navigational, commercial or transactional. Intent decides what kind of page can rank, more reliably than any other keyword attribute. - **Search volume**: The number of times a keyword is searched in a given market over a month, reported as a rolling average rather than a live count. It is an estimate from a data provider, not a measurement of your own traffic. - **SERP**: The page of results a search engine returns for a query, including organic listings, ads and any features such as answer boxes, image packs or local results. A rank check is a reading of one SERP at one moment. - **Share of voice**: The proportion of total available search visibility a domain holds across a defined keyword set, usually weighted by search volume and by expected click-through at each position. It is a portfolio metric, not a per-keyword one. - **Structured data**: Machine-readable statements embedded in a page that describe what it is about, usually as JSON-LD using schema.org vocabulary. It does not change rankings directly; it changes what a result can look like and what a model can quote. - **XML sitemap**: A machine-readable list of the URLs a site wants crawled, with optional last-modified dates. It is a hint about discovery and freshness, not an instruction to index, and a URL's presence in one guarantees nothing. --- # AI-search visibility > Why AI visibility cannot be measured the way rank is, what can honestly be sampled, and why netweft labels its own figure as estimated. Source: https://netweft.com/glossary/ai-search-visibility Updated: 2026-10-12 **Whether, and how, a brand or page is mentioned in the answers generated by assistants and AI search surfaces. Unlike a rank check it has no position to read: the output is a paragraph, it varies between runs, and it frequently produces no click at all.** Rank tracking works because a SERP has an order. A generated answer does not. It is prose, it is produced fresh, it differs between two identical prompts, and it may cite nothing you can attribute. **What cannot honestly be claimed.** A position. A share. A trend from a small number of samples. Anyone selling a precise AI visibility percentage is selling a number whose error bars they have not shown you. **What can be sampled.** Whether a brand is named in the answer to a given prompt, on a given platform, at a given time — repeated often enough that the proportion means something. That is a sampling exercise, and its honest output is a rate with a sample size beside it, not a rank. **Why it is worth sampling anyway.** A query answered in full by an assistant produces no click for analytics to count and no impression for Search Console to attribute, while still being an occasion on which the brand was or was not consulted. That is a gap in every other measurement a site has. netweft's [AI visibility](/features/ai-visibility) lookups read exactly this — for the project's domain, one platform at a time, priced per platform — and the figure is labelled **estimated rather than verified against a vendor invoice** wherever it appears, because the underlying cost is modelled rather than billed back to us line by line. A product that measures honesty in other people's numbers has to be first in line about its own. --- # Anchor text > Why anchor text is read as third-party testimony about a page, what over-optimised anchors look like, and why exact-match ratios are a weak thing to chase. Source: https://netweft.com/glossary/anchor-text Updated: 2026-09-12 **The visible, clickable words of a hyperlink. Search engines read it as a description of the destination, which makes it one of the few signals about a page that is written by somebody other than that page's owner.** Anchor text matters for a reason that is easy to miss: it is one of the few descriptions of a page that the page's own author did not write. A title tag is a claim. A hundred external links calling the page "postgres connection pooling" is corroboration. **Internal anchors are yours to fix and usually neglected.** A site that links to its own pages with "click here", "read more" and "this guide" is throwing away the one signal it has complete control over. Descriptive internal anchors cost nothing and are the cheapest structural improvement most sites have available. **External anchors are not yours, and chasing them looks like what it is.** A natural link profile contains brand names, bare URLs, "here", the page title, and a long tail of near-misses. A profile where a third of external anchors are the same commercial phrase is a profile that was bought, and it reads that way to a reviewer as well as to an algorithm. There is no correct exact-match ratio to aim for, and the ratios published as targets are back-formed from small samples of sites that rank for other reasons. What can be measured is what the anchors actually are, which is part of what a [backlink report](/features/backlinks) returns. --- # Backlink > What a backlink is, why the count matters far less than the number of distinct linking domains, and what the rel attribute changes. Source: https://netweft.com/glossary/backlink Updated: 2026-03-05 **A link from one website to a page on another. Search engines treat backlinks as a signal of relevance and trust, weighted heavily by the linking domain rather than by the raw number of links.** A backlink is one page linking to another. The count of backlinks is the least useful way to look at them. **Domains beat links.** Five thousand links from one site are worth a fraction of fifty links from fifty sites. This is why every serious link report leads with referring domains rather than with a link total, and why a five-figure backlink count in a sales deck should be read as a five-figure count of footers. **The attribute matters.** A link marked `rel="nofollow"`, `rel="sponsored"` or `rel="ugc"` tells search engines not to pass the usual signal, or to treat it as paid or user-generated. A link report that does not separate them is overstating. **Placement matters.** A link inside the body of a relevant article is a different object from a link in a site-wide footer, even though both are one row in a table. [netweft's backlink reporting](/features/backlinks) covers the link summary, the individual links, the [referring domains](/glossary/referring-domain) and the pages a domain links out to, [priced per request](/pricing) rather than per link. --- # Canonical URL > What a canonical declares, why it is a hint rather than a directive, and the mistakes that quietly de-index pages. Source: https://netweft.com/glossary/canonical-url Updated: 2026-03-05 **The URL a site declares to be the preferred address for a piece of content, using a rel=canonical link. It consolidates duplicate or near-duplicate URLs so that ranking signals accrue to one address instead of being split.** A canonical says: of the several URLs that serve this content, this is the one that counts. Tracking parameters, print views, session IDs, HTTP and HTTPS, with and without a trailing slash — all of them can serve the same page, and without a canonical the signals split across them. **It is a hint.** Search engines usually honour a canonical and sometimes overrule it, typically when the declared canonical is clearly not equivalent to the page declaring it. **Self-referencing canonicals are correct.** A page that is its own canonical should say so. It costs nothing and removes ambiguity. **The failure mode is severe.** A canonical pointing at the wrong page — a template-wide canonical to the homepage is the classic — tells the engine every page on the site is the homepage. Pages disappear from results without any obvious error. This is exactly the class of finding a [site audit](/features/site-audit) exists to catch, and it is why netweft classifies it as high severity rather than as one line among four hundred. --- # Click-through rate > Why published CTR-by-position curves mislead, what an impression actually counts, and how to use CTR as a diagnostic rather than a target. Source: https://netweft.com/glossary/click-through-rate Updated: 2026-09-12 **The share of people who click a result after seeing it — clicks divided by impressions. In organic search it is reported by Search Console per query and per page, and it varies far more with what else is on the results page than with position alone.** Every few years somebody publishes a table of average click-through rate by position, and it gets quoted as though it were a law. It is an average over an enormous mix of query types, and the variance inside it is larger than the differences between the rows. **What an impression counts is looser than it sounds.** Search Console records an impression when a result appears on the page a searcher was shown — which for a result at the bottom of a long page may mean it was never actually seen. A page whose CTR looks catastrophic is sometimes a page whose impressions are inflated by appearances nobody scrolled to. **Position explains less than the results page does.** Ranking first under an answer box that already resolves the query is a different outcome from ranking first with nothing above you. The position is identical; the clicks are not. This is the single biggest reason a CTR benchmark fails to transfer between sites. **Where it is genuinely useful is as a diagnostic.** A page ranking well with a CTR far below its own historical average has usually had something appear above it, or has a title and description that no longer match the query it is winning. Both are findable, and both are fixable without touching the ranking. --- # Core Web Vitals > What each Core Web Vital measures, the difference between lab and field data, and how much of a ranking factor they actually are. Source: https://netweft.com/glossary/core-web-vitals Updated: 2026-03-05 **A set of three field-measured metrics Google uses to describe page experience: Largest Contentful Paint for loading, Interaction to Next Paint for responsiveness, and Cumulative Layout Shift for visual stability.** Three metrics, each measuring a different kind of annoyance. **Largest Contentful Paint (LCP)** — how long until the biggest thing above the fold is drawn. This is "did the page appear". **Interaction to Next Paint (INP)** — how long the page takes to respond visibly after a user interacts. This is "did the page listen". **Cumulative Layout Shift (CLS)** — how much the layout moves around after it first draws. This is "did the page stay still while I was reading it". **Lab is not field.** A Lighthouse run is a synthetic measurement on one machine under one network profile. Core Web Vitals as Google uses them are field data from real visits. A perfect lab score with poor field data usually means your real users are on worse devices and networks than your test. **Keep the weighting honest.** These are a real signal and a small one. Fixing a page that takes six seconds to render is worth doing for its own sake. Chasing a score from 92 to 96 rarely moves a ranking, and netweft [prices the per-page performance check at 50 credits](/pricing) partly so that the cost of chasing it is visible before you start. What that does to a full crawl is worked through in [what a 500-page crawl costs](/blog/what-a-crawl-costs). --- # Cost per click > Why CPC is the most useful number in organic keyword research even when you never run an ad, and where the proxy breaks down. Source: https://netweft.com/glossary/cost-per-click Updated: 2026-03-05 **The average amount advertisers pay for one click on a paid result for a keyword. In organic research it is used as a proxy for commercial intent: advertisers rarely bid on terms that do not convert.** CPC is an advertising number that earns its place in organic research for one reason: somebody is spending real money on it, repeatedly, which is evidence that clicks on that query turn into something. It is the cheapest available signal of commercial intent, and it is usually better than reading the query and guessing. **Where the proxy holds.** A high CPC with modest volume almost always means a term with buying intent in a market with a real budget. Those are the terms worth building a page for even when the volume looks unexciting. **Where it breaks.** CPC is also inflated by competition among advertisers who are all wrong, by brand bidding, and by markets where a single click is worth a great deal regardless of conversion rate — insurance and legal being the familiar examples. And a CPC of zero means nobody is bidding, which is occasionally an opportunity and more often a signal that nothing on the other side of the click is worth money. [netweft's keyword research](/features/keyword-research) reports CPC alongside [volume](/glossary/search-volume), competition and [difficulty](/glossary/keyword-difficulty) for every researched keyword, because none of the four is useful on its own. --- # Crawl budget > What crawl budget actually constrains, which sites need to care about it, and what wastes it. Source: https://netweft.com/glossary/crawl-budget Updated: 2026-03-05 **The number of pages a search engine is willing and able to fetch from a site in a given period, set by the site's capacity to serve requests and the engine's interest in the content. It matters at scale and rarely below a few thousand pages.** Crawl budget is the most over-applied concept in technical SEO. For a site of a few hundred pages it is not a constraint and never will be. It becomes real somewhere in the tens of thousands of URLs, or earlier on a site that generates URLs faster than it publishes content — faceted navigation, calendars, session parameters, unbounded filter combinations. **Two forces set it.** How fast your server responds without degrading, and how much the engine wants your content. You control the first directly and the second only slowly. **What wastes it.** Infinite URL spaces from filters and sorts, long redirect chains, soft 404s that return 200, and large numbers of near-duplicate URLs that each get fetched before being discarded. **What conserves it.** Correct [canonicals](/glossary/canonical-url), a [`robots.txt`](/glossary/robots-txt) that excludes parameter spaces with no unique content, honest status codes, and internal linking that reaches your important pages in few hops. [netweft's crawl](/features/site-audit) respects `robots.txt` for the same reason a search engine does, and reports the structural findings that waste crawl budget by severity. --- # Domain authority > Where authority scores come from, why two tools give the same domain different numbers, and why netweft publishes no score of its own. Source: https://netweft.com/glossary/domain-authority Updated: 2026-09-12 **A third-party score that estimates how likely a domain is to rank, modelled from a link index the tool crawls itself. It is a vendor's opinion expressed as a number, not a measurement Google publishes or uses.** Every large SEO tool publishes a domain-level authority score, and no two of them agree. That is not a defect in any of them. Each score is modelled from that tool's own crawl of the web, on that tool's own assumptions about which links count and how much, and the number is a summary of a model rather than a reading of anything. Google does not publish an authority score, does not consume one, and the metric the industry's shorthand descends from — PageRank — stopped being visible in 2016. **What an authority score is actually useful for.** Comparing two domains inside the same tool, at the same moment. The ordering it produces is usually defensible even when the absolute number means nothing, which is why it survives in pitch decks and competitor shortlists. **What it is not useful for.** Tracking over time against a target, or comparing a number from one tool against a number from another. A score that moves because the vendor re-crawled or re-weighted has moved for reasons that have nothing to do with your site. netweft does not compute an authority score, or any substitute for one. Every number in it either came from a named provider, or is a direct observation, or is a documented rule applied to one — and the interface says which. That is a real trade: if a report has to carry a DA figure, netweft cannot produce one, which is [stated plainly on the comparison page](/compare/moz). --- # hreflang > What hreflang decides, why every set has to point back at itself, and the three mistakes that make an implementation do nothing at all. Source: https://netweft.com/glossary/hreflang Updated: 2026-09-12 **An annotation that tells a search engine which language and region a page is meant for, and which other URLs are its equivalents. It does not translate, rank or consolidate anything; it selects between pages that already exist.** hreflang answers one question: given several URLs that say the same thing in different languages or for different markets, which one should this searcher be shown. It does not merge their signals, it does not stop them competing for other reasons, and it is a hint rather than a directive. **Every set has to be reciprocal.** If page A names page B as its German equivalent, page B must name page A back. A one-way annotation is discarded entirely, not partially honoured, which is why a partly-migrated site often gets no benefit at all rather than a proportional one. **It has to agree with the canonical.** A page whose canonical points at another URL while its hreflang set names it as the canonical version of a language is giving two contradictory instructions, and the canonical wins. The usual result is an entire language folder that self-canonicalises away. **The third mistake is x-default.** It is not "English" and it is not a fallback for missing translations; it names the page a searcher should get when no listed language matches them. Omitting it is fine. Pointing it at a language page rather than a selector or a global page is the mistake. A [site audit](/features/site-audit) reports pages whose hreflang set is not reciprocal, because that is the failure that silently produces nothing. --- # Internal linking > Why internal links are the only ranking input a site fully controls, what an orphan page is, and why click depth matters more than a sitemap entry. Source: https://netweft.com/glossary/internal-linking Updated: 2026-09-12 **The links a site makes between its own pages. They determine what a crawler can find, how much of a site's own authority reaches each page, and — through anchor text — what each page is understood to be about.** Internal linking is the only significant input to how a site ranks that the site's owner controls completely. Nobody has to agree to it, nobody has to be emailed, and it costs nothing but attention. **An orphan page is a page no other page links to.** It may be in the sitemap and it may be reachable by typing its URL, but a crawler arriving from a link has no route to it and a person browsing the site has no route to it either. Sitemaps are a weak substitute: they announce a URL, they do not vouch for it. **Click depth is a real constraint.** A page four or five clicks from the home page receives very little of whatever authority the home page has, and is crawled correspondingly less often. On a large catalogue this is usually the thing quietly deciding which half of the site ranks. **Anchor text is where this compounds.** Descriptive internal anchors do two jobs at once — they tell a crawler what the destination is about and they tell a reader whether to click. "Read more" does neither. The [site audit](/features/site-audit) reports orphan pages and click depth, because both are structural facts about a crawl rather than opinions about a page. --- # Keyword difficulty > What a keyword difficulty score is derived from, why scores differ between tools, and how to use one without treating it as a measurement. Source: https://netweft.com/glossary/keyword-difficulty Updated: 2026-03-05 **A normalised score estimating how hard it would be to rank on the first page for a keyword, derived from the strength of the pages currently ranking for it. Scores are provider-specific and are not comparable between tools.** Difficulty is a model, not a measurement. Every provider builds it from the same raw ingredients — the link profiles, authority and relevance of the pages already ranking — and every provider weights them differently. Two consequences follow. **Scores are not portable.** A 42 in one tool is not a 42 in another. Comparing difficulty across tools is comparing two models, not two measurements. Pick one source and stay with it. **The score is a prior, not a verdict.** A high difficulty on a query where every ranking page is a marketplace listing and you are a specialist is a different situation from a high difficulty on a query dominated by peers. The number cannot see that. The [SERP](/glossary/serp) can, which is why difficulty is worth reading next to the actual results rather than instead of them. Used well, difficulty is a sorting tool: it tells you which of two hundred candidate keywords in [a research run](/features/keyword-research) to look at closely first. Used badly, it is a reason to skip a term you could have won. --- # llms.txt > What llms.txt proposes, how it differs from robots.txt and a sitemap, and the honest state of whether anything actually consumes it. Source: https://netweft.com/glossary/llms-txt Updated: 2026-09-12 **A proposed convention: a markdown file at a site's root that indexes the site's content for large language models, with a companion llms-full.txt containing the whole site as one document. It is a convention, not a standard, and no model is obliged to read it.** `llms.txt` proposes that a site publish, at its root, a markdown index of its own content written for a model rather than for a crawler: a title, a short description of the site, and a list of links with a sentence about each. `llms-full.txt` is the maximal version — the whole site as one document, so a model can take it in a single fetch. **It is not robots.txt and it is not a sitemap.** `robots.txt` grants or withholds permission. A sitemap lists URLs for discovery. `llms.txt` is neither of those: it is an editorial summary, and its value is in the sentences, not in the list. **The honest position on adoption.** It is a proposed convention, not a standard, and there is no public confirmation from a major model provider that it is consumed. Publishing one is cheap and carries no risk; claiming it does something measurable would be a claim nobody can currently support. What is measurable is the thing underneath it. A site that can produce a good `llms.txt` is a site whose pages are also available as plain text — and a model that can read a page as markdown instead of parsing HTML around it makes fewer mistakes about what the page said. That is why [this site serves every page twice](/blog/reading-a-workspace-from-an-agent): once as HTML, and once as the same document at the same path plus `.md`. --- # Long-tail keyword > Why low volume is not the same as low value, how the long tail behaves in aggregate, and why volume estimates get least reliable exactly where the tail begins. Source: https://netweft.com/glossary/long-tail-keyword Updated: 2026-09-12 **A query specific enough to have low individual search volume, usually because it is longer or more qualified. Collectively such queries make up most of search, and individually they carry clearer intent than a head term.** A head term is short, general and contested. A long-tail query is specific, usually longer, and reported with a volume so small that a keyword tool may round it to zero. **Low volume is not low value.** "seo tool" tells you almost nothing about what the searcher wants. "seo tool that shows cost per lookup" tells you exactly. The second query converts at a rate the first cannot approach, and it is winnable by a page that actually answers it rather than by the site with the largest link profile. **The tail only works in aggregate.** No single long-tail term justifies a page on its own volume. A page that answers a question thoroughly will rank for dozens of phrasings of it, and the reported volume of the one you researched is a poor estimate of what the page will receive. **This is where volume data is least trustworthy.** Estimates are modelled from clickstream and ad data, both of which thin out at exactly this end of the distribution. A term reported at 10 a month and a term reported at 0 are not reliably different from one another, which is why [netweft's keyword research](/features/keyword-research) shows twelve months of history beside the current figure rather than a single number — a series makes the noise visible in a way one integer cannot. --- # Organic traffic > Why analytics and Search Console always disagree about organic traffic, which one to believe for which question, and what neither of them sees. Source: https://netweft.com/glossary/organic-traffic Updated: 2026-09-12 **Visits that arrive from unpaid search results. It is measured by the site's own analytics, which counts sessions, and reported separately by Search Console, which counts clicks — and the two never agree.** Two systems report organic traffic and they will never match. This is not a tracking bug and it is not fixable. **Search Console counts clicks on a result.** It knows the query, it knows the position, and it stops knowing anything the moment the browser leaves Google. It does not see a visitor who blocks scripts, because it is not measuring the site at all. **Analytics counts sessions on the site.** It sees the landing page and what happened next, but it never sees the query, it loses anyone who blocks the script or refuses consent, and it will happily count one click as two sessions if the visitor comes back after half an hour. Use Search Console for anything about search — queries, positions, which pages earn impressions. Use analytics for anything after the click. Asking either one to answer the other's question is where most reporting arguments start. **Both of them are now missing something.** A query answered by a generated summary produces no click for Search Console to count and no session for analytics to count, while still being an occasion on which the site was consulted. That gap is what [AI-search visibility](/glossary/ai-search-visibility) attempts to measure, and it is why netweft connects Search Console per project and stores rank checks separately: neither is a substitute for the other. --- # Rank tracking > What rank tracking measures, why the history matters more than today's number, and what a tracker should record for each check. Source: https://netweft.com/glossary/rank-tracking Updated: 2026-03-05 **The practice of checking, on a schedule, where a domain appears in search results for a set of keywords, and keeping the results as a history. Each check is one observation of one SERP at one moment.** Today's position tells you almost nothing. The history tells you whether what you did worked, which is the only question worth the money. A useful check records four things: - the position seen, or the fact that nothing was - the URL that held it - the market and device the check ran in - the moment it ran The URL is the one people leave out and regret. A keyword that holds position nine while the ranking URL quietly changes from your guide to your pricing page is a different situation from one that simply held, and only the URL column shows it. **Not ranking is a value.** A week in which the domain did not appear is a category, not a zero and not a gap. Zero is a position; a gap means the check did not run. Drawing either in place of *not ranking* makes the chart say something that did not happen. [netweft's rank tracking](/features/rank-tracking) runs checks on a schedule through a background worker, or on demand, and stores each one as an immutable snapshot — [why that matters](/blog/snapshots-not-recomputation). --- # Referring domain > Why referring domains is the link metric worth watching, how it differs from a backlink count, and what a healthy profile looks like. Source: https://netweft.com/glossary/referring-domain Updated: 2026-03-05 **A distinct website that links to a domain at least once, counted once no matter how many individual links it carries. It is the more meaningful of the two link counts, because signal saturates quickly per source.** If you watch one link number, watch this one. Search engines discount repeated links from the same source steeply. The first link from a site carries most of whatever signal that site can pass; the thousandth carries almost none. Counting referring domains rather than links approximates that behaviour without pretending to model it. **The ratio is diagnostic.** A domain with 40,000 backlinks from 90 referring domains has a footer or a widget somewhere. A domain with 900 backlinks from 600 referring domains has been linked to by six hundred separate people. The second profile is far stronger and far smaller. **Growth rate reads better than total.** Ten new referring domains a month, sustained, is a healthier signal than a one-off spike of four hundred, which is more often a syndication event or a directory dump than a change in how the web regards you. [netweft](/features/backlinks) reports referring domains as its own lookup, [priced per request](/pricing), beside the link summary and the individual links. --- # robots.txt > What robots.txt controls and what it does not, the crawl-versus-index distinction that catches people out, and how netweft treats it. Source: https://netweft.com/glossary/robots-txt Updated: 2026-03-05 **A file at the root of a domain that tells automated crawlers which paths they may request. It controls crawling, not indexing: a disallowed URL can still appear in search results if other pages link to it.** The most common robots.txt mistake is believing it hides pages. It does not. It asks well-behaved crawlers not to *fetch* them. **Crawling is not indexing.** A URL disallowed in robots.txt can still be indexed if something links to it — the engine simply indexes it without having read it, which is how you end up with a result whose description says no information is available. To keep a page out of an index you need a `noindex` directive on the page, which means the crawler has to be *allowed* to fetch it and read that directive. Disallowing a page you want de-indexed is self-defeating. **It is public.** Anyone can read yours. It is not an access control, and listing a sensitive path there advertises it. **It is advisory.** Compliant crawlers honour it. Others do not. [netweft's own crawler](/features/site-audit) reads and honours `robots.txt` on every audit, including on your own site. If a section is disallowed and you want it audited, the change belongs in the robots file rather than in a product setting. --- # Search intent > The four intent categories, why intent decides page format before it decides content, and how to read intent off a SERP rather than off the words. Source: https://netweft.com/glossary/search-intent Updated: 2026-03-05 **What a searcher is trying to accomplish with a query — typically classified as informational, navigational, commercial or transactional. Intent decides what kind of page can rank, more reliably than any other keyword attribute.** Intent is the attribute that decides whether a page can rank at all. You can out-write everyone on a query and still lose if you have written the wrong kind of page. The four usual categories: - **Informational** — the searcher wants to understand something. - **Navigational** — they want a specific site or product. - **Commercial** — they are comparing options before buying. - **Transactional** — they are ready to act. **Read it off the results, not the words.** The reliable method is to look at what is already ranking. If the first page is nine listicles, the search engine has decided the query is commercial-comparison, and a product page will not displace them no matter how good it is. If it is documentation, a sales page is in the wrong format. **Intent moves.** A query that was informational two years ago can become transactional as a category matures. This is one of the arguments for [storing rank history as observations](/blog/snapshots-not-recomputation): a position that slid without your page changing is often a [SERP](/glossary/serp) whose intent was re-read. --- # Search volume > What monthly search volume measures, why it is an average rather than a count, and why twelve months of history matters more than a single figure. Source: https://netweft.com/glossary/search-volume Updated: 2026-03-05 **The number of times a keyword is searched in a given market over a month, reported as a rolling average rather than a live count. It is an estimate from a data provider, not a measurement of your own traffic.** Search volume is the first number anyone looks at and the easiest one to over-read. Three things are worth knowing about it. **It is an average, not a count.** Most providers report a rolling twelve-month average, which means a term with sharp seasonality reports a number it is almost never actually at. A keyword averaging 2,000 a month might be 8,000 in November and 300 in June. **It is market-specific.** The same keyword has a different volume in every country and language pair. A project in netweft carries its own market, so the volume you see is the volume for the market that project is about. **It says nothing about value.** Volume without [intent](/glossary/search-intent) and [difficulty](/glossary/keyword-difficulty) is a number you cannot act on. A 200-a-month term with buying intent and no established competitor is usually worth more than a 20,000-a-month informational term you would rank eleventh for. [netweft's keyword research](/features/keyword-research) stores twelve months of volume history per keyword, so a seasonal term reads as seasonal instead of reading as one flat average in a table. --- # SERP > What a SERP contains beyond the ten blue links, why position one is not what it used to be, and why a rank check is a timestamped reading. Source: https://netweft.com/glossary/serp Updated: 2026-03-05 **The page of results a search engine returns for a query, including organic listings, ads and any features such as answer boxes, image packs or local results. A rank check is a reading of one SERP at one moment.** A SERP is not a list of ten links, and has not been for a long time. A single results page can carry ads, an answer box, a related-questions block, images, video, local results, product listings and, increasingly, a generated summary — all above the first organic result. Two things follow for anyone tracking positions. **Position is not the same as visibility.** Ranking first organically on a query whose answer box already resolves the question is a different outcome from ranking first on a query with nothing above it. The number is the same; the click-through is not. **A SERP is a moment.** Results are personalised, localised, and re-ranked continuously. There is no single true position for a keyword, only what was returned for a given query, in a given market, at a given time. This is why [netweft's rank tracking](/features/rank-tracking) stores every check as a snapshot with its timestamp rather than as a current value: the timestamp is part of the fact, and [recomputing it later would destroy it](/blog/snapshots-not-recomputation). --- # Share of voice > How share of voice is calculated, why it is weighted by position and volume, and what it tells you that a table of rankings does not. Source: https://netweft.com/glossary/share-of-voice Updated: 2026-03-05 **The proportion of total available search visibility a domain holds across a defined keyword set, usually weighted by search volume and by expected click-through at each position. It is a portfolio metric, not a per-keyword one.** A table of two hundred rankings is hard to read as a trend. Share of voice collapses it into one number: of all the attention available across this keyword set, how much is yours. The calculation weights two things. **[Volume](/glossary/search-volume)**, because a move on a 2,000-a-month term matters more than the same move on a 20-a-month term. And **position**, because the difference between three and four is worth far less than the difference between one and two — click-through falls away steeply. What it is good for: noticing that a portfolio is drifting while no individual keyword looks alarming, and comparing your trajectory against a competitor's across the same set. What it is not good for: any decision about a single page. Share of voice is an average, and averages hide the case you were about to act on. The keyword set has to be fixed for the number to mean anything. Add twenty easy terms and your share of voice rises without anything improving. --- # Structured data > What structured data is for, why the honest failure mode is a mismatch with the page, and which rules keep an implementation maintainable. Source: https://netweft.com/glossary/structured-data Updated: 2026-09-12 **Machine-readable statements embedded in a page that describe what it is about, usually as JSON-LD using schema.org vocabulary. It does not change rankings directly; it changes what a result can look like and what a model can quote.** Structured data is how a page states, in a form nothing has to infer, what it is: an article with an author and a date, a product with an offer, a set of questions with answers, a trail of breadcrumbs. **It is not a ranking factor and it is not a trick.** What it buys is eligibility — for a rich result, for a breadcrumb trail in place of a URL, for being quoted accurately by something that is summarising rather than linking. A page that deserves to rank does not rank better for having markup; a page that does rank presents better. **The failure mode that actually matters is disagreement.** Markup claiming a price the page does not show, a rating nobody left, a date the article does not carry, or an author node that resolves to nothing. Google's response to a site whose markup and content disagree is to stop trusting the markup, and that withdrawal is site-wide rather than per page. **Two rules make it maintainable.** Generate the markup from the same data the page renders, never transcribe it beside the page — a copy kept in step by hand goes stale in a fortnight. And give every node a stable `@id` so the nodes on a page reference one another instead of restating themselves; a reference to a node that is not in the same graph resolves to nothing at all. This site emits an `Organization`, a `WebSite` and a `Person` on every page for exactly that reason: each page is read on its own, so declaring the publisher once on the home page would leave every other graph pointing at an entity it never described. --- # XML sitemap > What a sitemap actually does, why lastmod is the field that gets abused, and why listing every URL you have is the wrong instinct. Source: https://netweft.com/glossary/xml-sitemap Updated: 2026-09-12 **A machine-readable list of the URLs a site wants crawled, with optional last-modified dates. It is a hint about discovery and freshness, not an instruction to index, and a URL's presence in one guarantees nothing.** A sitemap answers one question for a crawler: which URLs does this site consider worth knowing about, and when did each last change. It does not request indexation, it does not override a `noindex`, and it does not outrank a canonical that points elsewhere. **`lastmod` is the field worth getting right, and the one most often wrong.** A sitemap that stamps every URL with the build timestamp is telling a crawler that the entire site changed on every deploy. Crawlers learn to disregard a `lastmod` that behaves that way, and once disregarded it is not selectively re-trusted for the pages where it was honest. A date should be absent rather than invented — this site's own sitemap gives a `lastmod` only to the pages that carry a real one in their front matter. **Listing everything is the wrong instinct.** A sitemap is a statement about what matters. Machine surfaces, duplicate representations of a page, tag archives that hold one item each, and anything carrying `noindex` do not belong in it — putting two URLs for one document in front of a crawler that is trying to pick one is not helpful to either of you. The [site audit](/features/site-audit) reads the sitemap as part of a crawl and reports the URLs in it that a crawler cannot reach. --- # Privacy > What netweft collects, which processors it sends data to, how long it keeps things, and what this marketing site does and does not run in your browser. Source: https://netweft.com/privacy Updated: 2026-10-20 This describes what netweft does with data in the product at `app.netweft.com` and on this marketing site. It is written to be checkable against how the software actually behaves. ## This website This site runs analytics only as far as you allow it. The first time you visit, a banner asks whether netweft may set analytics cookies. Until you answer, nothing is stored on your device and nothing you do is recorded; the analytics library only fetches its own settings. - **If you accept**, PostHog sets a cookie on `netweft.com` so it can tell one visit from the next, records which pages are viewed and clicked, and records session replays in which nothing you type is captured. The same answer applies on `app.netweft.com`. - **If you decline**, nothing is stored on your device. PostHog still counts the visit and the actions named below, from a one-way hash of your IP address and browser made with a salt it changes and deletes daily, so a declined visitor cannot be recognised from one day to the next. Either way, a few actions are recorded by name: which call to action was pressed and where it sat, a change of billing period on the pricing page, the plan a credit estimate fits, which section of a guide was reached, the guides filter, which free tool was used, run or copied from, and which code sample was copied. They never include what you typed, a URL you checked or a figure you entered. You can change your answer at any time with **Cookie settings** in the footer of this site, or in the account menu of the product. Analytics requests go to `relay.netweft.com`, a forwarder netweft runs, which passes them on to PostHog without your cookies. Fonts are self-hosted, and there is no tag manager and no advertising pixel. Requests reach Cloudflare, which hosts the site and keeps ordinary server logs. **The free tools** at `/tools`. Four of them run entirely in your browser and send nothing anywhere. The page checker and the redirect checker send the one URL you enter to netweft's API, which fetches it and answers with what it found; neither the URL nor the result is stored. To stop the tools being used as a free crawler, each run carries a Cloudflare Turnstile check, and netweft counts runs per visitor against a key made by hashing your IP address with a secret, so the count never holds the address itself. Each count is deleted shortly after its minute or day ends. ## What the product collects **Your account.** You sign in with Google, with GitHub, or with an email address and a password. - With Google or GitHub, we receive your name, email address and profile picture from that service, and there is no netweft password. - With an email address, you choose a password. It is stored only as a scrypt hash. When you set it, it is checked against the Have I Been Pwned list of breached passwords by sending the first five characters of a SHA-1 hash of it, never the password itself. We email a six-digit code, valid for five minutes, to confirm the address, and the same kind of code to reset a password. An email account that is never confirmed is deleted after an hour. Signing up, signing in and asking for a code each pass a Cloudflare Turnstile check, which tells people from bots. A signed-in session records the IP address and browser it was opened from; a session in the read-only demo records neither. **What you put in.** The domains, keywords, tags, notes and project briefs you create. This is the substance of a workspace and it belongs to you. **What netweft observes.** Rank snapshots, audit findings, keyword metrics and backlink data retrieved on your behalf, stored against your project. **Usage.** A ledger of every credit-spending operation: what ran, when, what it reserved and what it settled at. This is how billing works and it is visible to you in the dashboard. **Payments.** Handled by Polar. netweft does not receive or store card numbers. **Product analytics.** If you accept analytics cookies, the dashboard records how its screens are used, through PostHog. Session replays draw every word and every input on the screen as a blank, so your domains, keywords and figures are not recorded. PostHog knows you by an internal account id only — never your name or email address. Separately from the banner, the API records a short list of events against that same id: signing up, starting an audit, the actions in your workspace's audit log, buying credits, and errors. They store nothing on your device, and they exist so we can see how the product is used and fix what breaks. An error report carries the error's type and code, not its message. For the AI assistant, PostHog receives the model, the number of tokens, the cost and the time a reply took — never your prompts or the answers. ## Google Search Console and GA4 If you connect them, netweft requests **read-only** scopes at the moment you connect the integration — not at sign-in. It reads the properties you select per project. It never writes to either service. Access tokens are stored encrypted. You can disconnect at any time from the project's settings, and you can revoke netweft's access from your Google account independently of anything you do here. ## Who else sees data netweft sends data to these processors, and only for the purposes named: - **Google** — authentication, and the Search Console and GA4 data you connect. - **GitHub**: authentication, if you sign in with it. - **Cloudflare**: hosting for the site, the product and its database, and the Turnstile check at sign-in and on the free tools. - **Resend**: delivering the sign-in codes and invitations netweft emails. - **Have I Been Pwned**: the five-character hash prefix described above, when you set a password. - **DataForSEO** — keywords, domains and locations, in order to retrieve SEO data for them. - **OpenRouter** — prompts for the AI assistant and onboarding strategist, which include project context and figures read from your workspace. - **Polar** — subscription and payment processing. - **PostHog** (United States) — product analytics, session replay and error tracking, as described above. There is no advertising network in that list and no data broker. netweft does not sell data and does not share it for anyone else's marketing. ## How long things are kept Workspace data is kept while your workspace exists. Rank snapshots are kept as the history — that is what they are for, and deleting them retroactively would defeat the point of storing observations. Delete a project and its data goes with it. Delete your workspace and everything in it is removed. The usage ledger is retained for the period required for billing records. ## Your rights Write to to access, export or delete your data, or to ask a question about any of the above. If you are in a jurisdiction that grants you statutory data rights, they apply, and this address is where to exercise them. ## Security Sessions are signed, passwords are stored as scrypt hashes, and stored OAuth tokens are encrypted. Access to production data is limited to what operating the service requires. If you find a vulnerability, report it to with enough detail to reproduce it and a reasonable window before disclosure. ## Changes Material changes will be reflected here with a new date at the top of the page. The version history of this document is the version history of the file it is written in. --- # Terms > The terms of using netweft: accounts, plans and credits, what the crawler may be pointed at, what the data is and is not, and how either side ends it. Source: https://netweft.com/terms Updated: 2026-10-17 These terms cover the use of netweft, the SEO research and rank-tracking product at `app.netweft.com`. ## The service netweft researches keywords, checks search positions on a schedule, crawls sites you nominate, and reports domain and backlink data, within the limits of the plan a workspace is on. ## Accounts An account is created by signing in with Google or GitHub, or with an email address and a password. You are responsible for what happens under your account, for the security of the Google or GitHub account behind it, and for keeping your password to yourself. API keys are issued for the MCP server only. Each key reads the workspace it belongs to, within the scopes it was given; treat a key like a password and revoke one you no longer trust. ## Plans, credits and billing There is no free tier. A workspace with no active subscription has no access. Subscriptions are billed monthly or yearly through Polar and begin with a trial of the length stated for the plan. Cancelling stops the next renewal; it does not refund the current period. Credits meter every operation that costs money to perform: - Plan credits are granted at the start of each billing period and **expire** at the end of it. - Top-up credits are purchased separately and **do not expire**. - Plan credits are always spent first. - Credits are reserved before an operation runs and settled against the actual cost afterwards. A workspace without sufficient credits is refused before the operation runs. Credits have no cash value and are not redeemable for money. Prices, plan limits and the credit rate card are published on the pricing page and may change. Changes apply from your next billing period. ## Using the crawler responsibly The site audit fetches pages from a domain you nominate. You must only point it at a site you own or have permission to crawl. The crawler identifies itself, honours `robots.txt`, and is rate limited — but permission is your responsibility, not ours to infer. Do not use netweft to attempt to overwhelm a site, to circumvent access controls, or to collect personal data from pages it fetches. ## The free tools The free tools at `netweft.com/tools` need no account. The page checker and the redirect checker fetch one URL you give them, so the crawler rules above apply: point them only at pages you may check. They are limited per visitor, and netweft may refuse or withdraw them at any time. ## What the data is SEO metrics — search volume, difficulty, cost per click, competition, backlink counts — are estimates supplied by third-party data providers. They are not measurements of your traffic and they are not guaranteed to be accurate, complete or current. Rank snapshots are records of what was observed for a query in a market at a moment. Search results are personalised, localised and continuously re-ranked; a snapshot is evidence of one reading, not a statement about every reading. Decisions you make from this data are yours. ## Availability netweft is provided as it is, without a service level agreement. Scheduled work may be delayed, third-party providers may fail, and maintenance happens. The product is built to degrade rather than fail where it can — the cache is optional, and a missing cache means slower answers rather than no answers — but that is a design property, not a guarantee of uptime. ## Suspension and termination We may suspend or close a workspace that breaches these terms, in particular the crawler section, or that fails to pay. You may close your workspace at any time from the dashboard; doing so deletes its data. ## Liability To the extent the law allows, netweft is not liable for indirect or consequential loss, for lost revenue or lost rankings, or for decisions taken on the basis of third-party data supplied through the product. Nothing here limits liability that cannot lawfully be limited. ## Changes Material changes will be published here with a new date at the top of the page. Continuing to use netweft after a change means accepting it. ## Contact Questions about these terms go to .