वेबसाइट बैकलिंक्स चेकर टूल: स्क्रिप्ट जिन्हें आप शेड्यूल कर सकते हैं
यहाँ की हर कॉल curl या किसी भी HTTP क्लाइंट के साथ काम करती है। की बदलें, पैटर्न बनाए रखें: कॉल, सेव, डिफ।
ArchiLinks research team ·

मूल नियम
एक कॉल, एक बिल। हर रिक्वेस्ट को एक बार चार्ज किया जाता है, चाहे रो की संख्या कुछ भी हो, और एक अकेली कॉल 1,000 रो तक लौटाती है। डीप पेजिनेशन 50,000 रो पर रुक जाती है, और per 10 से 5,000 तक के मान स्वीकार करता है।
इससे स्क्रिप्ट लिखने का तरीका बदल जाता है। per=1000 मांगें और केवल तभी पेज करें जब आपको और चाहिए, क्योंकि छोटे पेजों पर बने वेबसाइट बैकलिंक्स चेकर टूल से बिना किसी लाभ के आपकी लागत दस गुना बढ़ जाती है। एरर स्पष्ट हैं: 401 HTTP किसी गायब की के लिए, 402 क्रेडिट खत्म होने पर, और हर JSON बॉडी में ok होता है।
हर स्क्रिप्ट को एक बार हाथ से एक छोटे डोमेन पर चलाएं और JSON पढ़ें। की के नाम, रो कंटेनर और पेजिनेशन फील्ड्स एक असली रिस्पॉन्स से आने चाहिए, हमारे उदाहरणों से नहीं, इसलिए किसी क्रॉन जॉब पर निर्भर होने से पहले उन्हें कन्फर्म करें।
Python: तारीख वाला स्नैपशॉट सेव करें
रिस्पॉन्स में फील्ड के नाम उदाहरण के लिए दिखाए गए हैं। किसी की पर भरोसा करने से पहले एक रिस्पॉन्स प्रिंट करें।
import json, sys, datetime, requests
BASE = "https://archilinks.com/api.php"
KEY = "sk_live_..."
def snapshot(domain, action="refdomains"):
r = requests.get(BASE, params={"action": action, "q": domain, "per": 1000, "key": KEY}, timeout=30)
if r.status_code in (401, 402):
sys.exit(f"API said {r.status_code}: check key or balance")
r.raise_for_status()
body = r.json()
assert body.get("ok"), body
name = f"{domain}-{action}-{datetime.date.today()}.json"
json.dump(body, open(name, "w"), indent=1)
print(name, body.get("_credits"))
snapshot(sys.argv[1])Node: एक लिस्ट के लिए बल्क डोमेन रेटिंग
bulk_dr एक कॉल में 1 क्रेडिट के बदले 2,000 डोमेन तक लेता है, domains पैरामीटर के साथ GET द्वारा या POST बॉडी द्वारा। नीचे दिया गया कॉमा सेपरेटर एक उदाहरण है; पहले दो डोमेन के साथ टेस्ट करें। Node 18 या उससे नया fetch इनबिल्ट है।
const domains = ["example.com", "example.org"];
const url = new URL("https://archilinks.com/api.php");
url.search = new URLSearchParams({
action: "bulk_dr",
domains: domains.join(","),
key: "sk_live_...",
});
const res = await fetch(url);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(JSON.stringify(await res.json(), null, 2));Bash और jq: वीकली डिफ
तारीख के साथ एक स्नैपशॉट सेव करें, फिर दो फाइलों की तुलना करें। क्रॉन को वीकली या मासिक रखें; इंडेक्स लगभग मासिक अपडेट होता है।
# crontab: 0 6 1 * * /opt/seo/pull.sh old-shop.com
curl -s "https://archilinks.com/api.php?action=refdomains&q=$1&per=1000&key=$KEY" \
| jq -S . > "snap-$1-$(date +%F).json"
# compare two dated files
diff <(jq -S . snap-old-shop.com-2026-09-01.json) <(jq -S . snap-old-shop.com-2026-10-01.json) | head -50किस स्क्रिप्ट के लिए कौन सा एक्शन
| स्क्रिप्ट | एक्शन | हर रन की लागत | आउटपुट |
|---|---|---|---|
| मिग्रेशन बेलाइन | toppages, refdomains | 4 क्रेडिट | दो JSON फाइलें |
| आउटरीच क्लीनिंग | bulk_dr | प्रति कॉल 1 क्रेडिट, 2,000 डोमेन तक | प्रत्येक प्रस्पेक्ट के लिए DR |
| राइवल ओवरलैप | intersect | 2 क्रेडिट | 2-10 डोमेन को लिंक करने वाली साइटें |
| एंकर वॉच | anchors | 2 क्रेडिट | एंकर टेस्ट लिस्ट |
| पोर्टफोलियो चेक | compare | प्रति कॉल 1 क्रेडिट, 20 डोमेन तक | साइड-बाय-साइड मेट्रिक्स |

