robots.txt 및 sitemap.xml 파일이 .htaccess 리디렉션을 통해 동적 일 수 있습니까?


13

다국어 및 다중 도메인 사이트가 있습니다. 고유 한 CMS 설치 (Drupal)를 통해 실행되므로 단일 루트 디렉토리가 있습니다. 따라서 정적 robots.txt가 있으면 내가 아는 한 단일 도메인의 파일 만 표시 할 수 있습니다.

.htaccess에 줄을 넣을 수 있습니까?

Redirect 301 /robots.txt /robots.php

(또는 동등한 지시 사항이며 허용되는 경우 지시하십시오)

그래서 그것은 동적 PHP 파일로 리디렉션됩니다 $_SERVER['HTTP_HOST'].

sitemap.xml 과 동일한 질문 이므로 각 도메인마다 다른 링크를 나타내는 동적 sitemap.php 를 제공 할 수 있습니다 .

언급 한 바와 같이 .txt 및 .xml을 사용하지 않는 문제는 모든 도메인이 서버 컴퓨터에서 하나의 물리적 디렉토리를 공유한다는 것입니다.


답변:


12

모든 파일을 동적으로 만들 수 있습니다. 가장 좋은 방법은 리디렉션이 아니라 다시 쓰기 규칙을 사용하는 것입니다.

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

이렇게하면 동적 스크립트로 강화하지만 URL은 변경되지 않습니다. Googlebot을 포함한 대부분의 크롤러는 robots.txt 에 대한 리디렉션을 따르지만 리디렉션을 도입하면 일부 크롤러가 혼란 스러울 수 있습니다.

PHP를 사용하여 전원을 켜도 robots.txt는 각 도메인의 각 크롤러에 정적으로 표시 되어야 합니다. 다른 도메인이나 다른 사용자 에이전트에 대해 다른 콘텐츠를 제공하는 것이 좋습니다. 그러나 다른 콘텐츠를 무작위로 제공하거나 시간을 기준으로 검색 엔진 크롤러를 혼동하고 SEO를 망칠 수 있습니다.


그러나 원하는대로 사이트 맵 이름을 지정할 수 있습니다. 이러한 URL을 리디렉션하거나 다시 쓰기 규칙을 사용하여 동일한 URL에서 동적으로 전원을 공급할 수 있습니다. 당신은 또한 같은 이름을 지정할 수 있습니다

  • site-a-sitemap.xml
  • site-b-sitemap.xml
  • site-c-sitemap.xml

그런 다음 robots.txt 에서 참조하십시오 .

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

또는 웹 마스터 도구 또는 검색 콘솔을 통해 수동으로 검색 엔진에 제출하십시오.


귀하의 답변에 감사드립니다. 오타가 될 수있는 것을 수정하십시오. 작동 한 w3d 명령이므로 코드 RewriteRule ^robots\.txt$ robots.php [L]에 \ 기호가 없어야합니다 .
Cesar

예, 슬래시가있는 버전은 apache.conf 파일에 적합합니다. .htaccess의 경우이를 해제해야합니다. .htaccess에 적합한 버전을 포함하도록 답변을 편집했습니다.
Stephen Ostermiller

@Cesar 이 지시어가 서버 설정에있는 경우 패턴 (예 :)에 슬래시 접두사 ^/robots\.txt$가 필요하지만, 디렉토리마다 .htaccess 파일에서 일치하지 않습니다. 온 슬래시 접두사 대체 (예. /robots.php)이 경우 선택 사항입니다.
MrWhite

5

예, 같은 방법으로는 어떤 요청은 "동적"이 될 수 있습니다.

그러나 예제 코드와 같이 리디렉션 하지 않으므로 mod_rewrite를 사용하여 내부적으로 다시 작성 해야합니다 . (드루팔이 이미하고있는 것과 동일합니다.)

예를 들어 루트 .htaccess 파일에서 :

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

RewriteEngine 여러 번 발생하더라도 실제로는 중요하지 않지만 한 번만 발생해야합니다.

.htaccess 파일의 다른 지시문과 충돌하지 않는지 확인하십시오. 따라서 이것은 아마도 파일의 시작 근처에 있어야 합니다. 전면 컨트롤러 앞에 있습니다.


4

사이트 맵 파일을 동적으로 만드는 것은 좋습니다. 사이트 맵을 자동 업데이트하는 좋은 방법입니다.

