Bỏ qua để đến nội dung
ArchiLinks
ArchiLinksĐăng ký

Công cụ kiểm tra backlink website: các kịch bản có thể lên lịch chạy

Mọi lệnh gọi ở đây đều hoạt động với curl hoặc bất kỳ công cụ HTTP nào khác. Thay thế khóa API, giữ nguyên quy trình: gọi, lưu, so sánh chênh lệch.

Đội ngũ nghiên cứu ArchiLinks ·

Bàn làm việc thu nhỏ với các công cụ Python, Node và Bash bên cạnh thang và đồng hồ bấm giờ

Các quy tắc cơ bản

Một lệnh gọi, một lần tính phí. Mỗi yêu cầu được tính phí một lần bất kể số lượng hàng trả về, và một lệnh gọi duy nhất có thể trả về tối đa 1.000 hàng. Phân trang sâu dừng lại ở 50.000 hàng, và tham số per chấp nhận các giá trị từ 10 đến 5.000.

Điều này thay đổi cách bạn viết kịch bản. Hãy yêu cầu per=1000 và chỉ phân trang khi cần thêm dữ liệu, bởi vì một công cụ kiểm tra backlink website được xây dựng dựa trên các trang nhỏ sẽ nhân đôi chi phí lên mười lần mà không mang lại lợi ích gì. Lỗi được báo rõ ràng: HTTP 401 cho khóa bị thiếu, 402 khi hết tín dụng, và mọi phản hồi JSON đều chứa trường ok.

Trước khi tự động hóa

Chạy từng kịch bản một lần bằng tay đối với một tên miền nhỏ và đọc kết quả JSON. Các tên trường, vùng chứa hàng và các trường phân trang nên được lấy từ một phản hồi thực tế, không phải từ các ví dụ của chúng tôi, vì vậy hãy xác nhận chúng trước khi một công việc cron phụ thuộc vào chúng.

Python: lưu một bản chụp có ngày

Các tên trường trong phản hồi được hiển thị chỉ mang tính chất ví dụ. Hãy in một phản hồi trước khi bạn dựa vào một khóa nào đó.

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: xếp hạng Domain Rating hàng loạt cho một danh sách

bulk_dr xử lý tối đa 2.000 tên miền với giá 1 tín dụng cho mỗi lệnh gọi, thông qua GET với tham số domains hoặc qua thân POST. Dấu phẩy ở dưới chỉ là ví dụ; hãy kiểm tra thử với hai tên miền trước. Node 18 trở lên đã có sẵn hàm fetch.

javascript
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 và jq: so sánh chênh lệch hàng tuần

Lưu một bản chụp có ngày, sau đó so sánh hai tệp. Hãy giữ lịch chạy cron hàng tuần hoặc hàng tháng; chỉ mục được làm mới khoảng một lần mỗi tháng.

bash
# 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

Hành động nào cho kịch bản nào

Kịch bảnHành độngChi phí mỗi lần chạyĐầu ra
Cơ sở dữ liệu di chuyểntoppages, refdomains4 tín dụngHai tệp JSON
Dọn dẹp danh sách liên hệbulk_dr1 tín dụng mỗi lệnh gọi, tối đa 2.000 tên miềnDR theo từng đối tượng
So sánh đối thủintersect2 tín dụngCác trang web liên kết đến 2–10 tên miền
Theo dõi anchor textanchors2 tín dụngDanh sách anchor text
Kiểm tra danh mục đầu tưcompare1 tín dụng mỗi lệnh gọi, tối đa 20 tên miềnSố liệu so sánh song song
Cơ chế thử lại thu nhỏ với đệm cao su, chuông báo và bộ đếm tiền xu xếp chồng

Xử lý các trường hợp biên

Các kịch bản thường gặp lỗi ở các trường hợp biên. Hãy lên kế hoạch cho chúng.

Bọc mỗi lệnh gọi trong một cơ chế thử lại với thời gian chờ tăng dần và dừng sau ba lần thử, ngoại trừ 401 và 402, vì thử lại sẽ không giải quyết được các lỗi này. Hãy ghi lại đối tượng _credits từ mọi phản hồi đã xác thực, để một sự tăng đột biến chi phí sẽ xuất hiện trong nhật ký của bạn trước khi nó xuất hiện trong số dư tài khoản, và giới hạn các vòng lặp bằng một số trang tối đa cứng.

Giữ các bản chụp trong git hoặc bộ nhớ đối tượng với ngày trong tên tệp. Đơn giản, nhàm chán nhưng hiệu quả. Đối với các bản di chuyển, hãy kết hợp các kịch bản này với công thức bản đồ chuyển hướng và danh sách kiểm tra di chuyển. Người dùng Google Sheets có thể gọi cùng các URL đó từ Apps Script bằng UrlFetchApp, và một trang tính có kích hoạt hàng tháng là một công cụ giám sát hoàn toàn tốt.