एज हैंडलिंग
स्क्रिप्ट एज पर फेल होती हैं। उनका प्लान बनाएं।
हर कॉल को एक रेट्री में घेरें जो रुकता है और तीन बार की कोशिश के बाद हार मान लेता है, 401 और 402 को छोड़कर, जिन्हें रेट्री कभी ठीक नहीं करेगा। हर ऑथेंटिकेटेड रिस्पॉन्स से _credits ऑब्जेक्ट लॉग करें, ताकि खर्च में अचानक बढ़ोतरी आपके बैलेंस में दिखने से पहले आपके लॉग में दिखे, और लूप को पेज की एक हार्ड मैक्सिमम संख्या से कैप करें।
स्नैपशॉट को git या ऑब्जेक्ट स्टोरेज में फाइल के नाम में तारीख रखकर सेव करें। साधारण, बोरिंग, प्रभावी। मिग्रेशन के लिए, इन स्क्रिप्ट को रिडायरेक्ट मैप रेसिपी और मिग्रेशन चेकलिस्ट के साथ जोड़ें। Google Sheets उपयोगकर्ता UrlFetchApp के साथ Apps Script से वही URLs कॉल कर सकते हैं, और एक मासिक ट्रिगर वाली शीट एक बिल्कुल ठीक मॉनिटर है।
स्क्रिप्ट से जुड़े सवाल
ज्यादातर स्क्रिप्ट्स लाइव जाने से पहले तीन सवाल आते हैं, और हर एक का एक छोटा जवाब है।
मैं अपनी साइट पर कितने बैकलिंक्स हैं, यह फ्री में कैसे चेक करूं?
कोई की बिना ओवरव्यू या स्टैट्स एक्शन कॉल करें। दोनों फ्री हैं और हमारे अपने लिंक इंडेक्स से टोटल्स लौटाते हैं।
टोटल्स के पीछे की लिस्ट्स के लिए, आपको एक की और प्रति कॉल 2 क्रेडिट की जरूरत होगी।
जब बैलेंस खत्म हो जाता है तो क्या होता है?
API HTTP 402 लौटाती है। आपकी स्क्रिप्ट को रुक जाना चाहिए और अलर्ट देना चाहिए, लूप में रेट्री नहीं करना चाहिए। अकाउंट पेज से USDT (TRC-20) से टॉप अप करें और ररन करें।
क्या मैं इसे ब्राउज़र से कॉल कर सकता हूं?
हाँ। CORS ओपन है। हालांकि, पब्लिक फ्रंट-एंड कोड में की न रखें, क्योंकि हर कोई उसे पढ़ सकता है और आपका क्रेडिट खर्च कर सकता है।

