Duyệt qua công cụ kiểm tra backlink URL mà không có khoảng trống hoặc vòng lặp vô hạn
Số hàng mỗi lần gọi, số trang mỗi truy vấn và giới hạn cứng ở 50.000. Đây là vòng lặp tôn trọng cả ba yếu tố này và cho bạn biết khi nào cần dừng.

Mỗi lần gọi trả về tối đa 1.000 hàng. Mỗi lần gọi được tính phí một lần, bất kể số hàng thực tế. Phân trang sâu được giới hạn ở 50.000 hàng, tương đương 50 lần gọi với 1.000 hàng mỗi lần.
Tại sao sắp xếp phải đi trước phân trang
Phân trang trên danh sách chưa được sắp xếp là nguyên nhân gây ra bản sao. Luôn gửi sort và order cùng với page và per, để trang 3 có nghĩa giống nhau trong mọi yêu cầu của chuỗi chạy.
Một lệnh kéo refdomains tốn 2 tín dụng mỗi lần gọi, vậy 50 lần gọi sẽ là 100 tín dụng, tương đương một xu. Ngay cả trường hợp tệ nhất cũng rẻ; chi phí thực sự nằm ở vòng lặp không chấm dứt.
Chọn cột sắp xếp
Cột để sắp xếp phụ thuộc vào câu hỏi. Sắp xếp giảm dần thường là lựa chọn phổ biến cho các cuộc kiểm toán, vì giới hạn khi đó sẽ cắt bỏ phần đuôi dài thay vì phần bạn quan tâm.
Sắp xếp theo một trường không liên quan đến câu hỏi của bạn, và giới hạn có thể loại bỏ những hàng bạn muốn. Hãy kéo mười hàng theo từng tiêu chí sắp xếp khác nhau trước và xem phần nào còn tồn tại sau giới hạn.
Ghi lại lựa chọn vào báo cáo, để người tiếp theo biết lý do giới hạn nằm ở vị trí đó.
Các bản ghi thay đổi trong quá trình chạy
Dữ liệu không di chuyển trong quá trình chạy trừ khi bản cập nhật hàng tháng diễn ra giữa chừng. Hiếm gặp, nhưng vẫn có thể xảy ra. Công việc chạy ban đêm kéo dài qua ngày mùng 1 có thể trả về một trang từ chỉ mục cũ và trang tiếp theo từ chỉ mục mới, vì vậy hãy ghi lại thời gian bắt đầu trong nhật ký và so sánh.
Ghi thời gian bắt đầu ở đầu nhật ký và số trang trên mỗi dòng. Khi đó, sự không khớp trong đầu ra sẽ chỉ ra vấn đề về thời điểm, không phải lỗi phân tích cú pháp.
Nếu công việc được lên lịch, hãy tránh thời gian bắt đầu ngay trước lần cập nhật dự kiến. Nhật ký của bạn sẽ hiển thị lần cập nhật dưới dạng sự thay đổi tổng số giữa hai lần chạy có vẻ giống nhau, vì vậy hãy giữ tổng số trong mọi dòng nhật ký.
Một chuỗi chạy kéo dài qua lần cập nhật không có nghĩa là sai. Nó chỉ không nhất quán, vì vậy hãy đánh dấu những chuỗi chạy đó trong nhật ký và chạy lại phần bị ảnh hưởng khi cần thiết cho báo cáo.
Vòng lặp phân trang dừng lại
TypeScript cho worker Node 20. Nó dừng lại ở trang ngắn đầu tiên, khi đạt giới hạn, hoặc khi bất kỳ giá trị ok nào không phải là true.
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;
}Khắc phục sự cố chạy phân trang
| Những gì bạn thấy | Nguyên nhân có thể | Cách khắc phục |
|---|---|---|
| Trang 51 trả về trống hoặc lỗi | Bạn đã chạm giới hạn 50.000 | Thu hẹp phạm vi bằng một hành động khác hoặc sort khác, sau đó hợp nhất theo id |
| Cùng một tên miền xuất hiện ở hai trang | Truy vấn chưa được sắp xếp, hoặc chỉ mục được cập nhật giữa chừng | Gửi sort và order; loại bỏ trùng lặp theo khóa tên miền |
| Số hàng ít hơn tổng số trên bảng điều khiển | Tổng số dành cho toàn bộ đồ thị, còn lệnh kéo thì có giới hạn | Hiển thị "top 50.000" trên giao diện người dùng |
| Vòng lặp không bao giờ kết thúc | Điều kiện chỉ kiểm tra rows.length | Dừng lại khi gặp trang ngắn, như đã mô tả ở trên |
| Hóa đơn cao hơn dự kiến | Thử lại với mọi mã lỗi không phải 200 | Chỉ thử lại lỗi mạng, xem errors |

