Simple Node.JS api that will let you see info about every jump in a chained redirect. This API will show response status on each jump in a redirect chain, and return the entire chain as an array of objects for your own manipulation.
If a jump resolves to 404, you can even try to "Fix dead" redirects, by adding the "fixDead":true
parameter. That will look at the last jump that resolves to 404, and move backwards on the urlstructure until it finds a path that is no longer 404.
Personally I have used this API to check redirects in order to resolve chained redirects, and to find, and potentially fix dead redirects for SEO purposes. But I guess you can use this for whatever you would like.
If you want to know more about redirect chains, and why it is bad for SEO, take a look at this article from ContentKing (please note that I'm not affiliated):
https://www.contentkingapp.com/academy/redirects/faq/redirect-chains/
npm install
You can also deploy directly to Heroku:
Running localhost - First start the server: npm app
Then you can do POST requests to the API via localhost:5000/api
Running heroku - if you clicked the onebutton-install above, it should be running automtically.
Remember to add the /api
to the heroku url you get after the install.
With the API running, you can test it with Postman
At this moment maximum amount of jumps are hardcoded to 5
.
This effectively kills redirect loops, and keeps the API relatively fast when hitting heavy chained redirects. If your chained redirect have more than 5 jumps consider increasing the maxJumps
variable in routes/api.js
API only accepts POST requests in JSON with the following paramters
Param | Description | Required |
---|---|---|
url |
Absolute path to check for redirects. | Yes |
fixDead |
If hitting a dead (404) jump, try to resolve it | No |
Exaple POST Request to the API:
{
"url": "http://ing.dk/247528"
}
Key | Description |
---|---|
statusCode |
resolved http response statuscode on end-point |
resolvedUrl |
the resolved url from end of redirect chain |
jumpCount |
number of jumps the redirect made to resolve |
jumps |
array of objects, containing jump object info |
Example response:
{
"statusCode": 200,
"resolvedUrl": "https://www.google.dk/",
"jumpCount": 1,
"jumps": [...]
}
The jumps
array have the following response keys:
Key | Description |
---|---|
statusCode |
http response statuscode on the specific redirect jump |
jumpFrom |
the absolute url the redirect came from |
jumpTo |
the absolute url the redirect points to |
Example response:
[
{
"statusCode": 301,
"jumpFrom": "http://ing.dk/247528",
"jumpTo": "https://ing.dk/247528"
},
{
"statusCode": 301,
"jumpFrom": "https://ing.dk/247528",
"jumpTo": "https://ing.dk/artikel/skader-underernaering-gives-videre-boern-247528"
}
]
POST Request to the API:
{
"url": "https://google.dk"
}
Response:
{
"statusCode": 200,
"resolvedUrl": "https://www.google.dk/",
"jumpCount": 1,
"jumps": [
{
"statusCode": 301,
"jumpFrom": "https://google.dk",
"jumpTo": "https://www.google.dk/"
}
]
}
POST Request to the API:
{
"url": "http://ing.dk/247528"
}
Response:
{
"statusCode": 200,
"resolvedUrl": "https://ing.dk/artikel/skader-underernaering-gives-videre-boern-247528",
"jumpCount": 2,
"jumps": [
{
"statusCode": 301,
"jumpFrom": "http://ing.dk/247528",
"jumpTo": "https://ing.dk/247528"
},
{
"statusCode": 301,
"jumpFrom": "https://ing.dk/247528",
"jumpTo": "https://ing.dk/artikel/skader-underernaering-gives-videre-boern-247528"
}
]
}
POST Request to the API:
{
"url": "http://ing.dk/2475128"
}
Response:
{
"statusCode": 404,
"resolvedUrl": "https://ing.dk/2475128",
"jumpCount": 1,
"jumps": [
{
"statusCode": 301,
"jumpFrom": "http://ing.dk/2475128",
"jumpTo": "https://ing.dk/2475128"
}
]
}
POST Request to the API:
{
"url": "http://ing.dk/2475128",
"fixDead": true
}
Response:
{
"statusCode": 200,
"resolvedUrl": "https://ing.dk",
"jumpCount": 2,
"jumps": [
{
"statusCode": 301,
"jumpFrom": "http://ing.dk/2475128",
"jumpTo": "https://ing.dk/2475128"
},
{
"statusCode": 404,
"jumpFrom": "https://ing.dk/2475128",
"jumpTo": "https://ing.dk"
}
]
}