Thứ ba, 14/04/2015 | 00:00 GMT+7

Cách tìm các liên kết bị hỏng trên trang web của bạn bằng Wget trên Debian 7

Đã bao nhiêu lần bạn nhấp vào một liên kết HTML trên một trang web mà chỉ gặp lỗi 404 Not Found? Các liên kết bị hỏng tồn tại do các trang web đôi khi bị di chuyển hoặc bị xóa theo thời gian. Công việc của administrator web là tìm ra những liên kết bị hỏng đó trước khi con người hoặc rô bốt công cụ tìm kiếm thực hiện. Sự chậm trễ trong việc khắc phục sự cố dẫn đến trải nghiệm user không tốt và có thể bị phạt xếp hạng trang công cụ tìm kiếm.

Nếu trang web chứa nhiều hơn một vài trang, việc kiểm tra thủ công từng liên kết riêng lẻ trở nên quá tốn công sức, nhưng có rất nhiều công cụ tự động hóa tác vụ đó. Bạn có thể sử dụng các ứng dụng dựa trên web, như những ứng dụng do Google Webmaster Tools và World Wide Web Consortium (W3C) cung cấp, nhưng chúng thường thiếu các tính năng nâng cao hơn. Nếu bạn chạy WordPress, bạn có thể sử dụng một plugin, nhưng một số công ty lưu trữ web chia sẻ cấm chúng vì chúng chạy trên cùng một server với trang web và việc kiểm tra liên kết tốn nhiều tài nguyên.

Một tùy chọn khác là sử dụng chương trình dựa trên Linux trên một máy riêng biệt. Chúng bao gồm các trình thu thập thông tin web chung cũng phát hiện ra các liên kết bị hỏng (như wget ) và trình kiểm tra liên kết được xây dựng tùy chỉnh (như linkcheckerklinkstatus ). Chúng có khả năng tùy biến cao và giảm thiểu mọi tác động tiêu cực đến thời gian phản hồi của trang web mục tiêu của bạn.

Hướng dẫn này giải thích cách sử dụng wget để tìm tất cả các liên kết bị hỏng trên một trang web để bạn có thể sửa chúng.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần :

  • Hai Debian 7 Server, một máy chung để chạy wget từ ( generic-1 ) và một máy lưu trữ trang web ( web server -1 ).

  • Một user sudo không phải root trên cả generic-1webserver-1 . Bấm vào đây để xem hướng dẫn.

  • webserver-1 cần phải cài đặt LAMP . Bấm vào đây để xem hướng dẫn.

  • Tùy chọn, web server có thể có domain đã đăng ký của riêng nó. Nếu vậy, hãy sử dụng domain của bạn ở bất cứ đâu bạn thấy your_server_ip . Bấm vào đây để xem hướng dẫn.

Mặc dù hướng dẫn này được viết cho Debian 7, các ví dụ về wget cũng sẽ chạy trên các bản phân phối Linux hiện đại khác. Bạn có thể cần cài đặt wget trên các bản phân phối khác mà nó không được bao gồm theo mặc định.

Bước 1 - Tạo trang web mẫu

Đầu tiên, ta sẽ thêm một trang web mẫu có nhiều liên kết bị thiếu.

Đăng nhập vào web server -1 . Mở một file mới có tên spiderdemo.html để chỉnh sửa bằng nano hoặc editor yêu thích của bạn.

sudo nano /var/www/spiderdemo.html 

Dán phần sau vào file . Đây là một trang web rất đơn giản bao gồm hai liên kết bị hỏng, một liên kết nội bộ (thêm IP server của bạn vào vị trí được đánh dấu bên dưới) và một liên kết bên ngoài.

<html> <head> <title>Hello World!</title> </head> <body>  <p> <a href="http://your_server_ip/badlink1">Internal missing link</a>. <a href="https://www.digitalocean.com/thisdoesntexist">External missing link</a>. </p>  </body> </html> 

Lưu và đóng file .

Tiếp theo, thay đổi chủ sở hữu file và group spiderdemo.html thành user web server mặc định, www-data .

sudo chown www-data:www-data /var/www/spiderdemo.html 

Cuối cùng, thay đổi quyền file của file HTML mới.

sudo chmod 664  /var/www/spiderdemo.html 

Đến đây bạn có thể xem trang mẫu tại http:// your_server_ip /spiderdemo.html .

Bước 2 - Chạy wget

wget là một trình download trang web có mục đích chung cũng được dùng như một trình thu thập thông tin web. Trong bước này, ta sẽ cấu hình wget để báo cáo xem mỗi liên kết trỏ đến một trang hiện có hay bị hỏng mà không tải trang xuống.

