2013-03-11 2 views
1

Я надеюсь, что кто-то может помочь мне с этой проблемой, которую я пытался решить за последние несколько дней. Я хочу полностью скрыть многоуровневую навигацию Magento от поисковых систем, но сделать ее доступной для пользователей. По причинам SEO я не хочу соглашаться на NoFollowing всех ссылок или использовать noindex, следуя метатегам или даже полностью блокируя его с помощью Robots.txt. Самый эффективный способ обработки этого будет показывать только многоуровневую навигацию для пользователей с включенными Cookies, поскольку Google не использует файлы cookie. Такой же эффект, вероятно, может быть достигнут и с JavaScript, но я выбрал метод Cookie.Скрытие многоуровневой навигации Magento от поисковых систем

До сих пор мне удалось реализовать грубую часть JS, чтобы проверить, включены ли файлы cookie после загрузки страницы (адаптировано из другого потока на этом форуме). Если файлы cookie включены, он ничего не делает и многоуровневые навигационные дисплеи, но если файлы cookie не включены, я хочу удалить блок «catalog.leftnav». Я не могу для жизни понять, как это сделать из моего сценария JS. Все, что мне удалось достичь, - это удалить элемент div или установить style.display никому и т. Д., И, хотя все эти методы удаляют ссылки из внешнего интерфейса, Google все еще может их видеть. Вот пример кода, который я до сих пор в шаблон/каталог/слой/filter.phtml

<div id="shop-by-filters"> 
    <ol> 
    <?php foreach ($this->getItems() as $_item): ?> 
    <li> 
    <?php if ($_item->getCount() > 0): ?> 
    <a href="<?php echo $this->urlEscape($_item->getUrl()) ?>" rel="nofollow"><?php echo $_item->getLabel() ?></a> 
    <?php else: echo $_item->getLabel() ?> 
    <?php endif; ?> 
    <?php if ($this->shouldDisplayProductCount()): ?> 
    (<?php echo $_item->getCount() ?>) 
    <?php endif; ?> 
    </li> 
    <?php endforeach ?> 
    </ol> 
</div> 

<script type="text/javascript"> 
if (navigator.cookieEnabled) { 
    return true; 
} else if (navigator.cookieEnabled === undefined) { 
    document.cookie = "testcookie"; 
    if (cookie_present("testcookie")) 
     return true; 
} else { 
var elem = document.getElementById('shop-by-filters'); 
elem.parentNode.removeChild(elem); 
} 
</script> 

Может кто-нибудь помочь мне с этим, или есть лучший способ идти об этом? Пожалуйста, имейте в виду, что я все еще пытаюсь задуматься над Magento, поэтому мне могут потребоваться некоторые инструкции, если реализация сложна.

спасибо.

Брендон

ответ

0

Я не уверен, если робот Google будет надежно разобрать ваш JavaScript.

Возможно, вам лучше скрыть многоуровневую навигацию на основе текущей сессии с помощью php.

<?php if (Mage::getSingleton('customer/session')): ?> 
    ...your nav code... 
<?php endif ?> 
+0