Đọc hàng mà không cần đoán tên trường
Hàm trợ giúp findRows ở trên được giữ mở. Hãy thực hiện một lệnh gọi thực tế, xem JSON và viết bộ truy cập dựa trên những gì bạn thấy thay vì những gì hướng dẫn đã hứa.
Đối với phiên bản rẻ hơn của công việc này, chấm điểm nhiều tên miền cùng lúc mà không cần phân trang, hãy đọc bulk DR script.
Đóng băng một phản hồi làm dữ liệu mẫu
Sau đó, đóng băng nó bằng một bài kiểm tra. Lưu một phản hồi dưới dạng tệp dữ liệu mẫu và xác nhận số hàng và các khóa của hàng đầu tiên, để một thay đổi trong tương lai sẽ gây lỗi trong CI chứ không phải trên biểu đồ của khách hàng.
Giữ dữ liệu mẫu trong kiểm soát phiên bản bên cạnh bài kiểm tra, để người xem nhận thấy cấu trúc dữ liệu mà mã yêu cầu mà không cần chạy bất kỳ thứ gì.
Khi API thêm một trường sau này, sự khác biệt của dữ liệu mẫu sẽ cho bạn biết bộ truy cập của bạn đã nhận ra hay bỏ qua nó một cách im lặng.
Đặt tên cho dữ liệu mẫu dựa trên truy vấn mà nó đến từ đó, chẳng hạn như hành động, tên miền và tiêu chí sắp xếp. Một tệp có tên response1.json không cho người đọc tiếp theo biết nó chứng minh điều gì.
Đếm số hàng bạn đã lưu
So sánh số hàng bạn đã lưu với tổng số mà vòng lặp báo cáo. Một khoảng trống có nghĩa là một trang bị bỏ sót, và một sự lặp lại có nghĩa là một trang được kéo hai lần và được cập nhật vào một hàng.
Chạy kiểm tra đó sau mỗi lần kéo thử nghiệm, không chỉ sau lần đầu tiên. Sự sai lệch trong số đếm thường là triệu chứng đầu tiên của việc thay đổi tiêu chí sắp xếp hoặc cập nhật chỉ mục giữa chừng.
Giữ số đếm trong cùng dòng nhật ký với số trang, để cả hai có thể được đọc cùng nhau một cách nhanh chóng.
Chia nhỏ công việc vượt quá giới hạn
Một số câu hỏi vượt quá giới hạn. Đối với các danh sách vượt quá giới hạn, hãy chia nhỏ vấn đề thay vì phân trang nhiều hơn. Kéo 50.000 hàng hàng đầu tiên theo một tiêu chí sắp xếp, sau đó hỏi các hành động khác về những tên miền có nhiều backlink nhất, vì những hành động đó cũng tốn 2 tín dụng và trả lời các câu hỏi khác nhau. Phân trang nhiều hơn không bao giờ vượt qua giới hạn cắt.
Kéo 50.000 hàng hàng đầu tiên theo một tiêu chí sắp xếp
Chấp nhận giới hạn như một thực tế của API. Kéo 50.000 hàng hàng đầu tiên theo một tiêu chí sắp xếp, lưu chúng và gắn nhãn kết quả là phần hàng đầu tiên trong bất kỳ báo cáo nào.
Một bảng điều khiển hiển thị số bị giới hạn như thể đó là tổng số đầy đủ sẽ gây hiểu lầm cho người đọc. Nhãn này không tốn gì, và một báo cáo kiểm tra backlink URL sẽ trung thực hơn khi có nó.
Quyết định kích thước phần dữ liệu trước khi chạy và ghi nó vào tiêu đề báo cáo, để số đó không bao giờ trông lớn hơn thực tế. Một dòng tiêu đề không tốn gì, và một người đọc tìm thấy một hàng bị thiếu sau đó sẽ cảm ơn bạn vì điều đó.
Đặt một câu hỏi khác cho những tên miền có nhiều backlink nhất
anchors và toppages trả lời các câu hỏi khác, chẳng hạn như anchor text nào chiếm ưu thế hoặc trang nào thu hút liên kết. Đối với một tên miền vượt quá giới hạn, những câu trả lời đó có thể quan trọng hơn trang tiếp theo của cùng một danh sách.
Giữ kết quả của chúng trong các bảng riêng biệt, được đánh khóa theo tên miền, để một lần kéo tên miền đó sau này có thể thay thế chúng mà không ảnh hưởng đến các hàng phần hàng đầu tiên.
Mỗi hành động bổ sung tốn tín dụng riêng, vì vậy hãy định giá nó trước khi chạy, không phải sau khi hóa đơn đến.
Một danh sách ngắn các tên miền có nhiều backlink nhất, được kéo một lần mỗi tháng, thường cung cấp ngữ cảnh hữu ích hơn một danh sách dài được kéo mỗi đêm.
Hợp nhất theo khóa tên miền
Khi hai lần kéo trùng lặp, hãy hợp nhất chúng theo khóa tên miền và giữ dấu thời gian mới hơn. Việc hợp nhất khi đó sẽ không phụ thuộc vào việc lần kéo nào kết thúc trước.
Ghi lại lần kéo nào đã thắng cho mỗi hàng. Nếu một số thay đổi giữa hai báo cáo, nhật ký đó sẽ cho bạn biết liệu chỉ mục hay quá trình hợp nhất đã thay đổi.
Giữ quá trình hợp nhất trong một hàm đơn lẻ với một bài kiểm tra, vì đó là nơi duy nhất hai lần kéo gặp nhau.
Tiếp tục sau khi bị sập
Sự cố xảy ra. Một bản triển khai khởi động lại worker, máy tính xách tay ngủ, VPN bị ngắt kết nối và vòng lặp chết ở trang 31 trong số 50.
Lưu trang sau mỗi lần gọi
Lưu số trang cuối cùng đã hoàn thành sau mỗi lần gọi. Khởi động lại từ số đó cộng một, không phải từ đầu, và bạn sẽ chỉ trả 2 tín dụng cho mỗi trang thay vì mua lại toàn bộ lệnh kéo.
Lưu nó sau khi phản hồi được phân tích cú pháp, không phải trước đó. Một trang bạn không đọc được nên được kéo lại, và một số trang đã lưu phải luôn có nghĩa là những hàng bạn đã có.
Một lần lưu diễn ra mỗi phút thay vì mỗi lần gọi sẽ tạo ra một khoảng thời gian mà sự cố có thể lặp lại chi tiêu tín dụng. Hãy giữ thao tác ghi nhỏ, để nó rẻ khi thực hiện mỗi lần.
Ghi lại thời gian mỗi lần lưu mất bao lâu cũng như thời gian mỗi lần gọi mất bao lâu. Một lần lưu tốn nhiều thời gian tương đương với lần gọi sẽ chỉ ra lớp lưu trữ, và đó là điều đáng sửa chữa trước khi vòng lặp phát triển.
Cập nhật thêm theo khóa tên miền
Giữ một thao tác ghi có tính chất lặp lại. Cập nhật thêm mỗi hàng theo khóa tên miền của nó, để một trang được kéo hai lần sẽ chỉ để lại một hàng, không phải hai.
Sử dụng cùng một khóa trên mọi đường ghi, bao gồm cả kịch bản sửa thủ công. Hai đường ghi với hai khóa là nguyên nhân khiến bản sao tồn tại sau khi tiếp tục.
Một kịch bản sửa lỗi thường được viết vội vàng sau một lần chạy thất bại. Đó là lúc một khóa thứ hai len lỏi vào, vì vậy hãy xem xét nó cẩn thận như vòng lặp chính.
Từ chối tiếp tục khi tiêu chí sắp xếp thay đổi
Ghi lại tiêu chí sắp xếp và thứ tự cùng với số trang. Nếu ai đó thay đổi sort giữa lần sập và lần khởi động lại, số trang đã lưu không còn có nghĩa là cùng một phần dữ liệu. Từ chối tiếp tục và bắt đầu lại từ đầu.
Lưu một bản ghi tiếp tục nhỏ với tiêu chí sắp xếp, thứ tự, trang và thời gian. Vòng lặp đọc bản ghi đó trước, và nó từ chối tiếp tục nếu bất kỳ trường nào không còn khớp với yêu cầu mà nó sắp thực hiện.
Một lần tiếp tục bị từ chối không phải là một lỗi. Đó là vòng lặp nói rằng trang đã lưu không còn có nghĩa là những hàng giống nhau, và bắt đầu lại từ đầu là lỗi rẻ hơn.
Chạy vòng lặp trong môi trường sản xuất
- 1
Bắt đầu với một tên miền nhỏ
Chạy vòng lặp đối với một tên miền có vài trăm hàng, để dừng ở trang ngắn kích hoạt và bạn có thể quan sát đường thoát hoạt động.
- 2
Kiểm tra một trang bằng mắt
Mở một phản hồi đã lưu và xác nhận bộ truy cập vẫn đọc được các hàng. Đừng tin tưởng một phép phân tích cú pháp mà bạn chưa từng xem qua.
- 3
Giữ các giới hạn trong cấu hình
Đặt giới hạn và kích thước trang trong một tệp cấu hình, để một thay đổi hiển thị trong quá trình xem xét và không ẩn trong một hàm.
- 4
Ghi lại lý do vòng lặp kết thúc
Ghi lại xem chuỗi chạy có kết thúc ở một trang ngắn, ở giới hạn hay do lỗi. Ba cách kết thúc này có ý nghĩa khác nhau đối với người đọc nhật ký.