418 I'm a Teapot

The story of HTTP 418 — the April Fools' HTCPCP status code that became the web's favorite easter egg — plus what actually happens when Google meets a 418, and why a WAF returning it on real pages is a problem.

First published: Jul 4, 2026 · Last updated: Jul 17, 2026 · Beginner
demand #12 in HTTP Errors#28 in HTTP Status Codes#231 in Technical SEO#311 on the site
1 evidence signal on this page

HTTP 418 I'm a teapot is a joke status code from the 1998 April Fools' HTCPCP RFC (RFC 2324): a teapot asked to brew coffee must refuse, because it's a teapot. It never got ordinary HTTP application semantics, but it's not 'unassigned' — RFC 9110 formally reserves the code, and IANA's registry lists it as (Unused), not available for ordinary reuse. A 2017 attempt to reclaim it lost to a 'save 418' campaign. Google's dated 2023 guidance treats 418 like any other non-429 4xx for Search, and its current generic crawler-status page doesn't cover exotic codes like this one at all. That only matters in practice when a WAF or bot-protection layer uses 418 to block requests (some do) and accidentally serves it to Googlebot — audit for it like any other 4xx. This site's /coffee URL returns a genuine 418, per the RFC.

TL;DR — 418 I'm a teapot is the web’s best-loved joke status code. It comes from RFC 2324, an April Fools’ RFC about coffee pots, and never got ordinary HTTP application semantics — but it’s formally reserved, not unassigned, per RFC 9110 and IANA’s registry. Google’s dated 2023 guidance treats it like any other non-429429 Too Many Requests is an HTTP client-error status code that means a client sent too many requests in a given time window — a mechanism called rate limiting. Unlike other 4xx codes, Google treats 429 as a server-overload signal and slows crawling instead of removing content. 4xx: the URL doesn’t get indexedStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed.. Try it on this site: /coffee answers with a real 418 — check the network tab.

Where 418 comes from

On April 1, 1998, the IETF published RFC 2324: the Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0) — a fully specified, entirely satirical protocol for controlling coffee pots over the web. Among its contributions: the BREW method, the Accept-Additions header (milk, syrup, whisky), and one immortal status code:

418 I’m a teapot — “Any attempt to brew coffee with a teapot should result in the error code ‘418 I’m a teapot’. The resulting entity body MAY be short and stout.”

Evidence for this claim RFC 2324 introduced 418 as an April Fools' status code for a teapot that refuses to brew coffee. Scope: The original 1998 Hyper Text Coffee Pot Control Protocol joke specification. Confidence: high · Verified: IETF: RFC 2324 §2.3.2 — 418 I'm a teapot

That’s the whole joke: you asked a teapot for coffee. It can’t. It’s a teapot.

Sixteen years later, RFC 7168 revisited the idea for tea-brewing appliances — another Informational, April Fools’ RFC, this one distinguishing an appliance that’s temporarily out of coffee from one that’s a teapot, permanently. Neither RFC gives 418 ordinary HTTP application semantics; both describe HTCPCP, a satirical protocol, not core HTTP.

Why it never became real HTTP

418 was never assigned ordinary HTTP semantics — but it’s not “unassigned” either. RFC 9110, the current HTTP Semantics specification, formally reserves the code (citing how often it’s been deployed as a joke), and the IANA HTTP Status Code Registry lists 418 as (Unused), referencing RFC 9110 — not available for ordinary reuse. Evidence for this claim RFC 9110 reserves status code 418, citing how often it has been deployed as a joke, and leaves open the possibility of assigning it a different meaning in the future if circumstances require it. Scope: Current HTTP Semantics reservation; RFC 9110 does not make 418 a normal production status, but does not permanently foreclose future reassignment. Confidence: high · Verified: IETF: RFC 9110 §15.5.19 — 418 (Unused) In 2017 the IETF’s HTTP working group proposed cleaning it up so the code could be reassigned to something useful. The internet responded with a “Save 418” campaign, and the reservation held — RFC 9110 also leaves the door open to reassigning it later if circumstances ever require it. Evidence for this claim The IANA HTTP Status Code Registry lists 418 as "(Unused)" and references RFC 9110; it is not an unassigned number available for ordinary reuse. Scope: IANA's current registry entry for status code 418. Confidence: high · Verified: IANA: HTTP Status Code Registry — 418

