{"id":8460,"date":"2021-03-11T14:37:37","date_gmt":"2021-03-11T14:37:37","guid":{"rendered":"https:\/\/docs_v3.dataforseo.com\/v3\/?page_id=8460"},"modified":"2026-08-06T15:12:57","modified_gmt":"2026-08-06T15:12:57","slug":"on_page-redirect-chains","status":"publish","type":"page","link":"https:\/\/docs.dataforseo.com\/v3\/on_page-redirect-chains\/","title":{"rendered":"on_page\/redirect_chains"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row][vc_column][vc_column_text]<\/p>\n<h2 id=\"setting-serp-tasks\">Redirect \u0421hains<\/h2>\n<p>\u200c\u200c<br \/>\nRedirect chains occur when there are at least two redirects between the initial URL and the destination URL. For example, if page A redirects to page B which redirects to page C, such a series of redirects is considered a redirect chain. Sometimes, if page B redirects back to page A, the redirect chain becomes closed and is considered a redirect loop.<\/p>\n<p>This endpoint will provide you with a full list of redirect URLs that form redirect chains. Using the Redirect \u0421hains endpoint, you&#8217;ll be able to quickly identify and trace down multiple redirects issues.<\/p>\n<p>[\/vc_column_text]    <div class=\"endpoint\">\n        <img decoding=\"async\" class=\"endpoint__icon\" src=\"https:\/\/docs.dataforseo.com\/v3\/wp-content\/themes\/dataforseo\/assets\/img\/icons\/checked-circle.svg\" alt=\"checked\">\n\n                    POST            <button class=\"btn-reset button-link copy-button\" data-href=\"https:\/\/api.dataforseo.com\/v3\/on_page\/redirect_chains\">\n                https:\/\/api.dataforseo.com\/v3\/on_page\/redirect_chains                <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n                    <use href=\"https:\/\/docs.dataforseo.com\/v3\/wp-content\/themes\/dataforseo\/assets\/img\/icons\/sprite.svg#layers\"><\/use>\n                <\/svg>\n            <\/button>\n            <\/div>\n    \t<article class=\"info-card info-card--yellow\">\n\t\t<header class=\"info-card__header\">\n\t\t\t<div class=\"info-card__icon\">\n\t\t\t\t<svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\">\n\t\t\t\t\t<use href=\"https:\/\/docs.dataforseo.com\/v3\/wp-content\/themes\/dataforseo\/assets\/img\/icons\/sprite.svg#label\"><\/use>\n\t\t\t\t<\/svg>\n\t\t\t<\/div>\n\t\t\t<div class=\"info-card__title\">Pricing<\/div>\n\t\t<\/header>\n\t\t<div class=\"info-card__content\">\n\t\t\t<p> Your account will not be charged for using this function. You can get the results of the task within the next 30 days for free.<br \/>\nThe cost can be calculated on the <a title=\"Pricing\" href=\"https:\/\/dataforseo.com\/pricing\/on-page\/onpage-api\" target=\"_blank\" rel=\"noopener noreferrer\">Pricing<\/a> page.<\/p>\n\t\t<\/div>\n\t<\/article>\n\t[vc_column_text]All POST data should be sent in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/JSON\">JSON<\/a> format (UTF-8 encoding). The task setting is done using the POST method. When setting a task, you should send all task parameters in the task array of the generic POST array.<\/p>\n<p><strong>Description of the fields for setting a task:<\/strong><br \/>\n<div class=\"dfs-doc-container dfs-doc-request\"><table><thead><tr><th>Field name<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr data-doc-id=\"id\"><td><code>id<\/code><\/td><td>string<\/td><td><p><em>ID of the task<\/em><br><strong>required field<\/strong><br>you can get this ID in the response of the <a href=\"\/v3\/on_page\/task_post\/\">Task POST<\/a> endpoint<br>example:<br>\"07131248-1535-0216-1000-17384017ad04\"<\/p><\/td><\/tr><tr data-doc-id=\"url\"><td><code>url<\/code><\/td><td>string<\/td><td><p><em>page URL<\/em><br>optional field<br>absolute URL of the target page<br>if you use this field, the API response will return only redirect chains which contain the specified URL<\/p><\/td><\/tr><tr data-doc-id=\"limit\"><td><code>limit<\/code><\/td><td>integer<\/td><td><p><em>the maximum number of returned redirect chains<\/em><br>optional field<br>default value: <code>100<\/code><br>maximum value: <code>1000<\/code><\/p><\/td><\/tr><tr data-doc-id=\"offset\"><td><code>offset<\/code><\/td><td>integer<\/td><td><p><em>offset in the results array of returned redirect chains<\/em><br>optional field<br>default value: <code>0<\/code><br>maximum value: <code>2000000<\/code><br>if you specify the <code>10<\/code> value, the first ten redirect chains in the results array will be omitted and the data will be provided for the successive redirect chains<\/p><\/td><\/tr><tr data-doc-id=\"filters\"><td><code>filters<\/code><\/td><td>array<\/td><td><p><em>array of results filtering parameters<\/em><br>optional field<br><strong>you can use only one filtering parameter with this endpoint<\/strong><p>the following filtering parameter is supported:<br><code>is_redirect_loop<\/code><br>the following operators are supported:<br><code>regex<\/code>, <code>not_regex<\/code>, <code>=<\/code>, <code><><\/code><p>examples:<br><code>[\"is_redirect_loop\",\"=\",\"true\"]<\/code><p><code>[\"is_redirect_loop\",\"<>\",\"false\"]<\/code><\/p><\/td><\/tr><tr data-doc-id=\"tag\"><td><code>tag<\/code><\/td><td>string<\/td><td><p><em>user-defined task identifier<\/em><br>optional field<br><em>the character limit is 255<\/em><br>you can use this parameter to identify the task and match it with the result<br>you will find the specified <code>tag<\/code> value in the <code>data<\/code> object of the response<\/p><\/td><\/tr><\/tbody><\/table><\/div><br \/>\nAs a response of the API server, you will receive <a href=\"https:\/\/en.wikipedia.org\/wiki\/JSON\">JSON<\/a>-encoded data containing a <code>tasks<\/code> array with the information specific to the set tasks.<\/p>\n<p><strong>Description of the fields in the results array:<\/strong><br \/>\n<div class=\"dfs-doc-container dfs-doc-response\"><div class=\"api-block-main\"><div class=\"api-section\"><table><thead><tr><th>Field name<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr data-doc-id=\"version\"><td><code>version<\/code><\/td><td>string<\/td><td><p><em>the current version of the API<\/em><\/p><\/td><\/tr><tr data-doc-id=\"status_code\"><td><code>status_code<\/code><\/td><td>integer<\/td><td><p><i>general status code<\/i><br>you can find the full list of the response codes <a href=\"\/v3\/appendix\/errors\">here<\/a><br><strong>Note:<\/strong> we strongly recommend designing a necessary system for handling related exceptional or error conditions<\/p><\/td><\/tr><tr data-doc-id=\"status_message\"><td><code>status_message<\/code><\/td><td>string<\/td><td><p><em>general informational message<\/em><br>you can find the full list of general informational messages <a href=\"\/v3\/appendix\/errors\">here<\/a><\/p><\/td><\/tr><tr data-doc-id=\"time\"><td><code>time<\/code><\/td><td>string<\/td><td><p><em>execution time, seconds<\/em><\/p><\/td><\/tr><tr data-doc-id=\"cost\"><td><code>cost<\/code><\/td><td>float<\/td><td><p><em>total <i>tasks<\/i> cost, USD<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks_count\"><td><code>tasks_count<\/code><\/td><td>integer<\/td><td><p><em>the number of tasks in the <strong><code>tasks<\/code><\/strong> array<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks_error\"><td><code>tasks_error<\/code><\/td><td>integer<\/td><td><p><em>the number of tasks in the <strong><code>tasks<\/code><\/strong> array returned with an error<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks\"><td><strong><code>tasks<\/code><\/strong><\/td><td>array<\/td><td><p><em>array of tasks<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-id\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>id<\/code><\/td><td>string<\/td><td><p><em>task identifier<\/em><br><strong>unique task identifier in our system in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universally_unique_identifier\">UUID<\/a> format<\/strong><\/p><\/td><\/tr><tr data-doc-id=\"tasks-status_code\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>status_code<\/code><\/td><td>integer<\/td><td><p><em>status code of the task<\/em><br>generated by DataForSEO; can be within the following range: 10000-60000<br>you can find the full list of the response codes <a href=\"\/v3\/appendix\/errors\">here<\/a><\/p><\/td><\/tr><tr data-doc-id=\"tasks-status_message\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>status_message<\/code><\/td><td>string<\/td><td><p><em>informational message of the task<\/em><br>you can find the full list of general informational messages <a href=\"\/v3\/appendix\/errors\">here<\/a><\/p><\/td><\/tr><tr data-doc-id=\"tasks-time\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>time<\/code><\/td><td>string<\/td><td><p><em>execution time, seconds<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-cost\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>cost<\/code><\/td><td>float<\/td><td><p><em>cost of the task, USD<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result_count\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>result_count<\/code><\/td><td>integer<\/td><td><p><em>number of elements in the <code>result<\/code> array<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-path\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>path<\/code><\/td><td>array<\/td><td><p><em>URL path<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-data\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<code>data<\/code><\/td><td>object<\/td><td><p><em>contains the same parameters that you specified in the POST request<br><\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result\"><td>&nbsp;&nbsp;&nbsp;&nbsp;<strong><code>result<\/code><\/strong><\/td><td>array<\/td><td><p><em>array of results<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-crawl_progress\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>crawl_progress<\/code><\/td><td>string<\/td><td><p><em>status of the crawling session<\/em><br>possible values: <code>in_progress<\/code>, <code>finished<\/code><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-crawl_status\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><code>crawl_status<\/code><\/strong><\/td><td>object<\/td><td><p><em>details of the crawling session<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-crawl_status-max_crawl_pages\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>max_crawl_pages<\/code><\/td><td>integer<\/td><td><p><em>maximum number of pages to crawl<\/em><br>indicates the <code>max_crawl_pages<\/code> limit you specified when setting a task<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-crawl_status-pages_in_queue\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>pages_in_queue<\/code><\/td><td>integer<\/td><td><p><em>number of pages that are currently in the crawling queue<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-crawl_status-pages_crawled\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>pages_crawled<\/code><\/td><td>integer<\/td><td><p><em>number of crawled pages<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-total_items_count\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>total_items_count<\/code><\/td><td>integer<\/td><td><p><em>total number of relevant items in the database<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items_count\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>items_count<\/code><\/td><td>integer<\/td><td><p><em>number of items in the results array<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><code>items<\/code><\/strong><\/td><td>array<\/td><td><p><em>items array<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-is_redirect_loop\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>is_redirect_loop<\/code><\/td><td>bool<\/td><td><p><em>indicates if redirects in <code>chain<\/code> start and end at the same URL<\/em><br>if <code>true<\/code>, the last URL from the chain redirects back to the original URL<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong><code>chain<\/code><\/strong><\/td><td>array<\/td><td><p><em>contains links that form a chain<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-type\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>type<\/code><\/td><td>string<\/td><td><p><em>type of the link = <strong>'redirect'<\/strong><\/em><br>HTTP redirect with 3xx status code<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-domain_from\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>domain_from<\/code><\/td><td>string<\/td><td><p><em>referring domain<\/em><br>the link was found on this domain<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-domain_to\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>domain_to<\/code><\/td><td>string<\/td><td><p><em>referenced domain<\/em><br>the link is pointing to this domain<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-page_from\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>page_from<\/code><\/td><td>string<\/td><td><p><em>referring page<\/em><br>relative URL of the page on which the link was found<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-page_to\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>page_to<\/code><\/td><td>string<\/td><td><p><em>referenced page<\/em><br>relative URL of the page to which the link is pointing<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-link_from\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>link_from<\/code><\/td><td>string<\/td><td><p><em>referring page<\/em><br>absolute URL of the page on which the link was found<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-link_to\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>link_to<\/code><\/td><td>string<\/td><td><p><em>referenced page<\/em><br>absolute URL of the page to which the link is pointing<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-dofollow\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>dofollow<\/code><\/td><td>boolean<\/td><td><p><em>indicates whether the link is dofollow<\/em><br>if the value is <code>true<\/code>, the link doesn't have a <code>rel=\"nofollow\"<\/code> attribute<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-page_from_scheme\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>page_from_scheme<\/code><\/td><td>string<\/td><td><p><em><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_URI_schemes\" target=\"_blank\" rel=\"noopener noreferrer\">url scheme<\/a> of the referring page<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-page_to_scheme\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>page_to_scheme<\/code><\/td><td>string<\/td><td><p><em><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_URI_schemes\" target=\"_blank\" rel=\"noopener noreferrer\">url scheme<\/a> of the referenced page<\/em><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-direction\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>direction<\/code><\/td><td>string<\/td><td><p><em>direction of the link<\/em><br>possible values: <code>internal<\/code>, <code>external<\/code><\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-is_broken\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>is_broken<\/code><\/td><td>boolean<\/td><td><p><em>link is broken<\/em><br>indicates whether a link is directing to a broken page or resource<\/p><\/td><\/tr><tr data-doc-id=\"tasks-result-items-chain-is_link_relation_conflict\"><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code>is_link_relation_conflict<\/code><\/td><td>boolean<\/td><td><p><em>indicates that the link may have a conflict with another link<\/em><br>if <code>true<\/code>, at least one link pointing to the URL in <code>link_to<\/code> has a <code>rel=\"nofollow\"<\/code> attribute <strong>and<\/strong> at least one is dofollow<\/p><\/td><\/tr><\/tbody><\/table><\/div><\/div><\/div><br \/>\n\u200c\u200c[\/vc_column_text][\/vc_column][\/vc_row]<\/p>\n<blockquote><p>Instead of \u2018login\u2019 and \u2018password\u2019 use your credentials from https:\/\/app.dataforseo.com\/api-access<\/p><\/blockquote><div id=\"curl\" class=\"tab-content example__content\"><div class=\"example__code\"><pre><code class=\"language-bash hljs\"># Instead of &#039;login&#039; and &#039;password&#039; use your credentials from https:\/\/app.dataforseo.com\/api-access \r\nlogin=&quot;login&quot; \r\npassword=&quot;password&quot; \r\ncred=&quot;$(printf ${login}:${password} | base64)&quot; \r\ncurl --location --request POST &quot;https:\/\/api.dataforseo.com\/v3\/on_page\/redirect_chains&quot; \r\n--header &quot;Authorization: Basic ${cred}&quot;  \r\n--header &quot;Content-Type: application\/json&quot; \r\n--data-raw &#039;[\r\n  {\r\n    &quot;id&quot;: &quot;03051327-4536-0216-1000-3b458a2cfcca&quot;,\r\n    &quot;url&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/a\/&quot;\r\n  }\r\n]&#039;<\/code><\/pre><\/div><\/div><div id=\"php\" class=\"tab-content example__content\"><div class=\"example__code\"><pre><code class=\"language-php hljs\">&lt;?php\r\n\/\/ You can download this file from here https:\/\/cdn.dataforseo.com\/v3\/examples\/php\/php_RestClient.zip\r\nrequire(&#039;RestClient.php&#039;);\r\n$api_url = &#039;https:\/\/api.dataforseo.com\/&#039;;\r\n\/\/ Instead of &#039;login&#039; and &#039;password&#039; use your credentials from https:\/\/app.dataforseo.com\/api-access\r\n$client = new RestClient($api_url, null, &#039;login&#039;, &#039;password&#039;);\r\n$post_array = array();\r\n\/\/ simple way to get a result\r\n$post_array[] = array(\r\n   &quot;id&quot; =&gt; &quot;03051327-4536-0216-1000-3b458a2cfcca&quot;,\r\n   &quot;url&quot; =&gt; &quot;https:\/\/test_rdr.dataforseo.com\/a\/&quot;\r\n);\r\ntry {\r\n   \/\/ POST \/v3\/on_page\/redirect_chains\r\n   \/\/ the full list of possible parameters is available in documentation\r\n   $result = $client-&gt;post(&#039;\/v3\/on_page\/redirect_chains&#039;, $post_array);\r\n   print_r($result);\r\n   \/\/ do something with post result\r\n} catch (RestClientException $e) {\r\n   echo &quot;n&quot;;\r\n   print &quot;HTTP code: {$e-&gt;getHttpCode()}n&quot;;\r\n   print &quot;Error code: {$e-&gt;getCode()}n&quot;;\r\n   print &quot;Message: {$e-&gt;getMessage()}n&quot;;\r\n   print  $e-&gt;getTraceAsString();\r\n   echo &quot;n&quot;;\r\n}\r\n$client = null;\r\n?&gt;<\/code><\/pre><\/div><\/div><div id=\"javascript\" class=\"tab-content example__content\"><div class=\"example__code\"><pre><code class=\"language-javascript hljs\">const post_array = [];\r\npost_array.push({\r\n  id = &quot;03051327-4536-0216-1000-3b458a2cfcca&quot;,\r\n  url = &quot;https:\/\/test_rdr.dataforseo.com\/a\/&quot;\r\n});\r\nconst axios = require(&#039;axios&#039;);\r\naxios({\r\n  method: &#039;post&#039;,\r\n  url: &#039;https:\/\/api.dataforseo.com\/v3\/on_page\/redirect_chains&#039;,\r\n  auth: {\r\n    username: &#039;login&#039;,\r\n    password: &#039;password&#039;\r\n  },\r\n  data: post_array,\r\n  headers: {\r\n    &#039;content-type&#039;: &#039;application\/json&#039;\r\n  }\r\n}).then(function (response) {\r\n  var result = response[&#039;data&#039;][&#039;tasks&#039;];\r\n  \/\/ Result data\r\n  console.log(result);\r\n}).catch(function (error) {\r\n  console.log(error);\r\n});<\/code><\/pre><\/div><\/div><div id=\"python\" class=\"tab-content example__content\"><div class=\"example__code\"><pre><code class=\"language-python hljs\">from random import Random\r\nfrom client import RestClient\r\n# You can download this file from here https:\/\/api.dataforseo.com\/v3\/_examples\/python\/_python_Client.zip\r\nclient = RestClient(&quot;login&quot;, &quot;password&quot;)\r\npost_data = dict()\r\n# simple way to get a result\r\npost_data[len(post_data)] = dict(\r\n    id=&quot;03051327-4536-0216-1000-3b458a2cfcca&quot;,\r\n    url=&quot;https:\/\/test_rdr.dataforseo.com\/a\/&quot;\r\n)\r\n# POST \/v3\/on_page\/redirect_chains\r\n# the full list of possible parameters is available in documentation\r\nresponse = client.post(&quot;\/v3\/on_page\/redirect_chains&quot;, post_data)\r\n# you can find the full list of the response codes here https:\/\/docs.dataforseo.com\/v3\/appendix\/errors\r\nif response[&quot;status_code&quot;] == 20000:\r\n    print(response)\r\n    # do something with result\r\nelse:\r\n    print(&quot;error. Code: %d Message: %s&quot; % (response[&quot;status_code&quot;], response[&quot;status_message&quot;]))<\/code><\/pre><\/div><\/div><div id=\"csharp\" class=\"tab-content example__content\"><div class=\"example__code\"><pre><code class=\"language-csharp hljs\">using Newtonsoft.Json;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Net.Http;\r\nusing System.Net.Http.Headers;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nnamespace DataForSeoDemos\r\n{\r\n    public static partial class Demos\r\n    {\r\n        public static async Task on_page_redirect_chains()\r\n        {\r\n            var httpClient = new HttpClient\r\n            {\r\n                BaseAddress = new Uri(&quot;https:\/\/api.dataforseo.com\/&quot;),\r\n                \/\/ Instead of &#039;login&#039; and &#039;password&#039; use your credentials from https:\/\/app.dataforseo.com\/api-access\r\n                DefaultRequestHeaders = { Authorization = new AuthenticationHeaderValue(&quot;Basic&quot;, Convert.ToBase64String(Encoding.ASCII.GetBytes(&quot;login:password&quot;))) }\r\n            };\r\n            var postData = new List&lt;object&gt;();\r\n            \/\/ simple way to get a result\r\n            postData.Add(new\r\n            {\r\n                id = &quot;03051327-4536-0216-1000-3b458a2cfcca&quot;,\r\n                url = &quot;https:\/\/test_rdr.dataforseo.com\/a\/&quot;\r\n            });\r\n            \/\/ POST \/v3\/on_page\/redirect_chains\r\n            \/\/ the full list of possible parameters is available in documentation\r\n            var taskPostResponse = await httpClient.PostAsync(&quot;\/v3\/on_page\/redirect_chains&quot;, new StringContent(JsonConvert.SerializeObject(postData)));\r\n            var result = JsonConvert.DeserializeObject&lt;dynamic&gt;(await taskPostResponse.Content.ReadAsStringAsync());\r\n            \/\/ you can find the full list of the response codes here https:\/\/docs.dataforseo.com\/v3\/appendix\/errors\r\n            if (result.status_code == 20000)\r\n            {\r\n                \/\/ do something with result\r\n                Console.WriteLine(result);\r\n            }\r\n            else\r\n                Console.WriteLine($&quot;error. Code: {result.status_code} Message: {result.status_message}&quot;);\r\n        }\r\n    }\r\n}<\/code><\/pre><\/div><\/div><blockquote><p>The above command returns JSON structured like this:<\/p><\/blockquote><div class=\"example example--json\"><div class=\"example__content\"><div class=\"example__code example__code-json\"><pre><code class=\"language-json hljs\">{\r\n  &quot;version&quot;: &quot;0.1.20210622&quot;,\r\n  &quot;status_code&quot;: 20000,\r\n  &quot;status_message&quot;: &quot;Ok.&quot;,\r\n  &quot;time&quot;: &quot;2.9408 sec.&quot;,\r\n  &quot;cost&quot;: 0,\r\n  &quot;tasks_count&quot;: 1,\r\n  &quot;tasks_error&quot;: 0,\r\n  &quot;tasks&quot;: [\r\n    {\r\n      &quot;id&quot;: &quot;07061451-2692-0216-1000-33d5e1cf58cd&quot;,\r\n      &quot;status_code&quot;: 20000,\r\n      &quot;status_message&quot;: &quot;Ok.&quot;,\r\n      &quot;time&quot;: &quot;2.8536 sec.&quot;,\r\n      &quot;cost&quot;: 0,\r\n      &quot;result_count&quot;: 1,\r\n      &quot;path&quot;: [\r\n        &quot;v3&quot;,\r\n        &quot;on_page&quot;,\r\n        &quot;redirect_chains&quot;\r\n      ],\r\n      &quot;data&quot;: {\r\n        &quot;api&quot;: &quot;on_page&quot;,\r\n        &quot;function&quot;: &quot;redirect_chains&quot;,\r\n        &quot;url&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/a\/&quot;\r\n      },\r\n      &quot;result&quot;: [\r\n        {\r\n          &quot;crawl_progress&quot;: &quot;finished&quot;,\r\n          &quot;crawl_status&quot;: {\r\n            &quot;max_crawl_pages&quot;: 5,\r\n            &quot;pages_in_queue&quot;: 0,\r\n            &quot;pages_crawled&quot;: 5\r\n          },\r\n          &quot;total_items_count&quot;: 1,\r\n          &quot;items_count&quot;: 1,\r\n          &quot;items&quot;: [\r\n            {\r\n              &quot;is_redirect_loop&quot;: false,\r\n              &quot;chain&quot;: [\r\n                {\r\n                  &quot;type&quot;: &quot;redirect&quot;,\r\n                  &quot;domain_from&quot;: &quot;test_rdr.dataforseo.com&quot;,\r\n                  &quot;domain_to&quot;: &quot;test_rdr.dataforseo.com&quot;,\r\n                  &quot;page_from&quot;: &quot;\/a\/&quot;,\r\n                  &quot;page_to&quot;: &quot;\/b\/&quot;,\r\n                  &quot;link_from&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/a\/&quot;,\r\n                  &quot;link_to&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/b\/&quot;,\r\n                  &quot;dofollow&quot;: true,\r\n                  &quot;page_from_scheme&quot;: &quot;https&quot;,\r\n                  &quot;page_to_scheme&quot;: &quot;https&quot;,\r\n                  &quot;direction&quot;: &quot;internal&quot;,\r\n                  &quot;is_broken&quot;: false,\r\n                  &quot;is_link_relation_conflict&quot;: false\r\n                },\r\n                {\r\n                  &quot;type&quot;: &quot;redirect&quot;,\r\n                  &quot;domain_from&quot;: &quot;test_rdr.dataforseo.com&quot;,\r\n                  &quot;domain_to&quot;: &quot;test_rdr.dataforseo.com&quot;,\r\n                  &quot;page_from&quot;: &quot;\/b\/&quot;,\r\n                  &quot;page_to&quot;: &quot;\/c\/&quot;,\r\n                  &quot;link_from&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/b\/&quot;,\r\n                  &quot;link_to&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/c\/&quot;,\r\n                  &quot;dofollow&quot;: true,\r\n                  &quot;page_from_scheme&quot;: &quot;https&quot;,\r\n                  &quot;page_to_scheme&quot;: &quot;https&quot;,\r\n                  &quot;direction&quot;: &quot;internal&quot;,\r\n                  &quot;is_broken&quot;: false,\r\n                  &quot;is_link_relation_conflict&quot;: false\r\n                },\r\n                {\r\n                  &quot;type&quot;: &quot;redirect&quot;,\r\n                  &quot;domain_from&quot;: &quot;test_rdr.dataforseo.com&quot;,\r\n                  &quot;domain_to&quot;: &quot;test_rdr.dataforseo.com&quot;,\r\n                  &quot;page_from&quot;: &quot;\/c\/&quot;,\r\n                  &quot;page_to&quot;: &quot;\/test_chain.html&quot;,\r\n                  &quot;link_from&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/c\/&quot;,\r\n                  &quot;link_to&quot;: &quot;https:\/\/test_rdr.dataforseo.com\/test_chain.html&quot;,\r\n                  &quot;dofollow&quot;: true,\r\n                  &quot;page_from_scheme&quot;: &quot;https&quot;,\r\n                  &quot;page_to_scheme&quot;: &quot;https&quot;,\r\n                  &quot;direction&quot;: &quot;internal&quot;,\r\n                  &quot;is_broken&quot;: false,\r\n                  &quot;is_link_relation_conflict&quot;: false\r\n                }\r\n              ]\r\n            }\r\n          ]\r\n        }\r\n      ]\r\n    }\r\n  ]\r\n}<\/code><\/pre><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>[vc_row][vc_column][vc_column_text] Redirect \u0421hains \u200c\u200c Redirect chains occur when there are at least two redirects between the initial URL and the destination URL. For example, if page A redirects to page B which redirects to page C, such a series of redirects is considered a redirect chain. Sometimes, if page B redirects back to page A, [&hellip;]<\/p>\n","protected":false},"author":17,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template.php","meta":{"apibase_doc_request_yaml":"parameters:\n  - name: id\n    type: string\n    description: |\n      <em>ID of the task<\/em><br><strong>required field<\/strong><br>you can get this ID in the response of the <a href=\"\/v3\/on_page\/task_post\/\">Task POST<\/a> endpoint<br>example:<br>\"07131248-1535-0216-1000-17384017ad04\"\n  - name: url\n    type: string\n    description: |\n      <em>page URL<\/em><br>optional field<br>absolute URL of the target page<br>if you use this field, the API response will return only redirect chains which contain the specified URL\n  - name: limit\n    type: integer\n    description: |\n      <em>the maximum number of returned redirect chains<\/em><br>optional field<br>default value: <code>100<\/code><br>maximum value: <code>1000<\/code>\n  - name: offset\n    type: integer\n    description: |\n      <em>offset in the results array of returned redirect chains<\/em><br>optional field<br>default value: <code>0<\/code><br>maximum value: <code>2000000<\/code><br>if you specify the <code>10<\/code> value, the first ten redirect chains in the results array will be omitted and the data will be provided for the successive redirect chains\n  - name: filters\n    type: array\n    description: |\n      <em>array of results filtering parameters<\/em><br>optional field<br><strong>you can use only one filtering parameter with this endpoint<\/strong><p>the following filtering parameter is supported:<br><code>is_redirect_loop<\/code><br>the following operators are supported:<br><code>regex<\/code>, <code>not_regex<\/code>, <code>=<\/code>, <code>&lt;&gt;<\/code><p>examples:<br><code>[\"is_redirect_loop\",\"=\",\"true\"]<\/code><p><code>[\"is_redirect_loop\",\"&lt;&gt;\",\"false\"]<\/code>\n  - name: tag\n    type: string\n    description: |\n      <em>user-defined task identifier<\/em><br>optional field<br><em>the character limit is 255<\/em><br>you can use this parameter to identify the task and match it with the result<br>you will find the specified <code>tag<\/code> value in the <code>data<\/code> object of the response","apibase_doc_request_additional_yaml":"","apibase_doc_response_yaml":"parameters:\n  - name: version\n    type: string\n    description: |\n      <em>the current version of the API<\/em>\n  - name: status_code\n    type: integer\n    description: |\n      <i>general status code<\/i><br>you can find the full list of the response codes <a href=\"\/v3\/appendix\/errors\">here<\/a><br><strong>Note:<\/strong> we strongly recommend designing a necessary system for handling related exceptional or error conditions\n  - name: status_message\n    type: string\n    description: |\n      <em>general informational message<\/em><br>you can find the full list of general informational messages <a href=\"\/v3\/appendix\/errors\">here<\/a>\n  - name: time\n    type: string\n    description: |\n      <em>execution time, seconds<\/em>\n  - name: cost\n    type: float\n    description: |\n      <em>total <i>tasks<\/i> cost, USD<\/em>\n  - name: tasks_count\n    type: integer\n    description: |\n      <em>the number of tasks in the <strong><code>tasks<\/code><\/strong> array<\/em>\n  - name: tasks_error\n    type: integer\n    description: |\n      <em>the number of tasks in the <strong><code>tasks<\/code><\/strong> array returned with an error<\/em>\n  - name: tasks\n    type: array\n    description: |\n      <em>array of tasks<\/em>\n    items:\n      children:\n        - name: id\n          type: string\n          description: |\n            <em>task identifier<\/em><br><strong>unique task identifier in our system in the <a href=\"https:\/\/en.wikipedia.org\/wiki\/Universally_unique_identifier\">UUID<\/a> format<\/strong>\n        - name: status_code\n          type: integer\n          description: |\n            <em>status code of the task<\/em><br>generated by DataForSEO; can be within the following range: 10000-60000<br>you can find the full list of the response codes <a href=\"\/v3\/appendix\/errors\">here<\/a>\n        - name: status_message\n          type: string\n          description: |\n            <em>informational message of the task<\/em><br>you can find the full list of general informational messages <a href=\"\/v3\/appendix\/errors\">here<\/a>\n        - name: time\n          type: string\n          description: |\n            <em>execution time, seconds<\/em>\n        - name: cost\n          type: float\n          description: |\n            <em>cost of the task, USD<\/em>\n        - name: result_count\n          type: integer\n          description: |\n            <em>number of elements in the <code>result<\/code> array<\/em>\n        - name: path\n          type: array\n          description: |\n            <em>URL path<\/em>\n        - name: data\n          type: object\n          description: |\n            <em>contains the same parameters that you specified in the POST request<br><\/em>\n        - name: result\n          type: array\n          description: |\n            <em>array of results<\/em>\n          items:\n            children:\n              - name: crawl_progress\n                type: string\n                description: |\n                  <em>status of the crawling session<\/em><br>possible values: <code>in_progress<\/code>, <code>finished<\/code>\n              - name: crawl_status\n                type: object\n                description: |\n                  <em>details of the crawling session<\/em>\n                children:\n                  - name: max_crawl_pages\n                    type: integer\n                    description: |\n                      <em>maximum number of pages to crawl<\/em><br>indicates the <code>max_crawl_pages<\/code> limit you specified when setting a task\n                  - name: pages_in_queue\n                    type: integer\n                    description: |\n                      <em>number of pages that are currently in the crawling queue<\/em>\n                  - name: pages_crawled\n                    type: integer\n                    description: |\n                      <em>number of crawled pages<\/em>\n              - name: total_items_count\n                type: integer\n                description: |\n                  <em>total number of relevant items in the database<\/em>\n              - name: items_count\n                type: integer\n                description: |\n                  <em>number of items in the results array<\/em>\n              - name: items\n                type: array\n                description: |\n                  <em>items array<\/em>\n                items:\n                  children:\n                    - name: is_redirect_loop\n                      type: bool\n                      description: |\n                        <em>indicates if redirects in <code>chain<\/code> start and end at the same URL<\/em><br>if <code>true<\/code>, the last URL from the chain redirects back to the original URL\n                    - name: chain\n                      type: array\n                      description: |\n                        <em>contains links that form a chain<\/em>\n                      items:\n                        children:\n                          - name: type\n                            type: string\n                            description: |\n                              <em>type of the link = <strong>'redirect'<\/strong><\/em><br>HTTP redirect with 3xx status code\n                          - name: domain_from\n                            type: string\n                            description: |\n                              <em>referring domain<\/em><br>the link was found on this domain\n                          - name: domain_to\n                            type: string\n                            description: |\n                              <em>referenced domain<\/em><br>the link is pointing to this domain\n                          - name: page_from\n                            type: string\n                            description: |\n                              <em>referring page<\/em><br>relative URL of the page on which the link was found\n                          - name: page_to\n                            type: string\n                            description: |\n                              <em>referenced page<\/em><br>relative URL of the page to which the link is pointing\n                          - name: link_from\n                            type: string\n                            description: |\n                              <em>referring page<\/em><br>absolute URL of the page on which the link was found\n                          - name: link_to\n                            type: string\n                            description: |\n                              <em>referenced page<\/em><br>absolute URL of the page to which the link is pointing\n                          - name: dofollow\n                            type: boolean\n                            description: |\n                              <em>indicates whether the link is dofollow<\/em><br>if the value is <code>true<\/code>, the link doesn't have a <code>rel=\"nofollow\"<\/code> attribute\n                          - name: page_from_scheme\n                            type: string\n                            description: |\n                              <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_URI_schemes\" target=\"_blank\" rel=\"noopener noreferrer\">url scheme<\/a> of the referring page<\/em>\n                          - name: page_to_scheme\n                            type: string\n                            description: |\n                              <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_URI_schemes\" target=\"_blank\" rel=\"noopener noreferrer\">url scheme<\/a> of the referenced page<\/em>\n                          - name: direction\n                            type: string\n                            description: |\n                              <em>direction of the link<\/em><br>possible values: <code>internal<\/code>, <code>external<\/code>\n                          - name: is_broken\n                            type: boolean\n                            description: |\n                              <em>link is broken<\/em><br>indicates whether a link is directing to a broken page or resource\n                          - name: is_link_relation_conflict\n                            type: boolean\n                            description: |\n                              <em>indicates that the link may have a conflict with another link<\/em><br>if <code>true<\/code>, at least one link pointing to the URL in <code>link_to<\/code> has a <code>rel=\"nofollow\"<\/code> attribute <strong>and<\/strong> at least one is dofollow","footnotes":""},"class_list":["post-8460","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/pages\/8460","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/comments?post=8460"}],"version-history":[{"count":28,"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/pages\/8460\/revisions"}],"predecessor-version":[{"id":26176,"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/pages\/8460\/revisions\/26176"}],"wp:attachment":[{"href":"https:\/\/docs.dataforseo.com\/v3\/wp-json\/wp\/v2\/media?parent=8460"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}