Skip to main content

What are HTTP Status Codes and what do they mean?

Modified on: Mon, 19 Dec, 2022 at 4:25 PM

What are HTTP status codes?

HTTP Response Codes indicate whether specific HTTP requests have been successfully completed. Basically, it's an indicator of whether a web page has loaded successfully. Responses are grouped into five classes: informational responses, successful responses, re-directs, client errors, and server errors.

Where can I see the HTTP status code?

The HTTP status code for a link can be found in the following locations:

Quality Assurance > Inventory > LinksLinks table in the QA inventory

Quality Assurance > Page Report > Click on broken link

Screenshot showing that the HTTP status code is found under the 'Occurrences on this page' header, after following the beforementioned path.

What do the status codes mean?

Below is a list of common HTTP status codes and their definitions. 

Note: This is not an extensive list of HTTP error codes. For a more detailed list, please refer to the following article: HTTP Response Codes.

Status codeStatus textDescription
200OKThe request has succeeded. The meaning of success varies depending on the HTTP method:
  • GET: The resource has been fetched and is transmitted in the message body.
  • HEAD: The entity headers are in the message body.
  • POST: The resource describing the result of the action is transmitted in the message body.
  • TRACE: The message body contains the request message as received by the server
300Multiple ChoiceThe request has more than one possible response. The user-agent or user should choose one of them. There is no standardized way to choose one of the responses.
301Moved PermanentlyThis response code means that the URL of the requested resource has been changed. The new URI is probably given in the response.
302FoundThis response code means that the URI of the requested resource has been temporarily changed. New changes in the URI might be made in the future. Therefore, this same URI should be used by the client in future requests.
303See OtherThe server sent this response to direct the client to get the requested resource from another URI with a GET request.
304Not ModifiedThis is used for caching purposes to tell the client that the response has not been modified. So, the client can continue to use the same cached version of the response.
307Temporary RedirectThe server sent this response to the directing client to get the requested resource from another URI with the same method that used the prior request. This has the same semantic as the 302 Found HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.
308Permanent RedirectThis means that the resource is now permanently located at another URI, specified by the Location: HTTP Response header. This has the same semantics as the 301 Moved Permanently HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.
400Bad RequestThis response means that server could not understand the request due to invalid syntax.
401UnauthorizedAuthentication is needed to get the requested response. This is similar to the 403 response code, but in this case, authentication is possible.
403ForbiddenThe client does not have access rights to the content so the server is not allowing access to the requested response.
404Not Found

The server cannot find the requested resource. This response code is well-known due to its frequent occurrence.

The 404 status code is considered a Broken Link in the Siteimprove platform.

Note: This is not the same as a 'Soft 404'. For information on this see - What is a Soft 404?
405Method Not AllowedThe request method is known by the server but has been disabled and cannot be used. The two mandatory methods, GET and HEAD, must never be disabled and should not return this error code.
406Not Acceptable

The 406 status code indicates that the target resource does not have a current representation that would be acceptable to the user agent, according to the proactive negotiation header fields received in the request, and the server is unwilling to supply a default representation.

Check the URL in a browser. Try a different URL on the same domain as the URL you are requesting to see if you can identify where the issue lies. 

408Request TimeoutThis response is sent on an idle connection by some servers, even without any previous request by the client. It means that the server would like to shut down this unused connection. This response is used much more since some browsers, like Chrome or IE9, use HTTP pre-connection mechanisms to speed up surfing (see bug 881804, which tracks the future implementation of such a mechanism in Firefox). Also, note that some servers merely shut down the connection without sending this message.

The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required.

Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.


This response is sent when the requested content has been permanently deleted from the server, with no forwarding address.

The 410 status code is considered a Broken Link in the Siteimprove platform.

412Precondition FailedOne or more conditions given in the request header fields evaluated to false when tested on the server. This response code allows the client to place preconditions on the current resource state (its current representations and metadata) and, thus, prevent the request method from being applied if the target resource is in an unexpected state.
429Too Many Requests

The user has sent too many requests in a given amount of time. Intended for use with rate-limiting schemes to control the rate of traffic sent or received to prevent DoS attacks.

500Internal Server ErrorThe server has encountered a situation it doesn't know how to handle.
502Bad GatewayThis error response means that the server while working as a gateway to get the response needed to handle the request, got an invalid response.
503Service UnavailableThe server is not ready to handle the request. Common causes are a server that is down for maintenance or overloaded. Note that together with this response, a user-friendly page explaining the problem should be sent. This response should be used for temporary conditions and the Retry-After: HTTP header should, if possible, contain the estimated time before the recovery of the service. The webmaster must also take care of the caching-related headers that are sent along with this response, as these temporary condition responses should usually not be cached.

Unable to process request,
Request denied, or blank in some cases.

This is not an official HTTP status code. It is used as a “catch-all” error code presented when a more specific error code is not provided by the server we are trying to access.
We see this behavior on social media sites like LinkedIn which either wish to prevent crawlers altogether or limit the number of requests made. This response can be intermittent as in some cases a server will block the crawler IP address for a limited time period.
In such cases, we suggest you re-crawl the link at a later stage. If the problem persists with a link that you know to be working, you can dismiss this specific link in the page report.


This is not an official HTTP status code. The link appears to work but the resource this link refers to is no longer available, for example, a video.

Unable to connect*

This is not an official HTTP status code. You can receive this error when the request was aborted, i.e, The connection was closed unexpectedly. You may also see this error if there are TLS handling issues.

*Unofficial HTTP status codes are also seen but these are not standardized in the status code definitions from the Internet Engineering Task Force (IETF) in RFC 7231.

Did you find it helpful? Yes No

Send feedback
Sorry we couldn't be helpful. Help us improve this article with your feedback.