रेसिपी
शीट या n8n से लिंक स्कोर सिंक करें
ज्यादातर टूल डायरेक्टरी एक स्प्रेडशीट, एक Airtable बेस या एक छोटे डेटाबेस में रहती हैं। यह रेसिपी एक टूल बैकलिंक चेक को एक कॉलम फिल करने में बदल देती है: प्रति 2,000 पंक्तियों के लिए एक अनुरोध।
SEO Tools AI रिसर्च टीम ·

पांच कदमों में रेसिपी
डोमेन निर्यात करें
अपनी लिस्टिंग्स के वेबसाइट कॉलम लें, प्रोटोकॉल और पाथ्स को हटाएं, और डुप्लिकेट्स को हटा दें। डुप्लिकेट्स का कोई अतिरिक्त खर्च नहीं होता, लेकिन वे मैपिंग स्टेप को अस्त-व्यस्त बना देते हैं।
2,000 के समूहों में विभाजित करें
bulk_dr प्रत्येक कॉल के लिए अधिकतम 2,000 डोमेन स्वीकार करता है। इसलिए, 5,000 पंक्तियों वाली शीट के लिए तीन कॉल की आवश्यकता होगी।
भेजें, ठीक होने की जांच करें
API को कॉल करें, JSON पढ़ें, और यदि ok गलत है तो रोक दें। _credits को लॉग करें ताकि हर रन के बाद बैलेंस दिखाई दे।
तारीख के साथ वापस लिखें
रेटिंग और आज की तारीख को दो कॉलम में स्टोर करें। किसी अच्छे मान को खाली मान से कभी ओवरराइट न करें।
मासिक रूप से शेड्यूल करें
महीने के पहले दिन इसे चलाएं। इंडेक्स लगभग मासिक रूप से बदलता है, इसलिए बार-बार चलाने से कोई फायदा नहीं होता।
जॉब शुरू करने के लिए चुनें
ट्रिगर यह तय करता है कि कॉल कितनी बार होती हैं, इसलिए मैपिंग बनाने से पहले इसे चुनें। दो ट्रिगर लगभग हर डायरेक्टरी को कवर कर लेते हैं।
महीने के पहले दिन पर एक शेड्यूल सबसे सरल विकल्प है। यह इंडेक्स की लय से मेल खाता है, और किसी को बटन याद रखने की जरूरत नहीं होती।
मासिक रिफ्रेश के लिए एक शेड्यूल
पहले एक शेड्यूल ट्रिगर रखें, इसे हर महीने के पहले दिन पर सेट करें, और इसे पूरी लिस्टिंग टेबल पढ़ने दें। हर रन में पंक्तियों की संख्या के आकार के बराबर bulk_dr कॉल का एक बैच बनाया जाता है।
जब टेबल छोटी हो तो भी शेड्यूल बनाए रखें। एक मासिक जॉब जो एक छोटी शीट पर चलती है, उसमें एक क्रेडिट का खर्च आता है, और यह स्कोर्स को तारीख के साथ ताज़ा रखती है।
प्रत्येक नई पंक्ति पर एक ट्रिगर
मान लीजिए कि लिस्टिंग्स एक-एक करके, कुछ दिनों में आती हैं। एक ट्रिगर जो प्रत्येक नई पंक्ति पर फायर होता है, आकर्षक लग सकता है, लेकिन हर कॉल एक बार बिल होती है, इसलिए प्रति पंक्ति एक कॉल का खर्च महीने के लिए एक बैच से अधिक होता है।
यदि आप स्कोर जल्दी चाहते हैं, तो नई पंक्ति फ्लो को एक खाली dr लिखने दें और मासिक रन उसे भर दे। पंक्ति को हर आगमन के लिए एक कॉल किए बिना ही अपना नंबर मिल जाता है।
यदि लिस्टिंग्स बर्स्ट्स में आती हैं, तो नई पंक्तियों को सप्ताह के अंत में एक बैच में समूहित करें। इसमें एक कॉल का खर्च आता है, और शीट अब केवल महीने में एक बार बदलती नहीं है।
एक तारीख जो समाप्त पंक्तियों को चिह्नित करती है
हर पंक्ति पर dr_checked_on स्टोर करें। उस तारीख पर फ़िल्टर के साथ शुरू होने वाली एक रन इस महीने पहले से की गई चीज़ों को छोड़ देती है, और अलग से कोई कतार की ज़रूरत नहीं होती।
जब एक रन बीच में रुक जाता है, तो पहले से स्टैम्प वाली पंक्तियाँ वैसी ही रहती हैं। अगली रन वहाँ से शुरू होती है जहाँ पिछली रुकी थी, जो सबसे सस्ता रिकवरी तरीका है।
कुछ भी ऑटोमेट करने से पहले
पहले पाँच लिस्टिंग्स पर चेक हाथ से चलाएँ। प्रत्येक के लिए फ्री overview एक्शन का उपयोग करें, जिसके लिए कोई की की ज़रूरत नहीं है, और जो देखें उसकी तुलना उम्मीद से करें।
यह आम हैरानियों को जल्दी पकड़ता है: एक लिस्टिंग जो सबडोमेन की ओर इशारा करती है, एक प्रोडक्ट जो किसी बड़ी साइट के पथ पर रहता है, एक डोमेन जिसने पिछले वसंत में रीडायरेक्ट किया था। एक रेटिंग प्रोडक्ट की नहीं, बल्कि डोमेन की होती है।
तय करें कि आपकी शीट उन मामलों को कैसे चिह्नित करती है, उदाहरण के लिए एक नोट कॉलम के साथ जो shares domain लिखा हो। पाठक एक फुटनोट को गलत दिखने वाली स्कोर की तुलना में कहीं ज़्यादा आसानी से माफ़ कर देते हैं।
जब पाँच सही लगें, तो बैच पर आगे बढ़ें। आपका field reference कॉलम की सूची देता है, और cost example दिखाता है कि एक रन की लागत क्या है।
एक छोटा पायथन वर्जन
requests पैकेज की ज़रूरत है। यह जॉब के आकार का एक स्केच है: पहले एक असली रिस्पॉन्स प्रिंट करें, फिर अपनी कॉलम में ज़रूरी फ़ील्ड्स मैप करें।
import csv, requests
KEY = "sk_live_..."
BASE = "https://seotoolsai.org/api.php"
rows = list(csv.DictReader(open("listings.csv")))
domains = sorted({r["domain"] for r in rows})
for i in range(0, len(domains), 2000):
chunk = domains[i:i + 2000]
r = requests.post(BASE, params={"action": "bulk_dr", "key": KEY},
data={"domains": ",".join(chunk)}, timeout=60)
if r.status_code in (401, 402):
raise SystemExit(f"stop: HTTP {r.status_code}")
data = r.json()
if not data.get("ok"):
raise SystemExit("api said not ok")
print(data["_credits"]) # cost and remaining balance
open(f"raw_{i}.json", "w").write(r.text)
Google Sheets या n8n में करना
Sheets Apps Script के साथ UrlFetchApp से एक URL कॉल कर सकता है, और n8n में एक HTTP Request नोड है। दोनों ऊपर दिए गए स्क्रिप्ट के समान काम करते हैं।
n8n में, पहले एक शेड्यूल ट्रिगर रखें, फिर एक नोड जो आपकी शीट या टेबल पढ़ता है, फिर एक आइटम-स्प्लिटिंग स्टेप जो 2,000 के ग्रुप्स बनाता है, फिर HTTP Request। रेटिंग और तारीख वापस लिखने के लिए एक अंतिम नोड जोड़ें।
की को प्लेटफ़ॉर्म के क्रेडेंशियल स्टोर में रखें, न कि वर्कफ़्लो टेक्स्ट में। वर्कफ़्लो शेयर, कॉपी और फोरम में पेस्ट किए जाते हैं, और उनके साथ पेस्ट की गई की खर्च हुई धन है।
नो-कोड या स्क्रिप्ट: कौन सा शेप आपकी टीम के लिए फिट बैठता है
दोनों रास्ते समान कॉल करते हैं। अंतर यह है कि एक साल बाद फ़्लो को किसको मेंटेन करना होगा, और उस व्यक्ति को इसे समझाना कितना आसान है।
वह शेप चुनें जिसे आप कई महीनों के ब्रेक के बाद भी पढ़ सकते हों। एक ऐसा फ़्लो जिसे कोई नहीं समझता, उस साधारण स्क्रिप्ट से बुरा है जिसे हर कोई फॉलो कर सकता है।
एक फ़्लो जिसे आप अगले एडिटर को समझा सकें
चार लेबल वाले नोड्स वाला एक छोटा n8n फ़्लो हथियाना आसान है: ट्रिगर, रीड, बैच, वापस लिखें। प्रत्येक नोड को उसकी डिफ़ॉल्ट लेबल से नहीं, बल्कि यह बताकर नाम दें कि वह क्या करता है।
एज केस के लिए कई ब्रांचेस स्टैक न करें। प्रत्येक ब्रांच एक और जगह है जहाँ डोमेन को गलत स्कोर मिल सकता है।
जब स्क्रिप्ट अपनी जगह बनाती है
स्क्रिप्ट तब उचित है जब इनपुट CSV फ़ाइलों का फ़ोल्डर हो, या जब जॉब को ऐसे लॉजिक की ज़रूरत हो जिसे फ़्लो अजीब तरीके से हैंडल करता है। ऊपर दिया गया स्केच उस केस में फिट बैठता है।
स्क्रिप्ट को वर्जन कंट्रोल में रखें और की को एन्वायरनमेंट वेरिएबल में रखें। एक स्क्रिप्ट जो की को उसी फ़ोल्डर में एक फ़ाइल से पढ़ती है, एक लीक है जो शेयर्ड ड्राइव के लिए इंतज़ार कर रही है।
ट्यूटोरियल जो कठिन हिस्सा छोड़ देते हैं
कई वीडियो एक फ़्लो दिखाते हैं जो तीन पंक्तियों के साथ पहली कोशिश में काम करता है। असली लिस्टिंग्स में खाली जगह, डुप्लिकेट और अजीब डोमेन होते हैं, और वही वह जगह है जहाँ फ़्लो को ध्यान की ज़रूरत है।
पहले अपने पाँच टेस्ट रो पर फ़्लो बनाएँ। अगर एक ट्यूटोरियल उन पर टिक नहीं सकता, तो ट्यूटोरियल कभी पूरी जॉब नहीं था।
जब आप फ़्लो किसी और को सौंपें, तो पाँच टेस्ट रो को एक सैंपल के रूप में शामिल करें। अगला व्यक्ति लाइव डेटा छूने से पहले यह देख सकता है कि एक अच्छी रन कैसी दिखती है।
त्रुटियों का अर्थ क्या है
| संकेत | अर्थ | जॉब क्या करता है |
|---|---|---|
| HTTP 401 | कुंजी गायब या खराब | रोकें, किसी व्यक्ति को सूचित करें |
| HTTP 402 | क्रेडिट खत्म हो गया | रोकें, पुराने स्कोर रखें, ऊपर जोड़ें |
ok गलत है | कॉल सफल नहीं हुआ | बॉडी लॉग करें, अगली बार पुनः प्रयास करें |
| डोमेन के लिए खाली परिणाम | इंडेक्स में नहीं | सेल खाली छोड़ें |

