Các tệp robot.txt và sitemap.xml có thể động thông qua chuyển hướng .htaccess không?


11

Tôi có một trang web đa ngôn ngữ và đa ngôn ngữ. Nó chạy qua một cài đặt CMS duy nhất (Drupal), vì vậy tôi có một thư mục gốc duy nhất. Vì vậy, nếu tôi có một tệp robots.txt tĩnh, ở đó tôi chỉ có thể hiển thị các tệp cho một tên miền, theo như tôi biết.

Tôi có thể đặt một dòng trong .htaccess

Redirect 301 /robots.txt /robots.php

(hoặc hướng dẫn tương đương, và vui lòng cho biết cái nào nếu được phép)

vì vậy, nó chuyển hướng đến một tệp php động, nơi tôi có thể phục vụ các mục chứa khác nhau theo $_SERVER['HTTP_HOST']?

Và cùng một câu hỏi cho sitemap.xml , vì vậy tôi có thể cung cấp một sitemap.php động chỉ ra các liên kết khác nhau cho mỗi tên miền khác nhau.

Vấn đề không sử dụng .txt và .xml là, như đã đề cập, tất cả các miền đều có chung một thư mục vật lý trong máy tính của máy chủ.


Câu trả lời:


11

Bạn có thể làm cho bất kỳ tập tin động. Cách tốt nhất để làm như vậy không phải thông qua chuyển hướng, mà thông qua các quy tắc viết lại.

RewriteRule ^robots\.txt$  /robots.php [L]

Bằng cách đó, bạn cung cấp năng lượng cho nó bằng một tập lệnh động, nhưng URL không thay đổi. Hầu hết các trình thu thập thông tin (bao gồm Googlebot) sẽ theo các chuyển hướng cho tệp robots.txt , nhưng một số trình thu thập thông tin sẽ bị lẫn lộn nếu bạn giới thiệu các chuyển hướng.

Lưu ý rằng ngay cả khi bạn cấp nguồn cho PHP, tệp robots.txt của bạn sẽ xuất hiện tĩnh đối với mỗi trình thu thập thông tin cho mỗi miền. Việc phục vụ các nội dung khác nhau cho các miền khác nhau hoặc thậm chí cho các tác nhân người dùng khác nhau là điều tốt. Tuy nhiên, việc phục vụ các nội dung khác nhau một cách ngẫu nhiên hoặc dựa trên thời gian trong ngày thực sự có thể gây nhầm lẫn cho các trình thu thập công cụ tìm kiếm và làm rối tung SEO của bạn.


Sơ đồ trang web là tốt để đặt tên theo cách bạn muốn. Bạn có thể chuyển hướng chúng hoặc sử dụng quy tắc viết lại để cấp nguồn cho chúng một cách linh hoạt tại cùng một URL. Bạn cũng có thể đặt tên cho chúng như

  • trang web-a-sitemap.xml
  • trang web-b-sitemap.xml
  • trang web-c-sitemap.xml

Sau đó tham khảo chúng trong robot.txt :

Sitemap: http://www.example.com/example-sitemap.xml

hoặc gửi chúng cho các công cụ tìm kiếm theo cách thủ công thông qua các công cụ quản trị trang web hoặc bảng điều khiển tìm kiếm của chúng.


Cảm ơn cả hai đã phản hồi của bạn. Vui lòng sửa những gì có thể là một lỗi đánh máy, đó là hướng dẫn w3d đã hoạt động, vì vậy mã phải RewriteRule ^robots\.txt$ robots.php [L]không có ký hiệu \.
Cesar

Có, phiên bản với dấu gạch chéo sẽ phù hợp với tệp apache.conf của bạn. Đối với .htaccess, bạn cần phải bỏ nó đi. Tôi đã chỉnh sửa câu trả lời để bao gồm phiên bản thích hợp cho .htaccess.
Stephen Ostermiller

@Cesar Tiền tố gạch chéo trên mẫu (ví dụ. ^/robots\.txt$) Sẽ được yêu cầu nếu lệnh này có trong cấu hình máy chủ, nhưng vâng, nó sẽ không khớp trong các tệp .htaccess trên mỗi thư mục. Tiền tố gạch chéo trên thay thế (ví dụ. /robots.php) Là tùy chọn trong trường hợp này.
MrWhite

5

Có, giống như bất kỳ yêu cầu nào có thể là "động".

Tuy nhiên, bạn sẽ không chuyển hướng (như trong mã ví dụ của bạn), bạn nên viết lại nội bộ bằng cách sử dụng mod_rewrite. (Giống như những gì Drupal có thể đã làm.)

Ví dụ: trong tệp .htaccess gốc của bạn:

RewriteEngine On
RewriteRule ^robots\.txt$ robots.php [L]

RewriteEngine chỉ nên xảy ra một lần (mặc dù nó không thực sự quan trọng nếu nó xảy ra nhiều lần).

Bạn chỉ cần đảm bảo rằng nó không xung đột với bất kỳ chỉ thị nào khác trong tệp .htaccess của bạn. Vì vậy, điều này có lẽ nên ở gần đầu tập tin, chắc chắn là trước bộ điều khiển phía trước của bạn .


