Cách sửa URL «Discovered / Crawled – Currently Not Indexed» bằng DeepSeek Harness

Chạy pipeline lập chỉ mục Search Console trong DeepSeek Harness: batch headless một lần với dsh --profile headless, hoặc phiên web UI tương tác với vòng lặp lên lịch hàng tuần — cả hai đường đều gửi danh sách qua Google Indexing API (200 URL/ngày)

DeepSeek Harness (dsh) chạy các agent thực sự làm được việc, và rất ít công việc SEO phù hợp với nó hơn pipeline URL chưa được lập chỉ mục: đọc danh sách, kiểm tra từng URL, phân loại, chờ phê duyệt, gửi, xác minh. Mỗi giai đoạn là một lệnh hoặc một file — chính xác là vùng mà agent harness làm chủ.

Hai câu hỏi quyết định cách bạn thiết lập. Muốn một đợt chạy một lần có thể script hóa và đưa vào cron? Chạy headless. Muốn nhìn nó làm việc, trả lời câu hỏi của nó, và phê duyệt từng đợt trong cửa sổ trò chuyện? Dùng web UI. Hướng dẫn này trình bày cả hai đường, và pipeline bên dưới giống nhau cho cả hai. Nếu bạn muốn giải thích sâu về ý nghĩa của «Discovered – currently not indexed» và «Crawled – currently not indexed» cùng cách đọc chúng, chúng tôi đề cập trong phiên bản Hermes Agent của quy trình này; ở đây chúng tôi tập trung vào việc thực thi bằng dsh.

Chọn đường của bạn

Headless một lần

Web UI + lịch trình

Phù hợp nhất với

Đợt chạy có script, cron, chạy kiểu CI, thử nghiệm

Sàng lọc tương tác, thiết lập đầu tiên, học cách agent ra quyết định

Bắt đầu

dsh --profile headless "tác vụ"

dsh web (mở 127.0.0.1:3080)

Phê duyệt

Danh sách đã duyệt trước trong file; agent hỏi qua công cụ hỏi khi quy tắc cần con người

Hỏi trực tiếp trong trò chuyện, phê duyệt từng đợt

Lên lịch

cron (hoặc công cụ lên lịch của dsh nếu profile tải plugin Schedule)

Giống nhau, nhưng bạn thấy từng lần chạy

Đầu ra

File báo cáo trong thư mục dự án

File báo cáo cộng bản ghi trò chuyện

Sơ đồ quyết định so sánh đường headless một lần của dsh với web UI cộng vòng lặp lên lịch

Headless cho các đợt, web UI cho lần chạy đầu — pipeline bên dưới giống nhau.

Cả hai đường chia sẻ một quy tắc: bước ghi (gửi đến Google) luôn đứng sau cổng phê duyệt của con người. Trong chế độ headless, điều đó nghĩa là bạn rà soát file agent tạo ra trước khi để nó chạy lệnh gửi; trong chế độ web, bạn phê duyệt trong trò chuyện.

Bạn sẽ nhận được

Thư mục dự án indexing/ chứa: kho URL, danh sách đã phân loại (to-submit.txt, skip.txt, needs-fix.txt), hàng đợi gửi đã phê duyệt, và nhật ký chạy. Mỗi lần chạy dsh tạo một báo cáo ngắn: đã gửi bao nhiêu, đã bỏ qua bao nhiêu và vì sao, và điều gì thay đổi từ lần trước. Thiết lập đầu mất 60–90 phút (chủ yếu là thông tin xác thực phía Google); chạy hàng tuần mất 15 phút.

Trước khi bắt đầu

  • dsh đã cài và cấu hình. Cập nhật lên bản hiện tại bằng npx @deepseek-ai/dsh@latest web nếu cần. Khóa API và cài đặt của bạn nằm trong ~/.dsh/ (profiles, sessions, settings.yaml), và dsh web chạy được hoặc một tác vụ headless thành công xác nhận cài đặt.
  • Property GSC bạn sở hữu, dạng sc-domain:example.com.
  • Thông tin xác thực đọc: OAuth client cho Search Console API (client ID + secret) cho script đọc.
  • Thông tin xác thực ghi: dự án Google Cloud với Indexing API đã bật, file JSON service account, và email service account được thêm làm Owner trong GSC → Cài đặt → Người dùng và quyền. 403 khi gửi nghĩa là bước này thất bại.
  • Hai thư mục script GSC trong workspace: skill đọc (sitemaps, search analytics, kiểm tra URL) và skill lập chỉ mục (index_submit.py). Python 3 với pip install google-auth google-api-python-client.
  • Thư mục dự án, ví dụ ~/gsc-indexing-project với data/, scripts/, logs/.