robots.txt 파일을 동적으로 만들기 (동일한 호스트에 대해! 별도의 호스트에 대해이 작업을 수행하는 것은 본질적으로 각 호스트마다 일반적인 robots.txt 파일 일뿐입니다.) 문제가 발생할 수 있습니다. 사이트에서 URL을 크롤링 할 때마다 크롤링되지 않습니다. "잘못된"버전이 캐시 될 수 있습니다. 예를 들어 업무 시간 동안 robots.txt 파일을 크롤링하면 캐시 된 다음 하루 동안 추적 될 수 있습니다. 즉, 크롤링이 허용되지 않는 경우 크롤링되지 않습니다. 예를 들어 Google은 대부분의 사이트에서 하루에 한 번 robots.txt 파일을 크롤링합니다.


정적 또는 동적에서 차이점이 없습니다. 또한 동적 부분을 사용하여 다른 호스트에 따라 다른 버전을 제공하지만 호스트는 모두 컴퓨터 서버에서 동일한 물리적 디렉토리를 공유하기 때문에 robots1.txt, robots2.txt, robots3.txt (번호) 우리가 어느 도메인에 있는지 의미).
Cesar

동적이라고 생각하지 않는다는 것은 그들이 매번 다른 콘텐츠를 제공하고 싶다는 것을 의미합니다. PHP 코드를 통해 호스트 이름을 기반으로 결정을 내릴 수 있도록 PHP를 통해 전원을 공급하려고합니다. 나는 종종 robots.txt를 동적으로 만들어 다른 사용자 에이전트에 다른 규칙을 제공합니다.
Stephen Ostermiller

2
예, 언급했듯이 여러 호스트에 대해 수행하는 것은 본질적으로 호스트 당 별도의 robots.txt 파일을 갖는 것과 같습니다. 그러나 때로는 동적 robots.txt 파일을 사용하여 시간에 따라 크롤링을 제어하려는 사이트가 많은 문제를 일으키는 경우가 있습니다.
John Mueller

좋은 지적. robots.txt를 매우 역동적으로 만들지 말라는 경고와 함께 허용 된 답변을 편집했습니다.
Stephen Ostermiller

0

다음과 같은 이유로 sitemap.php를 작성할 필요가 없습니다. 1. 각 언어마다 별도의 sitemap.xml 파일을 실행하고 검색 엔진 콘솔에서 각각을 지정할 수 있습니다. 2. 표준 사이트 맵 파일을 정기적으로 재 작성하여 최신 컨텐츠를 포함시킬 수 있으며 .php가 필요하지 않으므로 동적으로 만듭니다. 표준 업데이트 .xml을 사용하여 동일한 파일을 다시 만드는 것은 내부 업데이트 메커니즘과 cron에 달려 있습니다.

Sitemap.xml 파일은 정적이며 업데이트만으로 인해 동적으로 만들어집니다. 실시간으로 업데이트되지 않습니다. 매분마다 다시 쓰게 할 수는 있지만 다음과 같은 이유로 필요하지 않습니다. 1. Google은 마지막 제출 후 1 시간 이내에 확인하지 않습니다. 2. 사이트 맵 파일이 크면 다시 작성합니다. 종종 서버 성능을 향상시킵니다.

많은 양의 데이터가 있고 사이트 맵 파일이 50MB보다 큰 경우 사이트 맵이 여러 개인 시스템이 필요합니다. 이는 sitemap2,3 ... .xml이 기본 파일 목록에 추가되지만 이러한 파일의 컨텐츠는 이러한 파일이 다시 작성 될 때까지 (예 : cron에 의해) 고정 된 상태로 남아 있음을 의미합니다.

또한 검색 엔진이 파일에 액세스 한 후에는 파일을 수동으로 수행하지 않는 한 파일로 다시 돌아 오지 않습니다. 일반적인 sitemap.xml 자체는 동적 일 수 있으므로 하루나 일주일 내내 새로운 콘텐츠로 업데이트되므로 sitemap.php의 실시간 업데이트를 만들 필요가 없음을 확인합니다.

sitemap.php를 사용하는 전문가를 생각할 수 없습니다. 이 파일을 사용하는 다른 더 좋고 적절한 방법이 있기 때문에 좋지 않습니다.


동적이 선호되는 몇 가지 이유 : Sitemap은 많은 디스크 공간을 차지하지만 동적으로 생성하는 것은 아무 것도 사용하지 않습니다. 사이트 맵을 최신 상태로 유지해야하며 동적 사이트 맵을 사용하면 쉽게 할 수 있습니다.
Stephen Ostermiller
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.