Boşluklar veya sonsuz döngüler olmadan bir URL geri bağlantı denetleyicisinde sayfalar arası geçiş
Her çağrıda satır sayısı, her sorguda sayfa sayısı ve 50.000'de sert bir üst limit. Bunların üçüne de saygı duyan ve ne zaman durmanız gerektiğini söyleyen bir döngü.

Her çağrıda en fazla 1.000 satır döner. Her çağrı, taşıdığı satır sayısına bakılmaksızın bir kez faturalandırılır. Derin sayfalama 50.000 satırda sınırlandırılır; bu, 1.000 satırlık 50 çağrıya eşittir.
Neden sıralama saylamadan önce gelir
Sıralanmamış bir listede sayfalama yapmak yinelenen verilerin ortaya çıkmasına neden olur. Sayfa 3'ün çalışmadaki her isteğinde aynı anlama gelmesi için sort ve order parametrelerini page ve per ile birlikte gönderin.
Bir refdomains çekimi çağrı başına 2 kredi maliyetindedir; dolayısıyla 50 çağrı 100 krediye, yani bir sente denk gelir. En kötü durum bile ucuzdur; asıl maliyet sonlanmayan bir döngüdür.
Sütun seçimi
Hangi sütuna göre sıralama yapılacağı soruya bağlıdır. Denetimler için en yaygın seçim en büyük değerlerdir, çünkü bu durumda üst limit uzun kuyruğu değil, ilgilendiğiniz kısmı keser.
Sorunuzla hiçbir ilgisi olmayan bir alana göre sıralama yaparsanız, kesim noktası istediğiniz satırları silebilir. Her aday sıralama için on satır çekin ve üst limit altında hangi dilimin hayatta kaldığına bakın.
Seçiminizi rapora yazın, böylece bir sonraki kişi kesim noktasının neden orada olduğunu bilir.
Çalışma sırasında hareket eden kayıtlar
Aylık yeniden oluşturma işlemi çalışmanın ortasında gerçekleşmedikçe veriler hareket etmez. Nadir ama gerçek bir durumdur. Ayın ilk gününü kapsayan gece işi, bir sayfayı eski indekslerden, diğerini yeni indekslerden döndürebilir; bu nedenle başlangıç zamanını logunuza kaydedin ve karşılaştırın.
Logun başına başlangıç zamanını ve her satıra sayfa numarasını yazın. Ardından, çıktıda bir uyumsuzluk görürseniz bu bir ayrıştırma hatası değil zamanlamadan kaynaklanır.
İş zamanlanmışsa, olası bir yeniden oluşturma işleminden hemen önce bir başlangıç zamanından kaçının. Loglarınızda bir yeniden oluşturma, diğerleri eşleşen iki çalışma arasındaki toplam sayılardaki kayma olarak görünür; bu nedenle her log satırında toplam sayıları tutun.
Yeniden oluşturma işlemini kapsayan bir çalışma varsayılan olarak yanlış değildir. Sadece tutarsızdır; bu nedenle bu çalışmaları logda işaretleyin ve bir rapor için önemli olduğunda etkilenen dilimi yeniden çalıştırın.
Sonlanan bir sayfalama döngüsü
Node 20 çalışanı için TypeScript. İlk kısa sayfada, üst limite ulaşıldığında veya ok true olmayan herhangi bir durumda durur.
const BASE = "https://seomasters.dev/api.php";
const CAP = 50_000;
const PER = 1000;
export async function pullAll(domain: string, key: string) {
const rows: unknown[] = [];
for (let page = 1; rows.length < CAP; page++) {
const u = new URL(BASE);
u.search = new URLSearchParams({
action: "refdomains", q: domain,
page: String(page), per: String(PER),
sort: "dr", order: "desc",
}).toString();
const res = await fetch(u, { headers: { Authorization: `Bearer ${key}` } });
if (res.status === 401 || res.status === 402) throw new Error(`stop: HTTP ${res.status}`);
const body = await res.json();
if (!body.ok) throw new Error(JSON.stringify(body).slice(0, 300));
const chunk = findRows(body); // see note below
rows.push(...chunk);
if (chunk.length < PER) break; // short page means we are done
}
return rows;
}Sayfalama çalışmasını hata ayıklama
| Gördükleriniz | Olası neden | Ne yapmalı |
|---|---|---|
| Sayfa 51 boş döner veya hata verir | 50.000 üst limitine ulaştınız | Başka bir eylem veya farklı bir sort ile daraltın, ardından id ile birleştirin |
| İki sayfada aynı etki alanı | Sıralanmamış sorgu veya indeks çalışma sırasında yeniden oluşturuldu | sort ve order gönderin; etki alanı anahtarında yinelenenleri temizleyin |
| Kontrol paneli toplamından daha az satır | Toplam tüm grafik içindir, çekim sınırlandırılmıştır | Kullanıcı arayüzünde "en üst 50.000" göster |
| Döngü asla bitmez | Koşul yalnızca rows.length'i kontrol eder | Yukarıda belirtildiği gibi kısa sayfada sonlandırın |
| Beklenenden yüksek fatura | 200 dışı her durumda yeniden dene | Yalnızca ağ hatalarında yeniden dene, hatalar bölümüne bakın |