Lưu ý: Chỉ kiểm tra các liên kết trên trang web mà bạn sở hữu. Việc kiểm tra liên kết trên một trang web phải chịu chi phí máy tính đáng kể, vì vậy những hoạt động này có thể được hiểu là gửi thư rác.

Đăng nhập vào generic-1 và chạy lệnh wget sau. Dưới đây là giải thích về mỗi lá cờ; bạn có thể sửa đổi lệnh này cho trường hợp sử dụng của bạn .

wget --spider -r -nd -nv -H -l 1 -w 2 -o run1.log  http://your_server_ip/spiderdemo.html 

Sau đây là các cờ cơ bản bạn cần :

  • --spider dừng wget từ tải trang.

  • -r làm cho wget theo đệ quy từng liên kết trên trang.

  • -nd , viết tắt của --no-directories , ngăn không cho wget tạo một hệ thống phân cấp các folder trên server của bạn (ngay cả khi nó chỉ được cấu hình thành spider).

  • -nv , viết tắt của --no-verbose , ngừng wget từ xuất ra thông tin bổ sung mà là không cần thiết cho việc xác định các liên kết bị phá vỡ.

Sau đây là các thông số tùy chọn mà bạn có thể sử dụng để tùy chỉnh tìm kiếm của bạn :

  • -H , viết tắt của --span-hosts , làm cho wget thu thập thông tin đến các domain phụ và domain khác với domain chính (tức là các trang web bên ngoài).

  • -l 1 là viết tắt của --level . Theo mặc định, wget thu thập dữ liệu sâu tới năm cấp so với URL ban đầu, nhưng ở đây ta đặt nó thành một. Bạn có thể cần chơi với thông số này tùy thuộc vào tổ chức trang web .

  • -w 2 , viết tắt của --wait , hướng dẫn wget đợi 2 giây giữa các yêu cầu để tránh bắn phá server , giảm thiểu mọi tác động đến hiệu suất.

  • -o run1.log lưu kết quả của wget vào một file có tên run1.log thay vì hiển thị nó trong terminal của bạn.

Sau khi bạn chạy lệnh wget ở trên, hãy extract các liên kết bị hỏng từ file kết quả bằng lệnh sau.

grep -B1 'broken link!' run1.log 

Tham số -B1 chỉ định rằng, đối với mỗi dòng phù hợp, wget hiển thị một dòng bổ sung của ngữ cảnh hàng đầu trước dòng phù hợp. Dòng trước này chứa URL của liên kết bị hỏng. Dưới đây là kết quả mẫu từ grep trên.

http://your_server_ip/badlink1: Remote file does not exist -- broken link!!! https://www.digitalocean.com/thisdoesntexist: Remote file does not exist -- broken link!!! 

Bước 3 - Tìm URL liên kết giới thiệu

Bước 2 báo cáo các liên kết bị hỏng nhưng không xác định các trang liên kết giới thiệu, tức là các trang trên trang web có chứa các liên kết đó. Trong bước này, ta sẽ tìm các trang web liên kết giới thiệu.

Một cách thuận tiện để xác định URL liên kết giới thiệu là kiểm tra log truy cập của web server . Đăng nhập vào web server -1 và tìm kiếm liên kết bị hỏng trong log Apache.

sudo grep Wget /var/log/apache2/access.log | grep "HEAD /badlink1"     

Đầu tiên grep trong lệnh trên tìm tất cả các yêu cầu truy cập bởi wget đến webserver. Mỗi yêu cầu truy cập bao gồm chuỗi Tác nhân user , chuỗi này xác định tác nhân phần mềm chịu trách nhiệm tạo yêu cầu web. Định danh User Agent * cho wgetWget/1.13.4 (linux-gnu) .

grep thứ hai tìm kiếm URL một phần của liên kết bị hỏng ( /badlink1 ). URL một phần được sử dụng là một phần của URL theo sau domain .

Đầu ra mẫu từ chuỗi lệnh grep như sau:

111.111.111.111 - - [10/Apr/2015:17:26:12 -0800] "HEAD /badlink1 HTTP/1.1" 404 417 "http://your_server_ip/spiderdemo.html" "Wget/1.13.4 (linux-gnu)"    

URL liên kết giới thiệu là mục cuối cùng thứ hai trên dòng: http:// your_server_ip /spiderdemo.html .

Kết luận

Hướng dẫn này giải thích cách sử dụng công cụ wget để tìm các liên kết bị hỏng trên một trang web và cách tìm các trang liên kết giới thiệu có chứa các liên kết đó. Đến đây bạn có thể sửa chữa bằng cách cập nhật hoặc xóa bất kỳ liên kết bị hỏng nào.


Tags:

Các tin liên quan