क्रेडिट बर्बाद किए बिना पेजिंग
पेजिंग वह जगह है जहां स्क्रिप्ट चुपचाप अपनी जरूरत से ज्यादा लागत लाती हैं। हर पेज रिक्वेस्ट एक अलग कॉल है जिसका अपना चार्ज है, इसलिए एक लूप जो एक पेज ज्यादा मांगता है, उसका भुगतान बेकार होता है।
लूप लिखने से पहले एक असली रिस्पॉन्स में पेजिनेशन फील्ड पढ़ें। इस साइट पर दिए गए उदाहरण शैप दिखाते हैं, लेकिन नाम और स्टॉप सिग्नल लाइव JSON से आते हैं।
जब पेज कम आए तो रुक जाएं
एक पेज जिसमें आपसे कम रो हैं, आमतौर पर आखिरी होता है। लूप को वहां रुकने दें, बजाय इसके कि एक अतिरिक्त पेज मांगें ताकि पक्का हो सके।
अगर रिस्पॉन्स में एक टोटल या नेक्स्ट-पेज फील्ड है, तो उसे स्टॉप सिग्नल के रूप में उपयोग करें। उसकी तुलना में सेव किए गए रो की गिनती करें, ताकि कोई मिसमैच लॉग में दिखे।
हर लूप को कैप करें
हर लूप में पेज की एक हार्ड मैक्सिमम सेट करें। एक कैप आपके बैलेंस की रक्षा करता है अगर कोई फील्ड नाम बदल जाता है और स्क्रिप्ट उसी पेज को मांगती रहती है।
कैप को उस साइज से चुनें जिसकी आप उम्मीद करते हैं, फिर जब एक असली डोमेन को और पेज चाहिए हों तो जानबूझकर उसे बढ़ाएं।
हर पेज को आते ही लिखें
हर पेज को डिस्क पर सेव करें जैसे ही वह वापस आता है, फाइल के नाम में पेज नंबर के साथ। एक स्क्रिप्ट जो पेज चाली पर रुक जाती है, उसे फिर से शुरू करने और दो बार भुगतान करने के बजाय आखिरी सेव की गई फाइल से रीज्यूम कर सकती है।
फाइलों को डोमेन और तारीख के हिसाब से एक फोल्डर में रखें, ताकि एक ररन दो पुल को कभी मिक्स न करे।
स्क्रिप्ट्स को शेड्यूल पर चलाना
कोई भी सचेड्यूलर काम करेगा। मायने इस बात का है कि हर रन एक फाइल पीछे छोड़े, और एक फेल रन किसी को बताए।
जॉब के लिए होस्ट चुनना
क्रॉन एक सर्वर के लिए उपयुक्त है जिसका डिस्क आप कंट्रोल करते हैं। एक CI जॉब एक रेपॉजिटरी के लिए उपयुक्त है जो पहले से स्नैपशॉट रखती है, ताकि इतिहास उस कोड के बगल में रहे जो उसे पढ़ता है।
आप जो भी चुनते हैं, डोमेन लिस्ट को एक फाइल में रखें, ताकि एक डोमेन जोड़ना स्क्रिप्ट में बदलाव न होकर एक एडिट हो।
हर सक्सेस पर अलर्ट नहीं, फेल्योर पर अलर्ट
अलर्ट तब दें जब स्क्रिप्ट फेल हो, या जब बैलेंस एक स्तर से नीचे चला जाए जिसे आपने चुना हो। हर सुबह एक सक्सेस मैसेज लोगों को उस चैनल को नजरअंदाज करने पर तैयार करता है जहां असली समस्या होती है।
हर रन से _credits ऑब्जेक्ट लॉग करें, जैसा कि Python उदाहरण करता है, और ट्रेंड को मासिक समीक्षें।
पांच चरणों में वीकली डिफ
एक्शन चुनें
उन दो या तीन कॉल्स को चुनें जो आपके सवाल का जवाब देते हैं। हर एक क्रेडिट खर्च करता है, इसलिए उसके बगल में लागत लिखें।
रेस्पॉन्स को रेडिओ सेव करें
JSON को वैसे ही स्टोर करें जैसे वह आया था, फाइल के नाम में डोमेन और तारीख के साथ। फॉर्मेटिंग को डिफ स्टेप तक छोड़ दें।
तुलना से पहले की को सॉर्ट करें
jq -S या किसी समकक्ष का उपयोग करें, ताकि की का क्रम बदलाव के रूप में न दिखे। ऊपर दिया गया bash उदाहरण ऐसा ही करता है।
फाइलों की तुलना नहीं, लिस्ट्स की करें
URL या डोमेन पर दोनों रिस्पॉन्स को जोड़ें, फिर रिपोर्ट करें कि क्या एडिड, रिमूव और चेंज हुआ। एक लंबी फाइल का रेडिओ टेक्स्ट डिफ एक्शन लेने में मुश्किल होता है।
डिफ की समीक्षा करें और एक्शन लें
रिमूव लिंकिंग डोमेन को आउटरीच के मालिक को भेजें, और रिमूव पेज को रिडायरेक्ट के मालिक को।
क्रॉन जॉब पर निर्भर होने से पहले स्क्रिप्ट टेस्ट करना
एक अनअटेन्डेड स्क्रिप्ट को पहले खुद को साबित करना चाहिए। एक छोटे डोमेन का उपयोग करें, पूरा JSON पढ़ें, और फिर लिस्ट को चौड़ा करें।
एक त्वरित सेंटी चेक यह है कि टोटल्स को उसी डोमेन के लिए फ्री ओवरव्यू कॉल से तुलना करना। नंबरों को एक पेड लिस्ट से बिल्कुल मेल खाने की जरूरत नहीं है, लेकिन उन्हें स्केल में सहमत होने चाहिए।
दो डोमेन के साथ चलाएं
दो डोमेन लूप, फाइल नाम और एरर पाथ्स टेस्ट करते हैं। एक डोमेन किस्मत से पास हो सकता है, जबकि दो यह दिखाते हैं कि क्या लूप डोमेन के बीच रीसेट होता है।
एक डोमेन का उपयोग करें जिसे आप अच्छी तरह जानते हैं और एक ऐसा जिसे नहीं, ताकि आप यह आंकड़ सकें कि आउटपुट सही दिख रहा है या नहीं।
की को लॉग और टिकट से बाहर रखें
स्क्रिप्ट अक्सर पूरा रिक्वेस्ट एड्रेस प्रिंट करती हैं, और की उस एड्रेस में एक पैरामीटर के रूप में होती है। उस लाइन से की हटाएं जो सर्वर से बाहर जाती है, या इसे Authorization हेडर में भेजें, जो इसे एड्रेस से बाहर रखता है।
अगर एक की टिकट या पब्लिक रेपॉजिटरी में दिखती है, तो अगले रन से पहले उस स्क्रिप्ट को चला रहे शेड्यूल्ड जॉब को रोक दें।
इस बात का एक छोटा नोट रखें कि की कहां है, कौन सी स्क्रिप्ट्स उसे पढ़ती हैं और वे किन होस्ट्स को कॉल करती हैं। वह नोट वही है जो आपको तब चाहिए जब कोई पूछे कि बैलेंस खर्च करने की अनुमति किसके पास है।
हर सवाल के लिए एक्शन चुनना
एंडपॉइंट लिस्ट से शुरू न करें, सवाल से शुरू करें। एक मिग्रेशन को यह जानने की जरूरत होती है कि कौन से URLs लिंक्स ले जाते हैं, जबकि एक आउटरीच लिस्ट को डोमेन स्कोर की जरूरत होती है। एक होस्ट, दो सवाल। हर एक की क्रेडिट की अलग संख्या खर्च होती है।
कोड लिखने से पहले सवाल के बगल में लागत लिखें। एक स्क्रिप्ट जो वीकली चलती है, एक छोटी कीमत को पचास-दो गुना बढ़ा देती है, और वह गुणा करना आसानी से भूल जाता है जब तक कि बैलेंस उसे दिखा न दे।
रेट्रीज जो तब रुकें जब चाहिए
एक रिक्वेस्ट को रेट्री करें जो एक अस्थायी कारण से फेल हुआ, जैसे टाइमआउट या सर्वर एरर, कुछ बार बढ़ते हुए पॉज के साथ। 401 या 402 को रेट्री न करें, क्योंकि इंतजार करने से कोई भी जवाब नहीं बदलेगा।
हर रेट्री को एक्शन और डोमेन के साथ लॉग करें, ताकि फेल्योर का पैटर्न सन्नाटे के बजाय एक पैटर्न के रूप में दिखे।
रेट्री काउंट को एक जगह सेट करें, ताकि स्क्रिप्ट में हर कॉल एक ही नियम का पालन करे। बिखरे हुए रेट्री लूप अक्सर एक-दूसरे से असहमत होते हैं, और वह असहमति लॉग में ढूंढना मुश्किल होता है।