Câu hỏi về kịch bản

Ba câu hỏi thường xuất hiện trước khi hầu hết các kịch bản đi vào hoạt động, và mỗi câu hỏi đều có câu trả lời ngắn gọn.

Làm thế nào để kiểm tra số lượng backlink của trang web tôi có, miễn phí?

Gọi hành động tổng quan hoặc thống kê mà không cần khóa. Cả hai đều miễn phí và trả về các tổng số từ chỉ mục liên kết của chính chúng tôi.

Đối với các danh sách nằm sau các tổng số đó, bạn cần một khóa và 2 tín dụng cho mỗi lệnh gọi.

Điều gì xảy ra khi số dư hết?

API trả về HTTP 402. Kịch bản của bạn nên dừng lại và thông báo, không nên thử lại trong một vòng lặp. Nạp lại từ trang tài khoản bằng USDT (TRC-20) và chạy lại.

Tôi có thể gọi nó từ trình duyệt không?

Có. CORS được mở. Tuy nhiên, đừng đặt khóa trong mã giao diện người dùng công khai, vì bất kỳ ai cũng có thể đọc nó và tiêu tốn tín dụng của bạn.

Dây chuyền vận chuyển thu nhỏ với các bánh răng chính xác di chuyển tiền xu vàng hiệu quả với một khóa duy nhất

Phân trang mà không lãng phí tín dụng

Phân trang là nơi các kịch bản âm thầm tốn kém hơn mức cần thiết. Mỗi yêu cầu trang là một lệnh gọi riêng biệt với khoản phí riêng, vì vậy một vòng lặp yêu cầu thêm một trang sẽ phải trả tiền cho một kết quả vô nghĩa.

Đọc các trường phân trang từ một phản hồi thực tế trước khi bạn viết vòng lặp. Các ví dụ trên trang web này chỉ hiển thị cấu trúc, nhưng các tên trường và tín hiệu dừng đều đến từ JSON trực tiếp.

Dừng lại khi một trang trả về ít dữ liệu hơn dự kiến

Một trang có ít hàng hơn số lượng bạn yêu cầu thường là trang cuối cùng. Hãy để vòng lặp dừng ở đó thay vì yêu cầu thêm một trang để chắc chắn.

Nếu phản hồi chứa một trường tổng số hoặc trang tiếp theo, hãy sử dụng trường đó làm tín hiệu dừng. Đếm số hàng bạn đã lưu so với nó, để sự không khớp sẽ xuất hiện trong nhật ký.

Đặt giới hạn cứng cho mọi vòng lặp

Đặt một giới hạn cứng về số trang trong mọi vòng lặp. Giới hạn này bảo vệ số dư của bạn nếu một tên trường thay đổi và kịch bản tiếp tục yêu cầu cùng một trang.

Chọn giới hạn dựa trên kích thước bạn mong đợi, sau đó tăng nó một cách có chủ đích khi một tên miền thực sự cần nhiều trang hơn.

Ghi lại từng trang khi nó xuất hiện

Lưu mỗi trang vào đĩa ngay khi nó trả về, với số trang trong tên tệp. Một kịch bản dừng ở trang thứ tư mươi có thể tiếp tục từ tệp được lưu cuối cùng thay vì bắt đầu lại và trả tiền hai lần.

Giữ các tệp trong một thư mục riêng cho mỗi tên miền và mỗi ngày, để một lần chạy lại không bao giờ trộn lẫn hai lần kéo dữ liệu.

Chạy các kịch bản theo lịch trình

Bất kỳ trình lập lịch nào cũng được. Điều quan trọng là mỗi lần chạy để lại một tệp, và một lần chạy thất bại phải thông báo cho ai đó.

Chọn máy chủ cho công việc

Cron phù hợp với một máy chủ có đĩa bạn kiểm soát. Một công việc CI phù hợp với một kho lưu trữ đã giữ các bản chụp, để lịch sử sống cạnh mã đọc nó.

Bất kể bạn chọn gì, hãy giữ danh sách tên miền trong một tệp, để việc thêm một tên miền chỉ là một lần chỉnh sửa chứ không phải thay đổi kịch bản.

Thông báo khi thất bại, không phải mọi lần thành công

Thông báo khi kịch bản thất bại, hoặc khi số dư giảm xuống dưới mức bạn đã chọn. Một thông báo thành công mỗi buổi sáng sẽ khiến mọi người quen với việc bỏ qua kênh chứa vấn đề thực sự.