Спасибо за предложение @pspahn. К сожалению, я не думаю, что работал так, как я надеялся. Прошу прощения, если это глупый вопрос, но разве Google создает клиент/сеанс при обходе страницы? Я завернул весь код в файле filter.phtml с вашей функцией, но если я вытащил страницу в GWT с помощью «Fetch as Google» и просмотрел проанализированный код, все ссылки все еще есть. Кроме того, имеет ли клиентская сессия какое-либо отношение к файлам cookie? Возможно, я внедрил ваше предложение неправильно. Вот моя страница, если вы хотите посмотреть сами: [link] (http: //www.flowersforafrica.com/flowers /) – inMotionGraphics

0

Прежде всего, Javascript ничего не сделает, чтобы Google не индексировал это содержимое.

Почему бы вам не «согласиться на NoFollowing all links»? Именно для этого и предназначен NoFollow. Вы также можете сказать Google не обращать внимания на строки классификаторов/запросов в Инструментах для веб-мастеров.

Если по какой-то причине вы действительно хотели, чтобы скрыть этот блок от Google, редактировать шаблон и строка сравнения $_SERVER['HTTP_USER_AGENT'] против очень открытого списка Google, пользовательских агентов здесь http://support.google.com/webmasters/bin/answer.py?hl=en&answer=1061943

EDIT - строка сравнить

<?php if (stripos($_SERVER['HTTP_USER_AGENT'], 'Googlebot') !== false): ?> 
<div id="shop-by-filters"> 
    <ol> 
    <?php foreach ($this->getItems() as $_item): ?> 
    <li> 
    <?php if ($_item->getCount() > 0): ?> 
    <a href="<?php echo $this->urlEscape($_item->getUrl()) ?>" rel="nofollow"><?php echo $_item->getLabel() ?></a> 
    <?php else: echo $_item->getLabel() ?> 
    <?php endif; ?> 
    <?php if ($this->shouldDisplayProductCount()): ?> 
    (<?php echo $_item->getCount() ?>) 
    <?php endif; ?> 
    </li> 
    <?php endforeach ?> 
    </ol> 
</div> 
<?php endif; ?> 
+0

Я бы также подумал, что NoFollow был бы таким, каким был бы путь, и теперь я не заметил все ссылки, однако, согласно Inchoo: http://inchoo.net/online-marketing/magento- seo-how-to-handle-problems-called-by-layered-navigation/это самое худшее, что вы можете сделать, хотя он действительно не говорит, почему. Не знаю, как бы я мог реализовать сравнение строк. Можете ли вы привести пример? Конечно, это не остановит другие SE. – inMotionGraphics

+0

Спасибо за обновление кода выше Jared. Я реализовал его, как вы предлагаете, однако теперь ссылки фильтра скрыты для пользователя в Chrome и IE10. Может ли быть ошибка с кодом, возможно? Кроме того, как только мы выясним, как обнаружить поисковые системы, было бы здорово удалить весь блок, как я описал в своем оригинальном посте. Возможно ли это? Благодарю. – inMotionGraphics

+0

Это не имеет смысла, если «HTTP_USER_AGENT» не возвращает что-то вроде «Googlebot» в этих браузерах (а это не так). Вы можете найти их список здесь http://www.useragentstring.com/pages/Chrome/ –

0

Это гладкий предмет. Мы использовали этот код, чтобы скрыть многоуровневую навигацию от Google, но мы не уверены, что он работает ...

<div id="filters-no-follow"></div> 

<?php 
function prepare_for_echo($string) { 
$no_br = trim(preg_replace('/\s+/', ' ', $string)); 
$no_slashes = str_replace('\'', '\\\'', $no_br); 
return $no_slashes; 
} 
?> 

<script> 
function please_enable_cookies() { 
var f = document.getElementById('filters-no-follow'); 
f.innerHTML = '<div class="no-cookies-error">Enable cookies to choose filters.</div>'; 
} 

function please_load_filters() { 
var f = document.getElementById('filters-no-follow'); 
f.innerHTML = '<?php if (!empty($filtersHtml) || !empty($stateHtml)): ?>' 
+ '\n<div class="block block-layered-nav">' 
+ '\n <div class="block-title">' 
+ '\n  <strong><span><?php echo prepare_for_echo($this->__('Shop By')); ?></span></strong>' 
+ '\n </div>' 
+ '\n <div class="block-content">' 
+ '\n  <?php echo prepare_for_echo($this->getStateHtml()); ?>' 
+ '\n  <?php if ($this->canShowOptions()): ?>' 
+ '\n  <p class="block-subtitle"><?php echo prepare_for_echo($this->__('Shopping Options')); ?></p>' 
+ '\n  <dl id="narrow-by-list">' 
+ '\n   <?php echo prepare_for_echo($filtersHtml); ?>' 
+ '\n  </dl>' 
+ '\n  <?php endif; ?>' 
+ '\n </div>' 
+ '\n</div>' 
+ '\n<?php endif; ?>'; 
} 

function are_cookies_enabled() 
{ 
    var cookieEnabled = (navigator.cookieEnabled) ? true : false; 

    if (typeof navigator.cookieEnabled == "undefined" && !cookieEnabled) 
    { 
     document.cookie="testcookie"; 
     cookieEnabled = (document.cookie.indexOf("testcookie") != -1) ? true : false; 
    } 
    return (cookieEnabled); 
} 

if(are_cookies_enabled()) { 
please_load_filters(); 
} else { 
please_enable_cookies(); 
} 
</script> 
+0

Извините, Дариус, я только видел ваш ответ сейчас ... смогли ли вы проверить, правильно ли работает ваше решение? Если нет, попробуйте загрузить страницу в Инструментах Google для веб-мастеров, чтобы увидеть, как Google видит ее. Мне было бы интересно узнать, работает ли это, поскольку мне действительно нужно решить эту проблему. Спасибо. – inMotionGraphics

Смежные вопросы