That reservation didn’t stop implementers: Go’s net/http and Python’s http module both expose a named 418 constant (StatusTeapot, HTTPStatus.IM_A_TEAPOT), and other frameworks and platforms have followed suit as an easter egg — Google’s own google.com/teapot among them. Evidence for this claim Go's net/http and Python's http module both expose a named 418 status constant, showing implementation recognition without requiring servers to emit 418. Scope: Named constants in two mainstream standard libraries; not evidence of a default response. Confidence: high · Verified: Go: net/http status constants (StatusTeapot) Python docs: http.HTTPStatus.IM_A_TEAPOT A named constant doesn’t mean a framework emits 418 by default; it means the code is recognized, not that it carries assigned HTTP semantics.

What a 418 means for SEO

Nothing special — and that’s the point worth knowing. Google doesn’t parse the joke; a named February 2023 Search Central post says all 4xx responses except 429 get the same treatment in Search: previously indexed URLs get removed over time and the page’s content isn’t used. Evidence for this claim Google's Search Central blog states that all 4xx responses except 429 receive the same treatment for Search: content isn't used and previously indexed URLs are removed over time. Scope: Google Search's dated, named statement on 4xx handling (not 418-specific). Confidence: high · Verified: Google Search Central Blog (Feb 2023): Don't use 403s or 404s for rate limiting That’s a general 4xx statement, not a teapot-specific rule — Google’s current generic crawlerA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index.-status page explicitly says exotic statuses like 418 aren’t covered by its table. Evidence for this claim Google's current generic crawler-status-code page states that exotic statuses such as 418 are not covered by its table. Scope: Scope note limiting Google's generic HTTP-status guidance to common codes. Confidence: high · Verified: Google: How HTTP status codes affect Google's crawlers In practice, a 418 behaves like another non-429 4xx as far as indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. goes; there’s no teapot-specific ranking rule, deindexingDeindexing means getting a URL to stop appearing in Google's search results. There's no single delete button — the right method depends on whether you own the page, whether removal is temporary or permanent, and whether the content should still exist. timeline, or recovery guarantee beyond that general statement.

Where this stops being funny: some WAF and bot-protection configurations use 418 as their “blocked request” response, on the theory that it’s distinctive and easy to spot in logs. If such a rule misfires on GooglebotGooglebot is Google's web crawler — the software that fetches pages so Google can index and rank them. It comes in two variants, Googlebot Smartphone (primary, under mobile-first indexing) and Googlebot Desktop, and runs an evergreen Chromium renderer., your real pages start answering 418 — and they’ll be treated exactly like pages that don’t exist.

If you see 418s in server logsLog file analysis is reading a web server's raw access logs to see exactly which URLs search engine crawlers actually requested, when, how often, and what status code they got. Unlike crawl tools or Search Console, logs are the unsampled, ground-truth record of what really happened. or crawl reports on URLs that matter, the status code alone doesn’t tell you which layer generated it — application code, a framework default, a WAF or bot-protection rule, a CDN, or the origin server can all produce it, and a response can pass through several of those on its way to the client. Check configuration, response headers, and request-path logs at each layer to find the actual source, then fix it like any other unwanted 4xx on an indexable URL.

The one on this site

In the spirit of the RFC, /coffee on this site returns an actual 418, short and stout, straight from the edge. This page exists so that easter egg has a canonical explanation — and so the http-status-codes cluster covers the one status code people actually smile about.

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.