Thiết lập phía Google giống hệt cho mọi agent, và tài liệu của skill gsc-indexing hướng dẫn bạn qua các bước Cloud Console: bật Indexing API, tạo service account, tải file khóa, thêm làm Owner.

Đường A: chạy headless một lần

Chế độ headless là dsh --profile headless "tác vụ": một tác vụ, một câu trả lời, thoát. Đặt toàn bộ pipeline trong một lệnh, hoặc chia qua vài lần chạy trong lúc gỡ lỗi.

Lần chạy đầu, từ thư mục dự án:

bash
dsh --profile headless "Chạy giai đoạn 1 của pipeline lập chỉ mục GSC. Liệt kê sitemap cho sc-domain:example.com bằng script gsc_query.py, lấy từng URL kèm lastmod, bỏ trùng, và ghi data/url-inventory.csv. Báo cáo tổng số."

Đầu ra tốt trông như thế nào: CSV thật với tổng khớp báo cáo sitemap trong GSC, và không có cột bịa ra. Kiểm tra chất lượng: mở file và xem ngẫu nhiên năm URL. Nếu agent báo lỗi xác thực, chạy lại luồng OAuth của GSC và thử lại; script đọc cần token mới.

Giai đoạn 2:

bash
dsh --profile headless "Kiểm tra URL trong data/url-inventory.csv qua URL Inspection API và chia thành data/to-submit.txt, data/skip.txt (kèm lý do một dòng), và data/needs-fix.txt. Chỉ bao gồm URL có lastmod trong 90 ngày qua."

Agent chạy script kiểm tra theo nhóm (API giới hạn tốc độ theo property; kiểm tra hạn mức hiện tại trong Google Cloud Console). Kiểm tra sự hợp lý của việc chia: danh sách bỏ qua phải bị chi phối bởi trang noindex, canonical-away, và bản trùng. Nếu trang có hàng nghìn URL cho danh sách needs-fix rỗng, hãy mở rộng cửa sổ đầu vào.

Giai đoạn 3 là cổng phê duyệt, và nó không bao giờ chạy không giám sát:

bash
dsh --profile headless "Đọc data/needs-fix.txt và data/skip.txt. Lập hàng đợi sửa-và-gửi thành bảng: URL, nguyên nhân nghi ngờ (không liên kết nội bộ, trùng, canonical, noindex, mỏng, soft 404), bằng chứng, hành động đề xuất, mức rủi ro. Đừng gửi gì cả."

Bạn rà soát bảng trong báo cáo nó in ra, chỉnh data/to-submit.txt chỉ còn các URL bạn phê duyệt, rồi chạy giai đoạn 4:

bash
dsh --profile headless "Gửi URL trong data/approved-urls.txt qua script lập chỉ mục (index_submit.py submit --urls-file data/approved-urls.txt). Chạy check-auth trước. Ghi từng kết quả vào logs/submissions.log."

Đầu ra mong đợi: một dòng kết quả thông báo mỗi URL, không có 403. Đường khôi phục: 403 nghĩa là service account không phải Owner property; 429 nghĩa là bạn chạm hạn mức 200-mỗi-ngày hoặc 600-mỗi-phút; chia danh sách qua nhiều ngày. Nếu lần chạy chết giữa chừng, dsh --profile headless --resume <session> tiếp tục nó.

Đường B: web UI cộng lịch trình hàng tuần

dsh web mở UI trình duyệt tại 127.0.0.1:3080. Trò chuyện qua các giai đoạn giống nhau, nhưng tương tác: agent yêu cầu bạn xác nhận danh sách đã phân loại trước khi lập hàng đợi, và một lần nữa trước khi chạy lệnh gửi. Luồng phê duyệt trực tiếp đó là lý do chính chọn đường này khi thiết lập đầu: bạn thấy agent sắp làm gì với property Google của bạn trước khi nó làm.

Khi pipeline chạy được, thêm nhịp điệu. Plugin Schedule của dsh đăng ký schedule_create, nó chạy lại tác vụ theo bộ đếm thời gian trong phiên đang mở:

schedule_create: every 7 days, run "Inspect data/url-inventory.csv, classify new and changed URLs, and draft the submission queue. Do not submit."

Nếu profile của bạn không tải plugin Schedule, kết quả tương đương là một dòng cron bọc lệnh headless:

bash
0 9 * * 1 cd ~/gsc-indexing-project && dsh --profile headless "Chạy kiểm tra lập chỉ mục GSC hàng tuần và lập hàng đợi gửi." >> logs/weekly.log 2>&1
Sơ đồ vòng lặp lên lịch hàng tuần cho pipeline lập chỉ mục dsh với điểm dừng phê duyệt của con người

