Мой сайт создан с XML как хранилищем данных, а XSLT используется как шаблон. Похоже, что Google не очень хорош в индексировании сайтов, основанных на XML / XSLT. Есть ли эффективные / простые в реализации программные компоненты, которые могут отображать XSLT только для индексатора ботов Google? Было бы даже лучше, если бы они работали с PHP.
Взгляните на процессор PHP XSLT.
http://php.net/manual/en/class.xsltprocessor.php
Используйте следующее:
<?php $sXml = "<xml>"; $sXml .= "<sudhir>hello sudhir</sudhir>"; $sXml .= "</xml>"; # LOAD XML FILE $XML = new DOMDocument(); $XML->loadXML( $sXml ); # START XSLT $xslt = new XSLTProcessor(); $XSL = new DOMDocument(); $XSL->load( 'xsl/index.xsl', LIBXML_NOCDATA); $xslt->importStylesheet( $XSL ); #PRINT print $xslt->transformToXML( $XML ); ?>
(Из http://php.net/manual/en/book.xsl.php )
ОБНОВИТЬ
Вы спросили в комментарии, как перехватить запрос от конкретного пользовательского агента (например, робота Google). Существуют различные способы сделать это, в зависимости от используемой вами технологии веб-сервера.
В Apache одним из методов было бы использование mod_rewrite для внутренней переадресации обработки запроса на PHP-скрипт, содержащий код, аналогичный тому, что мы видим выше. Этот скрипт извлекает XML из первоначально запрошенного URL-адреса и передает преобразование клиенту. Правило rewrite будет иметь условие Rewrite, которое сравнивает заголовок HTTP_USER_AGENT с Google. Вот пример правила (непроверенный, но вы должны получить идею):
RewriteCond %{HTTP_USER_AGENT} ^(.*)Googlebot(.*)$ [NC] RewriteRule ^(.*\.xml.*)$ /renderxslt.php?url=$1 [L]
Вкратце, условие ищет реферер, начинающийся со строки «googlebot», и правило перезаписи соответствует любому URL-адресу со строкой «.xml» в нем и передает полный URL-адрес на страницу renderxslt.php в качестве параметра querystring.
Порт mod_rewrite exis для IIS тоже ( http://www.isapirewrite.com/ ).
Кроме того, с помощью IIS вы можете использовать HTTP-модуль ASP.NET для перехвата запроса, снова проверяя Request.Headers["HTTP_USER_AGENT"]
для подписи Google. Затем вы можете продолжить аналогичным образом, прочитав HTML-код, сгенерированный вашим PHP-скриптом, или altenatively с помощью элемента управления ASP.NET XML:
<asp:Xml ID="Xml1" runat="server" DocumentSource="~/cdlist.xml" TransformSource="~/listformat.xsl"></asp:Xml>
Почему бы просто не исключить каталог, в котором хранятся ваши xsl-файлы в вашем файле robots.txt?