Ghi lại đối tượng _credits từ mỗi lần chạy, như ví dụ Python đã làm, và xem xét xu hướng này một lần mỗi tháng.

So sánh chênh lệch hàng tuần trong năm bước

01

Chọn các hành động

Chọn hai hoặc ba lệnh gọi trả lời câu hỏi của bạn. Mỗi lệnh gọi đều tốn tín dụng, vì vậy hãy ghi chi phí bên cạnh nó.

02

Lưu phản hồi thô

Lưu JSON chính xác như khi nó đến, với tên miền và ngày trong tên tệp. Việc định dạng có thể chờ cho đến bước so sánh chênh lệch.

03

Sắp xếp các khóa trước khi so sánh

Sử dụng jq -S hoặc tương đương, để thứ tự khóa không xuất hiện như một sự thay đổi. Ví dụ bash ở trên đã làm điều này.

04

So sánh các danh sách, không phải các tệp

Ghép nối hai phản hồi dựa trên URL hoặc tên miền, sau đó báo cáo những gì đã được thêm, loại bỏ và thay đổi. Một bản diff văn bản thô của một tệp dài rất khó để hành động.

05

Xem lại bản diff và hành động

Gửi các tên miền liên kết bị loại bỏ cho người phụ trách danh sách liên hệ, và các trang bị loại bỏ cho người phụ trách chuyển hướng.

Kiểm tra một kịch bản trước khi một công việc cron phụ thuộc vào nó

Một kịch bản chạy không giám sát nên chứng minh bản thân trước. Hãy sử dụng một tên miền nhỏ, đọc toàn bộ JSON, và chỉ sau đó mới mở rộng danh sách.

Một kiểm tra nhanh tính hợp lý là so sánh các tổng số với lệnh gọi tổng quan miễn phí cho cùng một tên miền. Các con số không cần phải khớp chính xác với một danh sách trả phí, nhưng chúng phải tương đồng về quy mô.

Chạy với hai tên miền

Hai tên miền kiểm tra vòng lặp, các tên tệp và các đường dẫn lỗi. Một tên miền có thể vượt qua nhờ may mắn, trong khi hai tên miền sẽ cho thấy liệu vòng lặp có được đặt lại giữa các tên miền hay không.

Sử dụng một tên miền bạn biết rõ và một tên miền bạn không biết, để bạn có thể đánh giá xem đầu ra có đúng không.

Giữ khóa ra khỏi nhật ký và vé hỗ trợ

Các kịch bản thường in toàn bộ địa chỉ yêu cầu, và khóa nằm trong địa chỉ đó dưới dạng tham số. Hãy loại bỏ khóa khỏi bất kỳ dòng nào rời khỏi máy chủ, hoặc gửi nó trong tiêu đề Authorization, điều này giữ nó ra khỏi địa chỉ.

Nếu một khóa xuất hiện trong một vé hoặc một kho lưu trữ công khai, hãy dừng công việc lên lịch sử dụng nó trước lần chạy tiếp theo.

Giữ một ghi chú ngắn về nơi khóa được lưu, các kịch bản nào đọc nó và các máy chủ nào nó gọi. Ghi chú đó là những gì bạn cần khi ai đó hỏi ai có thể tiêu tốn số dư.

Chọn hành động cho mỗi câu hỏi

Bắt đầu từ câu hỏi, không phải từ danh sách điểm cuối. Một bản di chuyển cần biết URL nào chứa liên kết, trong khi một danh sách liên hệ cần điểm số tên miền. Một máy chủ, hai câu hỏi. Mỗi câu hỏi tốn một số tín dụng khác nhau.

Viết chi phí bên cạnh câu hỏi trước khi bạn viết bất kỳ mã nào. Một kịch bản chạy hàng tuần nhân một giá nhỏ lên năm mươi hai lần, và phép nhân này dễ bị quên cho đến khi số dư hiển thị nó.

Các lần thử lại dừng lại khi chúng nên dừng

Thử lại một yêu cầu thất bại vì lý do tạm thời, chẳng hạn như thời gian chờ hoặc lỗi máy chủ, một số lần nhỏ với thời gian chờ tăng dần giữa các lần thử. Không thử lại 401 hoặc 402, vì chờ đợi sẽ không thay đổi câu trả lời nào.

Ghi lại mọi lần thử lại với hành động và tên miền, để một mẫu lỗi xuất hiện dưới dạng một mẫu chứ không phải là sự im lặng.

Đặt số lần thử lại ở một nơi, để mọi lệnh gọi trong kịch bản đều tuân theo cùng một quy tắc. Các vòng lặp thử lại phân tán thường không đồng ý với nhau, và sự không đồng ý đó rất khó tìm trong nhật ký.