Alan adlarını tahmin etmeden satırları okuma
Yukarıdaki findRows yardımcısı bilinçli olarak açık bırakılmıştır. Gerçek bir çağrı yapın, JSON'a bakın ve bir öğreticinin vaat ettiğinden ziyade gördüklerinize göre erişimciyi yazın.
Bu işin daha ucuz kuzeyi olan, hiç sayfalama olmadan aynı anda birçok etki alanını puanlama için toplu DR betiği bölümünü okuyun.
Bir yanıtı dondur
Ardından bunu bir testle dondurun. Bir yanıtı sabit dosya olarak kaydedin ve bir sonraki değişiklikte müşterinin grafiğinde değil CI'da başarısız olması için satır sayısına ve ilk satırın anahtarlarına karşı doğrulama yapın.
Sabit dosyayı testin yanında sürüm kontrolünde tutun, böylece bir gözden geçiren kodun beklediği şekli hiçbir şey çalıştırmadan görebilir.
API daha sonra bir alan eklediğinde, sabit dosya farkı erişimcinizin bunu fark edip etmediğini veya sessizce görmezden gelip gelmediğini gösterir.
Sabit dosyayı geldiği sorguya göre adlandırın; örneğin eylem, etki alanı ve sıralama gibi. response1.json gibi bir dosya, bir sonraki okuyucuya neyi kanıtladığı hakkında hiçbir şey söylemez.
Sakladığınız satırları sayın
Kaydettiğiniz satırları döngünün bildirdiği toplam ile karşılaştırın. Bir boşluk bir sayfanın atlandığını, bir tekrar ise bir sayfanın iki kez çekildiğini ve tek bir satıra eklendiğini gösterir.
Bu kontrolü yalnızca ilk çekimden sonra değil, her test çekiminden sonra çalıştırın. Sayıdaki sapma, genellikle değişen bir sıralama veya çalışma sırasında gerçekleşen bir yeniden oluşturma işleminin ilk belirtisidir.
Sayıyı, sayfa numarasıyla aynı log satırında tutun, böylece ikisi bir bakışta birlikte okunabilir.
Üst limitin üzerinde iş bölme
Bazı sorular üst limiti aşar. Üst limitin üzerindeki listeler için daha zor sayfalama yapmak yerine problemi bölün. Bir sıralama ile en üst 50.000'i çekin, ardından ağır hitlere diğer eylemler hakkında sorun; çünkü bunlar da 2 krediye mal olur ve farklı soruları yanıtlar. Daha zor sayfalama kesim noktasının ötesine geçmez.
Bir sıralama ile en üst 50.000'i çek
Üst limiti API'nin bir gerçeği olarak kabul edin. Bir sıralama ile en üst 50.000 satırı çekin, kaydedin ve sonucu herhangi bir raporda üst dilim olarak etiketleyin.
Sınırlandırılmış bir toplamı tam toplam gibi gösteren bir kontrol paneli, okuyan kişileri yanıltır. Etiket bedavadır ve bir url backlink checker raponu bununla daha dürüst okunur.
Dilim boyutunu çalışmadan önce belirleyin ve rapor başlığına yazın, böylece sayı olduğundan daha büyük görünmez. Bir başlık satırı bedavadır ve daha sonra bir eksik satır bulan okuyucu size minnettar olacaktır.
Ağır hitlere farklı bir sorun sorun
anchors ve toppages başka soruları yanıtlar; örneğin hangi anchor text baskın veya hangi sayfaların bağlantı çektiği. Üst limitin üzerindeki bir etki alanı için bu yanıtlar, aynı listenin bir sonraki sayfasından daha önemli olabilir.
Sonuçlarını etki alanı anahtarıyla anahtarlama yaparak kendi tablolarında tutun, böylece aynı etki alanının sonraki çekimi, üst dilim satırlarına dokunmadan bunları değiştirebilir.
Her ek eylem kendi kredilerine mal olur; bu nedenle çalışmadan önce fiyatlandırın, fatura geldikten sonra değil.
En ağır etki alanlarının aylık olarak bir kez çekilen kısa listesi, her gece çekilen daha uzun bir listeden daha fazla bağlam sağlayabilir.
Etki alanı anahtarında birleştirme
İki çekim üst üste bindiğinde, etki alanı anahtarında birleştirin ve daha yeni zaman damgasını koruyun. Böylece birleştirme, hangi çekimin önce bittiğine bağlı kalmaz.
Her satır için hangi çekimin kazandığını loglayın. Bir sayı iki rapor arasında hareket ederse, bu log indeksin mi yoksa birleştirmenin mi değiştiğini söyler.
İki çekimin birleştiği tek yer olduğu için birleştirmeyi bir testle tek bir işlevde tutun.
Çökme sonrası devam etme
Çökmeler olur. Bir dağıtım çalışanı yeniden başlatır, bir dizüstü bilgisayar uykuya geçer, bir VPN kopar ve döngü 50'nin 31. sayfasında ölür.
Her çağrının ardından sayfayı kaydedin
Her çağrının ardından son tamamlanan sayfa numarasını kalıcı hale getirin. En üstten değil, bu sayıdan bir fazla olan sayfa ile yeniden başlatın; böylece tüm çekimi yeniden satın almak yerine sayfa başına 2 kredi ödersiniz.
Yanıt ayrıştırıldıktan sonra kaydedin, öncesinde değil. Okuyamadığınız bir sayfa tekrar çekilmelidir ve kaydedilen bir sayfa numarası her zaman elinizdeki satırları ifade etmelidir.
Her çağrıda değil, dakikada bir gerçekleşen bir kayıt, bir çökmenin kredi harcamasını tekrarlayabileceği bir pencere bırakır. Yazmayı küçük tutun, böylece her seferinde yapılması ucuz olur.
Her kaydın ne kadar sürdüğünü ve her çağrının ne kadar sürdüğünü loglayın. Çağrıya eşlik eden bir kayıt, depolama katmanına işaret eder ve bu, döngü büymeden önce düzeltilmeye değerdir.
Etki alanı anahtarında ekleme-güncelleme (upsert)
Kimlikli bir yazma tutun. Her satırı etki alanı anahtarında upsert edin, böylece iki kez çekilen bir sayfa iki satır yerine tek bir satır bırakır.
Manuel onarım betiği dahil her yazma yolunda aynı anahtarı kullanın. İki anahtara sahip iki yazma yolu, bir devam etme sırasında yinelenen verilerin hayatta kalmasına neden olur.
Bir onarım betiği genellikle başarısız bir çalışmanın ardından aceleyle yazılır. İşte ikinci bir anahtarın sızdığı zaman budur; bu nedenle ana döngüyle aynı özenle gözden geçirin.
Sıralama değiştiğinde devam etmeyi reddet
Sayfa numarasının yanı sıra sıralama ve sıralama düzenini loglayın. Birisi çökme ile yeniden başlatma arasında sort'u değiştirirse, kaydedilen sayfa numarası artık aynı dilimi ifade etmez. Devam etmeyi reddedin ve temiz başlayın.
Sıralama, sıralama düzeni, sayfa ve zamanı içeren küçük bir devam kaydı saklayın. Döngü bu kaydı ilk okur ve yapacağı isteğe artık uymayan herhangi bir alan varsa devam etmeyi reddeder.
Reddedilen bir devam bir hata değildir. Döngünün kaydedilen sayfanın artık aynı satırları ifade etmediğini söylediği ve temiz başlamasının daha ucuz hata olduğu durumdur.
Döngüyü üretimde çalıştırma
- 1
Küçük bir etki alanıyla başlayın
Yüzlerce satırı olan bir etki alanına karşı döngüyü çalıştırın, böylece kısa sayfa durdurması tetiklenir ve çıkış yolunun çalıştığını izleyin.
- 2
Bir sayfayı gözle kontrol edin
Kaydedilmiş bir yanıt açın ve erişimcinin hala satırları okuduğundan emin olun. Bakmadığınız bir ayrışmaya güvenmeyin.
- 3
Limitleri yapılandırmada tutun
Üst limiti ve sayfa boyutunu tek bir yapılandırma dosyasına koyun, böylece bir değişiklik gözden geçirmede görünür ve bir işlevin içinde gizlenmez.
- 4
Döngünün neden sonlandığını loglayın
Çalışmanın bir kısa sayfada, üst limitte veya bir hatada sonlandığını kaydedin. Bu üç sonluk, logu okuyan kişi için farklı anlamlara sahiptir.