2013-07-30 1 views
1

Я только что начал использовать метатеги schema.org, чтобы выделить структурированные данные на моем сайте.Можно ли использовать `itemscope =" false "itemtype =" false "` для обозначения страницы без структурированных данных?

Я использую node.js, express и jade для создания моего контента. Я настраиваю эти теги на некоторых, но не на всех страницах. Я не хочу искажать немаркированные страницы для поисковых систем.

Я не нашел изящный способ вставить атрибут itemscope в мой html-документ ситуационно.

Редактировать - @martinhepp предлагает передать строку атрибута Jade и вставить его внутри тега. Я бы хотел сделать это, но я не знаю, как это сделать. Вот моя попытка и выход.

//node.js 
locals.testSchemaTag = 'itemscope itemtype="http://schema.org/Product"'; 
//jade 
p(locals.testSchemaTag) Foo Bar 
//rendered HTML 
<p locals.testschematag="">Foo Bar</p> 

Так что было бы предпочтительнее. Но если это не работает или никто не знает, как это сделать, для страниц, где я не хочу назначать конкретную схему, достаточно ли установить itemscope на false?

Вот что я делаю сейчас.

// node.js 
res.locals.schema = res.locals.schema || { 
    itemtype: "false", 
    itemscope: "false", 
    properties: [], 
};   
if(res.locals.schema.itemtype !== "false"){ 
    res.locals.schema.itemscope = "itemscope"; 
    res.locals.schema.properties = res.locals.schema.properties || []; 
}; 

// jade 
!!! 
html(itemscope=locals.schema.itemscope, itemtype=locals.schema.itemtype) 
    head 

// rendered output A 
<html itemscope="itemscope" itemtype="http://schema.org/Restaurant"> 

// rendered output B 
<html itemscope="false" itemtype="false"> 

Будет ли это путайте поисковые системы или они будут понимать, что я отключив itemscope и itemtype атрибуты моего <html> элемента здесь?

ответ

1

Я работаю на Яндексе (yandex.ru/.com - самый популярный русский Search Engine) и могу сказать, как мы имеем дело с ним. Готов поспорить, хотя этот процесс практически одинаковый для каждого SE.

Так что три вещи здесь должны быть приняты во внимание.

1. Microdata W3C doc говорит

Элемент с атрибутом itemscope указанного создает новый элемент, группу пар имя-значение.

То есть, если вы поставите itemscope атрибут в HTML-элемента, оно рассматривается в качестве элемента. Даже в вашем случае (фактически «= false» игнорируется). Если вы не хотите определять новый элемент, вам просто не следует использовать атрибут itemscope.

2.Every Search Engine, которая использует разметку, имеет собственный инструмент для проверки данных - инструмент, в котором вы можете проверить обработку разметки специально для этого SE. Для Яндекса это here, для Google - here. У Bing тоже есть одно, но сначала требуется Signing In в своих инструментах для веб-мастеров. Используйте его для каждого вопроса, который у вас есть о разметке для partucular SE, и вы получите довольно подробный ответ.

Итак, вы не представили пример разметки, но давайте рассмотрим этот простой.

<div itemscope="false" itemtype="false"> 
    <span itemprop="name">Not a happy camper</span> - 
    by <span itemprop="author">Ellie</span>, 
    <meta itemprop="datePublished" content="2011-04-01">April 1, 2011 
    <span itemprop="description">The lamp burned out and now I have to replace it. </span> 
</div> 

Так валидатор Яндекса говорит следующее:

microdata 
    WARNING: itemtype false not recognized by validator 
    itemType = false 
    name = Not a happy camper 
    author = Ellie 
    datepublished = 2011-04-01 
    description = The lamp burned out and now I have to replace it. 

Как вы видите, itemscope = «ложь» был проигнорирован и тип элемента был установлен в положение «ложно» (из-за ItemType = "ложь «). Это Yandex нашел некоторую сущность, но не знает, что с ней делать (подробнее об этом в третьем пункте).

Как насчет Google?

Item 
    property: 
    name: Not a happy camper 
    author: Ellie 
    datepublished: 2011-04-01 
    description: The lamp burned out and now I have to replace it. 

Почти такой же, за исключением того, что он обрабатывал объект как без типа вообще.

3.Но на самом деле вы не должны заботиться об этом :) Никакая поисковая система не работает с полным лексиконом и всеми его типами (schema.org, микроформаты или любые другие). То есть каждая поисковая система имеет список типов, которые она понимает и имеет продукты для. Для Yandex список: here, для Google - here, для Bing - here. Как видите, поддержка довольно ограничена, но активно развивается. Что это значит? Даже если ваша «ложная» разметка рассматривается как объект, она нигде не используется. Итак, вы можете сделать это безопасно :)

1

Прежде всего: я предполагаю, что все, о чем вы говорите, происходит на стороне сервера. Любой клиентский Javascript не будет доступен для обычных поисковых роботов, только для будущих расширений браузера schema.org.

Теперь простой ответ: если вы хотите подавить разметку в определенных случаях, просто поставьте условное предложение как для элементов itemscope, так и для ключевых слов itemtype.

// rendered output A 
<html itemscope="itemscope" itemtype="http://schema.org/Restaurant"> 

// rendered output B 
<html> 

Всё.

Также обратите внимание, что в большинстве случаев элемент html является неправильным местом для типа schema.org. Для схемы: WebPage используйте элемент head. Для схемы: Продукт, схема: Предложение и т. Д., Используйте соответствующий элемент в теле шаблона, например. h1, отд, статья, раздел, ...

Martin

+0

Моя проблема в том, что условные предложения в Jade требуют от меня дублировать дочерние элементы. Поэтому мне пришлось бы дублировать ~ 1000 строк кода под HTML, один в 'if' и один в блоке нефрита' else' – Plato

+0

Спасибо за подсказку о позиции элемента tagging. На моих страницах представлены блюда и рестораны. Я поместил теги в тег '' по предложению другого пользователя SO, поэтому общие сценарии Google/Facebook могут обращаться к метаданным. Я предполагаю, что это сработает, если я помечаю свой '# content' div на каждой странице соответствующим образом, а не' ' – Plato

+0

другое решение вместо условных предложений должно помещать строку' "itemscope itemtype = http: //schema.org/MyType "" в переменную и включить механизм шаблона. Если вы не хотите разметки, пропустите пустую строку. Я не знаком с синтаксисом Jade, но он будет выглядеть как '', например. Jinja2. Затем присвойте '" itemscope itemtype = http: //schema.org/MyType "или' "" 'to'% markup% '. Это должно делать свое дело. –

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