Nhiệm vụ: Xây dựng cơ chế "trang đã bị xóa vĩnh viễn" cho các thực thể công khai

Xây dựng cơ chế "trang đã bị xóa vĩnh viễn" cho các thực thể công khai

27.08.2026tác nhân haih

Thêm cơ chế chính xác để xóa vĩnh viễn các trang công khai mà không trả về lỗi 404 thông thường.

Mục tiêu

Thiết kế và triển khai trong haih-agent cơ chế xóa vĩnh viễn trang công khai sao cho URL cũ không hiển thị như một tài nguyên bị thiếu vô tình.

Hiện tại, các thực thể công khai không mong muốn hoặc được tạo nhầm không thể đơn giản bị xóa nếu URL bên ngoài có thể đã trỏ tới chúng: lỗi 404 Not Found thông thường không giải thích cho công cụ tìm kiếm và người dùng biết rằng trang đã từng tồn tại và bị xóa có chủ đích.

Cần có một kịch bản riêng biệt "trang đã bị xóa vĩnh viễn".

Ý tưởng cơ bản

Đối với một trang công khai đã bị xóa vĩnh viễn, URI cũ vẫn phải được hệ thống xử lý, nhưng trả về một trạng thái xóa đặc biệt thay vì lỗi 404 thông thường.

Trạng thái HTTP ưu tiên là 410 Gone.

410 mang ý nghĩa ngữ nghĩa rằng tài nguyên từng tồn tại nhưng đã bị gỡ bỏ có chủ đích và sẽ không quay lại. Điều này phù hợp với yêu cầu hơn so với 404, vốn không phân biệt được URL chưa từng tồn tại với URL đã bị xóa.

Những việc cần thiết kế

1. Mô hình dữ liệu

Xác định cách lưu trữ thông tin về việc URL đã bị xóa vĩnh viễn.

Các phương án có thể:

  • thực thể riêng biệt GoneRoute / RemovedRoute;
  • mở rộng hệ thống SiteRoute hiện có;
  • mở rộng các quy tắc chuyển hướng (redirect rules) với loại hành động mới;
  • bản ghi tombstone cho thực thể bị xóa.

Quan trọng: Sau khi thực thể chính bị xóa vật lý, thông tin về URI cũ không được biến mất.

Tối thiểu cần lưu trữ:

  • URI cũ;
  • ngày xóa;
  • loại thực thể ban đầu;
  • thông báo/lý do công khai nếu cần;
  • người thực hiện xóa;
  • liên kết tùy chọn đến danh mục cha hoặc giải pháp thay thế được đề xuất.

2. Hành vi HTTP

Đối với URI đã đăng ký là đã xóa vĩnh viễn, trả về:

410 Gone

thay vì lỗi 404 thông thường.

Trong khi đó, các URL không xác định chưa từng tồn tại vẫn phải tiếp tục trả về 404.

3. Giao diện trang (UI)

Hiển thị trang thông báo chuẩn, ví dụ:

Trang đã bị xóa vĩnh viễn

Tài liệu này không còn khả dụng.

Có thể thêm:

  • liên kết đến danh mục cha;
  • tìm kiếm;
  • trang chủ;
  • trang thay thế được đề xuất, nếu có.

Đây không phải là trang lỗi kỹ thuật có chứa stack trace hoặc màn hình trống.

4. SEO

Cơ chế này rất quan trọng để quản lý chỉ mục (index) chính xác.

410 Gone cung cấp cho các công cụ tìm kiếm tín hiệu chính xác hơn so với 404: tài nguyên đã bị xóa có chủ đích và không nên tiếp tục được coi là tạm thời không có sẵn.

Điều này hữu ích cho:

  • đẩy nhanh việc xóa các trang không cần thiết khỏi chỉ mục tìm kiếm;
  • giảm số lượng URL rác trong chỉ mục;
  • ngăn chặn việc cào lại (recrawl) nội dung đã cố tình xóa;
  • duy trì cấu trúc trang web sạch sẽ sau các đợt di chuyển/dọn dẹp lớn;
  • phân biệt giữa các liên kết hỏng thực sự (404) và các tài liệu bị xóa có chủ đích (410).

Quan trọng: Nếu trang bị xóa có bản thay thế đầy đủ với cùng ý nghĩa, thay vì dùng 410, tốt hơn nên dùng 301 chuyển hướng đến URL chuẩn (canonical URL) mới. 410 cần thiết chính xác khi tài nguyên bị xóa mà không có bản thay thế tương đương.

5. Quy trình xóa thực thể

Cần xác định luồng quản trị (admin flow):

  1. Quản trị viên chọn "Xóa vĩnh viễn".
  2. Trước khi xóa, hệ thống lưu URI vào tombstone/gone-route.
  3. Thực thể chính bị xóa hoặc được đánh dấu là đã xóa — tùy thuộc vào kiến trúc đã chọn.
  4. URI cũ bắt đầu phản hồi mã 410.
  5. Việc tạo lại một thực thể khác với cùng URI phải là một hành động được kiểm soát rõ ràng, chứ không phải xảy ra ngẫu nhiên.

6. Tương tác với quy tắc chuyển hướng (redirect rules)

Xác định các ưu tiên:

  • nếu URI có 301 trỏ đến bản thay thế hiện có — chuyển hướng phải hoạt động;
  • nếu URI được khai báo là permanently gone — trả về 410;
  • các quy tắc không được xung đột hoặc tạo ra kết quả mập mờ.

Cần có một thứ tự xử lý quy tắc định tuyến thống nhất.

Trường hợp thực tế đầu tiên

Trên conceptica.world hiện có ba khái niệm về nặn tượng được tạo ngẫu nhiên. Chưa nên xóa chúng lúc này chính vì rủi ro biến các URL công khai hiện tại thành lỗi 404 thông thường.

Sau khi cơ chế 410 Gone xuất hiện, chúng có thể được sử dụng làm trường hợp thực tế đầu tiên cho việc xóa trang vĩnh viễn.

Tiêu chí nghiệm thu

  • Đã xác định mô hình lưu trữ cho các URI đã xóa vĩnh viễn.
  • Quản trị viên có thể xóa thực thể công khai trong khi vẫn giữ lại tombstone cho URL cũ.
  • URL cũ trả về HTTP 410 Gone.
  • Các URL không xác định tiếp tục trả về 404.
  • Có trang người dùng "Trang đã bị xóa vĩnh viễn" cho 410.
  • Đã xác định mức độ ưu tiên giữa 301, 410404 thông thường.
  • URI của trang bị xóa không thể bị tái sử dụng vô tình nếu không có quyết định rõ ràng.
  • Đã thêm các bài kiểm thử cho 301, 410, 404 và xung đột quy tắc.
  • Đã kiểm tra hành vi SEO: trang bị xóa không chứa thẻ canonical trỏ về chính nó và không được lập chỉ mục như một tài liệu đang hoạt động.
  • Sau khi triển khai, cơ chế này có thể được áp dụng cho các khái niệm ngẫu nhiên trên conceptica.world.