Lịch trình chạy ba trạm đầu; việc gửi vẫn đứng sau cổng con người.

Giữ bước gửi ngoài lịch trình. Kiểm tra hàng tuần, phân loại, và lập hàng đợi có thể chạy không giám sát; việc gửi chờ con người.

Quy tắc sàng lọc agent áp dụng

Việc phân loại và hàng đợi dựa vào một bảng nhỏ, và bạn nên đặt nó trong thư mục dự án để mọi lần chạy dùng cùng quy tắc:

Nguyên nhân

Cách sửa

Gửi sau khi sửa?

Không có liên kết nội bộ đến trang

Thêm liên kết ngữ cảnh từ trang đã lập chỉ mục

Trang hoàn toàn mới

Không có gì để sửa; gửi một lần, chờ 1–2 tuần

Có, một lần

Bị chặn robots.txt

Mở chặn đường dẫn

Nội dung trùng hoặc mỏng

Viết lại, gộp, hoặc xóa

Chỉ sau thay đổi thực sự

Canonical trỏ nơi khác

Sửa nếu sai; nếu cố ý, loại bỏ URL

Chỉ khi đã sửa

noindex lúc thu thập

Gỡ noindex

Có, sau khi gỡ

soft 404, archive, facet không giá trị

Sửa hoặc xóa; bỏ qua vĩnh viễn

Không

Phân tích sâu hơn về hai trạng thái, gồm vì sao Google thu thập một số trang mà không thu thập số khác, nằm trong hướng dẫn Hermes Agent. Nguyên nhân giống nhau dù harness nào chạy pipeline.

Xác minh, rồi chờ

Sau mỗi đợt, xác nhận thông báo bằng status: nó chỉ chứng minh Google có metadata cho nó, không phải trang đã được lập chỉ mục. Ba đến bảy ngày sau, kiểm tra lại các URL đã gửi và so sánh trạng thái. Mô hình lành mạnh là discovered → crawled → indexed trong một đến hai tuần. Dữ liệu GSC trễ vài ngày, và Google thu thập lại theo lịch riêng của nó, nên URL vẫn kẹt ở «Crawled – currently not indexed» sau 10–14 ngày với sửa lỗi thực sự phía sau là phán quyết về chất lượng nội dung, không phải vấn đề gửi. File nhật ký là nơi thấy rõ điều này: ngày, URL, loại thông báo, và trạng thái kiểm tra ở lần chạy sau. Đó cũng là thước đo: danh sách chưa lập chỉ mục phải thu hẹp theo thời gian, không phải số thông báo tăng lên.

Giới hạn thẳng thắn

  • Indexing API được tài liệu hóa chính thức cho trang JobPostingBroadcastEvent. Gửi trang thường qua nó là thực hành phổ biến, nhưng Google không đưa ra đảm bảo và không hứa hỗ trợ cho mọi loại trang.
  • Không có API công khai cho nút «Request indexing» trong Search Console. Indexing API là kênh script hóa gần nhất, không phải bản sao của nút.
  • Tự động hóa không tạo ra mức ưu tiên. Nếu trang vẫn chưa lập chỉ mục sau khi bạn sửa và gửi, bước tiếp theo là công việc nội dung, không phải thêm một lần chạy theo lịch.

FAQ

Tôi có thể chạy chỉ chế độ headless, không dùng web UI chút nào? Có. dsh --profile headless "tác vụ" chạy một tác vụ và thoát; thông tin xác thực vẫn ở ~/.dsh/, và script đọc hoạt động như nhau. Dùng web UI một lần để xác minh pipeline từ đầu đến cuối, rồi script hóa.

Lần chạy chết giữa đợt. Tôi có mất việc không? Không. Tiếp tục bằng dsh --profile headless --resume <session>, và chạy lại script gửi; nó loại bỏ URL trùng, nên gửi lại URL đã thông báo trong cùng đợt không gây hại.

Tôi quản lý nhiều property GSC. Tôi có phải lặp lại mọi thứ cho từng trang web? Script nhận đối số --site sc-domain:..., nên một workspace có thể chứa kho và nhật ký của nhiều property. Giữ một file hàng đợi đã duyệt và một lệnh gửi cho mỗi property, để lỗi hạn mức trên một trang web không bao giờ chặn trang khác.

Tác giả: Camille Rhodes, Kiến trúc sư hơn 300 quy trình nội dung AI tại Auspia. Camille viết về tự động hóa nội dung, hệ thống xuất bản, và các quy trình biến agent AI thành hoạt động tăng trưởng đáng tin cậy.

Khám phá chủ đề này

Tiếp tục theo cùng mạch tăng trưởng