// AGENT DOMAINS · INCIDENT REPORT · JUNE 2026
When the registrar lost our nameservers: four days of NXDOMAIN, timestamped
Between 27 and 28 June 2026, four .app domains we operate stopped resolving worldwide. Not a stale IP address — NXDOMAIN: the .app registry no longer held a delegation for them, so there was nothing left to resolve. They stayed unreachable for about four days, and on 2 July Google deindexed all four sites. The fault was above our DNS: the registrar dropped the delegation at the registry, in a batch that hit several domains registered on the same day. Every dashboard we owned reported normal throughout — the Cloudflare zone still said active, the registrar's own field still said verified. Public authoritative DNS was the only signal telling the truth. Below is the timeline, the evidence behind each line, and the command that reproduces it.
What happened: four domains dropped out of the .app zone
The domains were diagramgen.app, freeheadshot.app, freevideocompressor.app and nichelogo.app — all registered on 13 June 2026 through one registrar, all pointed at Cloudflare within hours, all live and climbing in Search Console for two weeks. Then, on 27 or 28 June, the delegation for all four disappeared from the registry. We cannot give you the exact minute, because nothing on our side was watching the registry layer. That is the story.
The failure mode matters more than the cause. A domain with wrong records still resolves — you get an address, it is merely the wrong one. A domain with no delegation does not resolve at all: ask any resolver and the parent zone, app., answers NXDOMAIN. No server to reach, no origin to time out, no certificate to fail. To a browser it looks like a typo. To Googlebot it looks like the site was never there.
The damage:
- About four days unreachable, 27/28 June to 1/2 July, on all four domains at once — web and mail together, since MX lookups fail the same way.
- Deindexed on 2 July, after consecutive days of failed crawls. Not instant, and not instantly reversed either.
- Recovery split down the middle. By 17 July two domains had roughly 70–90% of their search traffic back; two were still near zero — with no relationship to how each had been repaired.
- One consequence we found only by going looking, three weeks later: the outage stopped Google reading our sitemaps, and that did not heal on its own for a month.
The evidence chain, timestamped
All times UTC. We are deliberately not naming the registrar: the failure is documented in our logs, its cause sits inside a system we cannot see, and a page ranking for this query is not the place to assign blame we cannot prove. The shape of the failure is registrar-agnostic anyway.
| Time (UTC) | Event | Evidence |
|---|---|---|
| 13 Jun, 12:52–23:52 | Four .app domains registered. | Our audit table (domain_register) + the registry's RDAP registration event. |
| 13–14 Jun | Platform moves the delegation to Cloudflare, because the domains arrived on the registrar's own default nameservers. Zones active, sites live. | Audit table (domain_set_nameservers) + Cloudflare activated_on. |
| 14–26 Jun | Normal: dozens of deploys, impressions climbing. | Audit table + Search Console. |
| ≈27/28 Jun | Delegation lost at the registry. Impressions on all four hit zero on 28 June. Our side touched nothing: the Cloudflare account audit log holds zero zone or DNS events for these zones between 18 and 30 June, and our own audit table shows only deploys. | Cloudflare audit log + platform audit table + Search Console. |
| 29 Jun, 10:13 | First hands-on diagnosis: authoritative DNS over HTTPS returns NXDOMAIN for both A and NS — while the Cloudflare zone still shows active and the registrar's field still shows verified: true. | Diagnosis transcript, with the raw DoH responses. |
| 29 Jun, 12:30 | Re-submitted the identical nameserver set through the registrar's API. HTTP 204, accepted, no-op. Still NXDOMAIN. | Transcript. |
| 30 Jun, 17:30:04 | The registrar restores the delegations in bulk — RDAP last changed lands on the same second for the affected domains, before our evening session began, so it was not us. Two came back on Cloudflare. Two came back on the registrar's own default nameservers. | RDAP last changed + transcript. |
| 30 Jun, 17:36 / 17:43 | We repair the two that came back wrong. One goes through our CLI; the other is refused by our own tooling over a data bug on our side (last section) and has to be fixed by calling the registrar's API directly. | Audit table + transcript + RDAP. |
| 30 Jun, 17:50–17:55 | DNS records rebuilt, certificates re-issued, all four verified as delegated to Cloudflare. | Cloudflare audit log. |
| 1–2 Jul | Negative caches expire, the delegation reaches the resolvers people actually use, the sites return. Not self-healing — the delayed effect of the 30 June repair. Google completes the deindexing the same day. | Direct measurement + Search Console. |
Ruled out one by one, so that "the registry lost the delegation" is a conclusion and not a guess: the Cloudflare zones were never deactivated (activated_on still reads 13/14 June, zero audit events since); bindings, routes and stored content all intact; and the NXDOMAIN was visible from public authoritative resolvers, not just one office network.
Why it happened is not answerable from data we can see. What we can say: the loss hit several domains registered in the same batch, and the restoration was one bulk action that got half the nameserver sets wrong — both point at a registrar-to-registry sync pipeline rather than anything domain-specific. The exposure worth naming: a domain registered at one provider but delegated to another has two systems that disagree about its nameservers, and the registry only listens to one of them.
Run the same checks yourself, line by line
An incident report you cannot verify is a story. These are the checks we used, in order, and each one works on any domain with no account and no vendor tooling.
1. Is there a delegation at all? The question that separates "still propagating" from "gone". Ask two independent resolvers so one broken cache cannot fool you:
dig NS example.com +short
dig @8.8.8.8 NS example.com +short
dig @1.1.1.1 NS example.com +short
2. Which zone denied it? On NXDOMAIN the answer section is empty and the authority section carries the SOA of the zone that issued the denial. If that SOA belongs to the TLD — app., com., de. — the registry itself is saying it has nothing for you. The same record's minimum field is the negative-cache TTL that keeps the denial alive after a repair:
dig SOA example.com
dig +trace NS example.com # the whole chain, root → TLD → your nameservers
3. The same without a terminal. Both resolvers answer over plain HTTPS — which is what our health check uses, and what the nameserver propagation checker runs from the browser. In the JSON, Status is the RCODE: 0 NOERROR, 2 SERVFAIL, 3 NXDOMAIN.
curl -s -H 'accept: application/dns-json' \
'https://dns.google/resolve?name=example.com&type=NS'
4. What does the registry hold, and when did it last change? RDAP is the registry's own public record. Its last changed event is what proved the 30 June repair happened at 17:30:04 and was not ours, and its nameserver list is the authoritative answer to "did my registrar actually push my change":
curl -s https://rdap.org/domain/example.com | jq '.events, .nameservers[].ldhName'
5. Did anyone on your side touch the zone? Ruling ourselves out turned a suspicion into a finding. Ask your provider's account-level audit log for the outage window; getting nothing back is a real answer.
curl -s -H "Authorization: Bearer $CF_API_TOKEN" \
"https://api.cloudflare.com/client/v4/accounts/$CF_ACCOUNT_ID/audit_logs?since=2026-06-18"
6. When did search traffic stop? In Search Console read impressions by day, not totals: a vertical cliff to zero on one date is the fingerprint of an availability failure, never of a ranking change. Then check the sitemap's last-read date and run URL Inspection on a page that used to rank. All three mattered here; the second one mattered most.
Steps 1 and 3 are also the first layer of clize domain check <domain>, which adds the three layers a public resolver cannot see.
Why every dashboard said "fine"
For four days we had two status indicators and both were green. Neither was lying about its own layer; both were answering a question we were not asking.
The Cloudflare zone said active. A zone status describes the zone's relationship with its provider — created, nameservers confirmed once, being served. It is stored state, set at activation, not re-derived from the public internet. Ours had activated on 13–14 June and nothing had changed it since, because nothing about the zone had changed. The delegation pointing the world at that zone was gone, and the zone had no way to know.
The registrar's field said verified: true. That reports what the registrar believes it has configured: intent, not outcome. Here it was the single most misleading signal available — the system that had lost the delegation was also the system reporting it as fine, and it kept saying so while accepting a re-submission with an HTTP 204 that changed nothing.
Whether a domain is alive on the public internet can only be read from public authoritative DNS, from at least two independent resolvers. A provider's zone status is a cached snapshot; a registrar's verification field is a claim about its own intentions. In this incident both said "fine" for four consecutive days.
Deploy success is not evidence either. Every deploy in that window succeeded, because deploys write into storage that was never broken. Green at the end of a deploy means the deploy worked, not that anyone can reach the result — two different claims needing two different checks, which is the boundary the four-layer domain health check exists to cross.
NOERROR, NXDOMAIN, SERVFAIL: how to tell in 30 seconds
If you are reading this mid-incident, this part saves you a day of waiting. An NS query at your apex has three answers, not two: NOERROR with NS records = the delegation is there and you are waiting for caches to expire; NXDOMAIN = the parent zone holds no delegation for your domain; SERVFAIL = the delegation exists but no authoritative server answered. Only the first is a waiting problem.
| Answer | What it means | What to do |
|---|---|---|
NOERROR + NS records | The registry holds a delegation and the nameservers behind it answered. | If the set shown is the new one you are done, and the rest is other people's caches expiring. If it is the old one, wait out the TTL. |
NXDOMAIN | The parent zone was asked and said the name does not exist: expired, never registered, or removed from the TLD zone — this incident. | Stop waiting. Go to the registrar and to the RDAP record. Nothing here is in flight. |
SERVFAIL | A delegation exists; the servers it points at could not answer. Wrong nameservers, a zone never created on the new host, or a stale DS record breaking DNSSEC. | Fix the zone or the DS record. Also not a waiting problem. |
Then the trap that made our outage look longer than it was. After a delegation is repaired, NXDOMAIN can keep coming back for the length of the negative-cache TTL — the SOA minimum. Resolvers cache denials the way they cache addresses, and RFC 2308 puts that memory at the smaller of the SOA minimum field and the TTL of the SOA record itself. Ours were fixed at 17:30 on 30 June and the sites did not return for most people that evening: their resolvers were still inside the negative window. The DNS TTL calculator does that arithmetic for your own zone.
What Google did, and what it did not undo by itself
The widely cited guides to recovering from deindexing list causes like unnatural links, thin content, cloaking, spammy structured data, an accidental noindex, an expired domain, a crashed server. None of them list "the registry lost your delegation" — and from a crawler's point of view that is the most complete failure available: not a 500, not a timeout, but a name that does not exist.
What we observed, in order:
- 28 June: impressions to zero on four unrelated sites on the same date. Ranking changes do not look like that.
- 2 July: deindexed after consecutive failed crawls — the same day the domains came back, because the removal was a lagging response to days of failure.
- Through mid-July: split recovery. Two domains climbed back to roughly 70–90%; two were still near zero on 17 July. The repair path made no difference — the domain the registrar had restored correctly by itself was among the two that did not recover.
- 19 July: the finding nobody warns you about. The outage broke Google's sitemap-reading rhythm and it had not resumed a month later. Search Console showed the last successful read stuck on 19 June for one domain and 16 June for another — dates from before the outage. Re-submitting by hand produced an immediate read; on one domain the discovered-URL count went from 18 to 199 in that single re-read, and on another a page that used to rank came back from URL Inspection as "URL is unknown to Google".
That last point is the practical one. Crawl and sitemap scheduling are set by past behaviour, so a site that fails for a week gets scheduled less often — and the backoff keeps applying after the site is healthy. Waiting for it to unwind cost us weeks. Re-submitting the sitemap is not cleanup after an outage; it is part of the repair.
The recovery checklist we now run
- Establish the state from public DNS, not from a dashboard. Two resolvers, NS and SOA, read the RCODE. Everything else waits on that answer.
- If it is NXDOMAIN, go up a layer. Check the registry's RDAP record and the registrar. Re-saving your nameservers in the panel is worth exactly one attempt; if the RDAP record does not change, this is not fixable from your side and the next action is a support ticket with the RDAP output attached.
- Read the negative-cache TTL before judging the fix. The SOA that carried the denial tells you how long the denial outlives the repair. Do not "fix" it a second time inside that window.
- Verify the nameservers you got back, one by one. Our bulk restoration returned half the domains pointing at the wrong provider — a restored delegation aimed at servers that are not serving your zone is a second outage wearing the first one's clothes.
- Rebuild what depends on DNS: records, certificate issuance, mail. MX failures stay silent for days because senders retry, so check them explicitly instead of waiting for a bounce.
- Re-submit every sitemap. Do not wait for the crawler's schedule to recover; it may not for a month. This is the step that cost us most.
- Request indexing for the pages that used to rank. If URL Inspection reports them as unknown, that is a queue position, not a verdict.
- Put a probe on the layer that failed. If the lesson is that the registry layer was unobserved, the fix is not a better dashboard — it is a scheduled check that reads public DNS and shouts.
Steps 6 and 7 are search-engine work, not DNS work, and they are why the two halves of this page belong together: the people writing about NXDOMAIN do not write about deindexing, and the people writing about deindexing do not list delegation loss as a cause. It is one outage.
Three things we changed in the product because of this
All three shipped in v0.22.0. They exist because this outage was undetectable with what we had, not because they were on a roadmap.
1. A four-layer health check. clize domain check <domain> reads, in order: the registry delegation from public DNS over HTTPS (Google's resolver first, Cloudflare's as fallback, the RCODE read as three states — the NXDOMAIN branch in that code is annotated with this incident), then the provider zone, then the hostname's binding to the serving worker, then whether the content is actually being served. One command, because a green light at any single layer was exactly what misled us. Without a domain argument it sweeps every domain on the account.
2. Delegation verification after every deploy, warning when the domain it just published to is no longer delegated where it should be. That closes the gap that let dozens of successful deploys land on four unreachable domains.
3. A scheduled sweep with an observation window. A cron job probes every managed domain every 30 minutes and records the result; an alert email goes out only after two consecutive failed rounds, so one flaky DoH answer never pages anyone, and a second email goes out on recovery. Silence for a week is no longer an available outcome.
There is a fourth item, less flattering, and leaving it out would make this report worse. Our own records about these domains were wrong in three ways: the stored registrar was wrong for three of them, one was missing its zone id, and — the one that cost us time — importing a domain we already managed silently downgraded its access mode to "external". That downgrade made our own CLI refuse to change nameservers on a domain we had registered ourselves, on the night of the incident, which is why one of the two wrong delegations had to be repaired through the registrar's API by hand. The import path no longer downgrades a managed domain, and the production data was corrected under an audited migration. A tool that will not let you fix your own outage is worse than no tool, and we would rather that sentence sat on a page we wrote.
For the surface these commands live on: Agent Domains covers buying, importing, pointing and monitoring domains from the CLI, programmatic domain registration covers doing it from code, and the domains MCP server covers doing it from an agent's tool list.
// FAQ
What does it mean when the registrar loses your nameservers?
It means the registry that runs your TLD no longer holds a delegation for your domain, because the registrar managing it stopped publishing one. Your records, zone and hosting are untouched and irrelevant: with no delegation, resolvers never reach them, so every lookup returns NXDOMAIN. The domain is not slow or misconfigured, it is absent. Waiting does not fix it, and re-saving the nameservers in the panel often does not either, because the failure is in the sync between registrar and registry.
How can I tell whether my domain was removed from the TLD zone?
Query NS and SOA at your apex from two independent resolvers. If both return NXDOMAIN and the SOA in the authority section belongs to the TLD itself — app., com., de. — the parent zone is denying your name and there is no delegation to follow. Confirm it against the registry's public RDAP record, which shows the nameservers the registry holds and when they last changed. If RDAP shows none, or different ones from your registrar panel, the registry is the copy that counts.
Can a DNS failure get a website deindexed by Google?
Yes, and faster than most recovery guides suggest. In our June 2026 incident four sites went NXDOMAIN on 27/28 June and Google had removed all four from the index by 2 July. From a crawler's point of view a missing delegation is more complete than a server error: the hostname does not resolve at all. The widely cited lists of deindexing causes do not include delegation loss, so people hitting it go looking for a penalty that does not exist. Check impressions by day — a vertical drop to zero on one date is an availability failure, not a ranking change.
Why did my domain still return NXDOMAIN after the delegation was restored?
Negative caching. Resolvers remember "this name does not exist" for the negative-cache TTL, which RFC 2308 defines as the smaller of the SOA minimum field and the TTL of the SOA record that carried the denial. Our delegations were restored at 17:30 UTC on 30 June, and most of the internet did not see the domains return until 1 and 2 July because the resolvers in use were still inside that window. Read the number off the SOA before concluding the repair failed, and do not repair it twice inside the window.
How long does it take to recover search rankings after a domain outage?
Ours split: two of four domains recovered roughly 70 to 90 percent of their traffic within about two weeks, and two were still near zero after three, with no relationship to how each had been repaired. What did make a difference was manual work. The outage broke Google's sitemap-reading schedule and it had not resumed a month later, the last successful read stuck on a date from before the outage. Re-submitting sitemaps produced an immediate re-read and, on one domain, took the discovered URL count from 18 to 199.
How do I monitor for this so it cannot happen silently again?
Probe the registry layer on a schedule and alert on it, because nothing else will. A provider zone status is a cached snapshot and a registrar's verification field reports its own intent — both said "fine" throughout our four-day outage. Clize now runs a public-DNS delegation probe against every managed domain every 30 minutes, alerts after two consecutive failures so a single flaky answer cannot page anyone, and notifies again on recovery. Run the same probe on demand with clize domain check, which adds three layers a public resolver cannot see.
Nobody notices a delegation until it is gone.
One command reads the registry delegation from two public resolvers, then the zone, the hostname binding and the served content. On the platform it runs every 30 minutes and emails you after two consecutive failures.
$ npm i -g @clize/clize && clize login $ clize domain check example.com $ clize domain check # every domain on the account[ Agent Domains → ]