4

Làm cho tệp sơ đồ trang web động là tốt - đó là một cách tốt để tự động cập nhật sơ đồ trang web của bạn.

Làm cho tệp robot.txt động (cho cùng một máy chủ! Làm điều này cho các máy chủ riêng biệt về cơ bản chỉ là một tệp robot.txt bình thường cho mỗi tệp.) Có thể gây ra sự cố: nó không được thu thập thông tin mỗi khi URL được thu thập từ trang web , do đó, có thể xảy ra rằng phiên bản "sai" được lưu trữ. Ví dụ: nếu bạn thực hiện thu thập dữ liệu tệp robot.txt trong giờ làm việc, thì có thể nó đã được lưu trong bộ nhớ cache và theo dõi trong một ngày - có nghĩa là không có gì được thu thập thông tin (hoặc luân phiên, được lưu trong bộ nhớ cache khi cho phép thu thập thông tin). Ví dụ, Google thu thập tệp robot.txt khoảng một lần cho hầu hết các trang web.


Tôi thấy không có sự khác biệt ở đây giữa tĩnh hoặc động. Tôi cũng sẽ sử dụng phần động để cung cấp các phiên bản khác nhau theo các máy chủ khác nhau, nhưng vì tất cả các máy chủ đều có chung thư mục vật lý trong máy chủ, đó là cách để có robot1.txt, robot2.txt, robot3.txt (số nghĩa là chúng ta đang ở miền nào).
Cesar

Tôi không nghĩ rằng năng động ở đây có nghĩa là họ muốn phục vụ các nội dung khác nhau mỗi lần. Họ chỉ muốn cung cấp năng lượng cho nó thông qua PHP để họ có thể đưa ra quyết định dựa trên tên máy chủ trong mã PHP. Tôi thường làm cho robot.txt động để phục vụ các quy tắc khác nhau cho các tác nhân người dùng khác nhau.
Stephen Ostermiller

2
Vâng, như tôi đã đề cập, thực hiện nó cho nhiều máy chủ về cơ bản giống như có các tệp robot.txt riêng biệt trên mỗi máy chủ, điều này là tốt. Tuy nhiên, đôi khi chúng tôi thấy các trang web cố gắng kiểm soát thu thập thông tin theo thời gian trong ngày bằng cách sử dụng tệp robot.txt động - điều này gây ra rất nhiều vấn đề.
John Mueller

Điểm tốt. Tôi đã chỉnh sửa câu trả lời được chấp nhận của mình với cảnh báo không làm cho robot.txt rất năng động.
Stephen Ostermiller

0

Không cần tạo sitemap.php vì: 1. Đối với mỗi ngôn ngữ, bạn có thể chạy một tệp sitemap.xml riêng và chỉ định từng ngôn ngữ trong bảng điều khiển của công cụ tìm kiếm. 2. Các tệp sơ đồ trang web tiêu chuẩn có thể được viết lại thường xuyên để bao gồm nội dung gần đây và nó làm cho chúng theo cách động - đối với .php đó là không bắt buộc. Tùy thuộc vào cơ chế cập nhật nội bộ và cron để tạo lại cùng một tệp với phần mở rộng tiêu chuẩn .xml

Các tệp sơ đồ trang web là tĩnh và chỉ các bản cập nhật làm cho chúng động - chúng không cập nhật theo thời gian thực. Có thể nguyên nhân khiến họ viết lại mỗi phút, nhưng không cần thiết vì: 1. Google sẽ không kiểm tra trong vòng chưa đầy 1 giờ kể từ lần gửi trước 2. Khi tệp sơ đồ trang web lớn, hãy viết lại chúng thường sẽ làm cho hiệu suất máy chủ kaput.

Khi có khối lượng dữ liệu lớn và nó làm cho tệp sơ đồ trang web lớn hơn 50mb, cần có một hệ thống có nhiều sơ đồ trang web. Điều đó có nghĩa là sitemap2,3 ... .xml sẽ thêm vào danh sách tệp chính, nhưng nội dung trong các tệp này vẫn được sửa cho đến khi các tệp này được tạo lại (ví dụ: bằng cron).

Ngoài ra, đề cập đến việc một khi công cụ tìm kiếm đã truy cập tệp, nó sẽ không quay lại tệp rất nhanh (trừ khi được thực hiện thủ công). Nó xác nhận rằng trong mọi trường hợp không cần phải tạo cập nhật sitemap.php theo thời gian thực, bởi vì một sitemap.xml bình thường tự nó có thể là động, cập nhật với nội dung mới trong cả ngày hoặc một tuần.

Tôi không thể nghĩ ra bất kỳ ưu điểm nào khi sử dụng sitemap.php. Nó sẽ không tốt, vì có những cách tốt hơn / phù hợp hơn để sử dụng các tệp này.


Một vài lý do động có thể được ưu tiên: Sơ đồ trang web chiếm nhiều dung lượng đĩa trong khi tạo động không chiếm không. Sơ đồ trang web cần được cập nhật và sơ đồ trang web động có thể là một cách dễ dàng để làm điều đó.
Stephen Ostermiller
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.