रनों के बीच शीट को साफ रखें
एक सिंक जॉब उतना ही अच्छा है जितनी शीट जिसमें वह लिखता है। कुछ आदतें उस धीमी क्षति को रोकती हैं जो एक रन से अगले रन के बीच जमा होती है।
अधिकांश समस्याएं एक निहत्थे संपादन से शुरू होती हैं: स्कोर के ऊपर एक कॉलम डालना, या एक कॉपी की गई पंक्ति जो चुपचाप एक डोमेन बदल देती है।
कच्चे प्रतिक्रियाओं को उनके स्वयं के टैब में रखें
प्रत्येक कच्ची प्रतिक्रिया को अपने स्वयं के टैब में या JSON लाइनों के रूप में स्टोर करें, जहाँ एक पंक्ति में एक प्रतिक्रिया हो। वह कॉपी आपको बिना दूसरी भुगतान वाली कॉल के दृश्यमान कॉलम फिर से बनाने की अनुमति देती है।
एक कच्चा टैब यह सवाल का भी जवाब देता है जो छह महीने बाद एक संपादक पूछता है: उस तारीख को API ने क्या लौटाया।
प्रत्येक कच्चे टैब को उस बैच तारीख से नाम दें, ताकि कॉपीज तब क्रम में सॉर्ट हों जब आप उनके माध्यम से स्क्रॉल करें।
हेडर पंक्ति को लॉक करें
हेडर पंक्ति को फ्रीज करें और स्कोर के ऊपर कभी भी कॉलम न डालें। एक मैपिंग जो कॉलम F की ओर इशारा करता है, डालने के बाद गलत डेटा पढ़ेगा, और ऐसा किसी भी त्रुटि के बिना करेगा।
मैपिंग में कॉलम को स्थिति से नहीं, बल्कि नाम से नाम दें। एक नाम पुनर्व्यवस्थित होने पर टिकता है, और एक स्थिति नहीं।
पंक्तियों की गिनती करें चलाए जाने से पहले और बाद में
चलाए जाने से पहले और बाद में लॉग में पंक्ति गिनती लिखें। दो संख्याओं में केवल उतनी ही अंतर होनी चाहिए जितनी पंक्तियाँ आप जोड़ना चाहते थे, और एक अंतराल बताता है कि कुछ गलत हो गया।
शीट को महीने में एक बार स्कोर कॉलम द्वारा सॉर्ट करें और ऊपर और नीचे की पंक्तियों पर नज़र डालें। वहां अजीब मान आमतौर पर एक डोमेन की ओर इशारा करते हैं जिसे गलत लिस्टिंग पर मैप किया गया था।
पहले एक कॉपी पर परीक्षण करें
शीट की नकल बनाएं और असली शीट को छूने से पहले नकल के खिलाफ फ्लो चलाएं। एक कॉपी बनाने में कुछ भी लागत नहीं आती।
लाइव स्कोर के ऊपर लिखी गई एक खराब मैपिंग को उल्टा करना मुश्किल है, क्योंकि पुरानी मान गायब हो जाते हैं। नकल को तब तक रखें जब तक कि पहली ईमानदार रन आपकी उम्मीदों से मेल न खाए।
दूसरी नियोजित रन के बाद ही नकल को हटाएं। लगातार दो साफ रन एक संकेत से बेहतर हैं।
पहली लाइव रन से पहले
- कुंजी प्लेटफ़ॉर्म के क्रेडेंशियल स्टोर या एक एनवायरनमेंट वेरिएबल में बैठती है, न कि वर्कफ़्लो टेक्स्ट में।
- एक मुफ्त
overviewकॉल को एक लिस्टिंग के खिलाफ हाथ से जांचा गया था जिसे आप जानते हैं। - रन को शीट की एक कॉपी पर परीक्षण किया गया था, और कॉप ने आपकी उम्मीदों से मेल खाया।
- जॉब हर स्कोर के बगल में तारीख लिखता है जिसमें वह छूता है।
- स्टेटस 401 और 402 जॉब को रोकते हैं और एक व्यक्ति को संदेश भेजते हैं।
सिंक प्रश्न
अगर जॉब आधे रास्ते क्रैश हो जाए तो मैं दो बार भुगतान से बचूँ कैसे?
जैसे-जैसे आगे बढ़ें, प्रत्येक स्कोर के बगल में तारीख लिखें, और अगली रन उन पंक्तियों को छोड़ दे जो इस महीने में पहले ही स्टैम्प हो चुकी हैं। 2,000 के चंक का मतलब है कि एक क्रैश की लागत अधिकतम एक क्रेडिट की है, इसलिए जोखिम नगण्य है, लेकिन आदत शीट को साफ रखती है।
क्या एक गैर-प्रोग्रामर इसे सेट कर सकता है?
अधिकतर हाँ। n8n या Make में एक HTTP Request नोड को केवल एक URL, एक कुंजी और एक सूची की आवश्यकता होती है। प्रतिक्रिया को कॉलम में बदलना ही कठिन हिस्सा है, इसलिए मैपिंग बनाने से पहले एक टेस्ट कॉल करें और JSON देखें।