Google игнорирует параметры, заданные с помощью атрибута lang


Содержание материала:

Зачем использовать атрибут языка?

Intended audience: шифровальщики HTML (используя редакторы или скрипты), разработчики скриптов (PHP, JSP, и т.д.), и каждый, кто задается вопросом, почему он должен использовать языковые атрибуты в HTML.

Question

Почему я должен использовать атрибут языка на веб-страницах?

Атрибут lang (или иногда атрибут xml:lang ) указывает естественный язык контента веб страницы. Атрибут в html тэге устанавливает язык для всего текста на странице. Если часть страницы использует текст на разных языках, то вы можете добавить к элементу что окружает тот контент языковой атрибут с разными значениями. Для получения информации о том, как использовать языковые атрибуты смотрите Назначение языка в HTML .

Quick answer

Определение языка вашего контента позволяет автоматически сделать ряд вещей, от изменения внешнего вида и поведения страницы, к добыванию информации, изменению способа работы приложения. Некоторые из языковых программ работают на уровне документа в целом, некоторые работают с соответствующими отмеченными фрагментами документа.

Лучше всего добавить информацию о языке к вашему контенту сейчас для того, чтобы пожинать плоды тогда, когда появятся новые разработки. Это легко сделать при создании контента, но сложнее модернизировать позже.

Details

Здесь перечислены некоторые из случаев, в которых информация о языке полезна в данный момент, однако, так как спецификации и браузеры развиваются, то в будущем может быть много дополнительных программ для установки информации о языке.

Стилизация страниц

Языковые атрибуты позволяют варьировать стиль вашего контента за счет языка. Дополнительные сведения о том, как это сделать, смотрите Стилизация с помощью использованием атрибута lang .

Например, возможно, потребуется изменить шрифты и межстрочный интервал, чтобы разместить различные алфавиты, кавычки сгенерированные с помощью стиля могут отличаться языком, ударение, возможно, надо будет выразить способами, которые зависят от языка, и т.д.

Следующий пример показывает, как можно было бы установить определенный шрифт для встроенного Арабского текста на странице.

Другой пример зависящего от языка поведения — это переносы. Правила переноса очень зависят от языка. Описание свойства дефисов в CSS (которое на момент написания только начинает видеть принятия браузеров) говорит «Правильная автоматическая расстановка переносов требует, чтобы перенос ресурса соответствовало языку текста. Итак, в UA нужна только автоматическая расстановка переносов для которых автор назначил язык (например в HTML — lang или в XML — xml:lang ) и для которых есть соответствующий ресурс расстановки переносов. «

Other typographic and layout features that are affected by language include line-breaking, justification, and case conversion, and more are coming as the specifications develop.

Выбор шрифта

Клиентские приложения могут использовать (и используют) информацию о языке для выбора соответствующих языку шрифтов, что улучшает общее впечатление пользователя от страницы.

Например, на странице закодированной в Unicode, текст на Упрощенном Китайском, Традиционном Китайском, Японском, и Корейском языках может разделять ту же самую точку кода для идеографических символов, но люди, которые говорят на этих языках ожидают глифы, которые используются для небольших изменений от языка к языку. При отсутствии явного стиля, примененного автором контента, некоторые браузеры автоматически назначают соответствующие шрифты согласно к языку контента. Иллюстрации на рисунке ниже показывают как повлияет на текст тот факт, если мы ничего не будем менять, но при наличии значения языкового атрибута в таких браузерах как Firefox или Internet Explorer.

Поиск

Хотя автоматическое определение языка обычно используется крупными поисковиками для определения языка ресурсов, внутренняя разметка страницы может использоваться для улучшения качества результатов поиска, которые основанные на лингвистических предпочтениях пользователя.

Программы для проверки орфографии и грамматики

Средства разработки могут приспосабливать проверки правописания и грамматики, которые базируются на языке контента, или игнорировать контент, который не написан языком программы, которая проверяет правописание. Это может значительно повысить эффективность при проверке орфографии.

Браузеры также недавно начали позволять пользователям проверять написание текста который они напечатали в формах или элементах с установленным атрибутом contenteditable . Браузер, который учитывает информацию о языке контента может обеспечить пользователям получение более эффективного опыта.

Перевод

Инструменты для перевода могут использовать языковые атрибуты для определения страниц или разделов текста на определенном языке и автоматически настроить рабочий процесс или защитить текст от изменений переводчиком в инструментах для перевода.

Программы для чтения нетекстового контента

Информация о языке помогает синтезаторам речи и переводчикам Брайля выдавать полезные результаты. Эти приложения должны знать могут ли они выдавать результат в тексте, или же, возможно, им необходимо переключиться на другой языковой режим.

Простановка языковых тэгов рекомендуемая Руководством Веб Доступности W3C, которое введено государственной политикой в некоторых странах, например в UK (Великобритании) — Закон о дискриминации инвалидов (UK).

Анализаторы и скрипты

Отметка контента информацией о языке также позволяет специфическую языковую обработку.

Например, скрипт или таблица стилей XSLT могут использоваться для различных вещей, включая:

  • выборка специфического языкового текста со страницы
  • поиск и отбор информации на страницах, которые написаны на конкретном языке
  • изменение порядка контента удобным для этого языка способом (порядки сортировки очень зависят от языка)
  • применение такого культурного специфического стайлинга, как соответствующие замены цитирования или ударения при преобразовании в такой формат, как XSL-FO.

Имейте в виду, что при создании информации вы не всегда знаете, как позже люди захотят ее обработать.

By the way

За последние годы увеличилась польза отметки языка, так как технология прогрессировала, и будет улучшаться по мере продвижения вперед. Во многих случаях эти программы могут и не быть вам важными, когда вы впервые разрабатываете свой ​​контент, но с течением времени их значение может возрасти. Тем не менее, в настоящее время мы сталкиваемся с круговой проблемой. Люди, которые не видят приложений с информацией о языке не обеспечивают такой информацией свой контент. Приложения, связанные с языком разворачиваться медленно, пока эта информация не будет широко применяться к контенту. Этот цикл может быть нарушен авторами контента, которые назначают информацию о языке как само собой разумеющееся. Чем больше будет правильно отмеченного контента, тем более полезными и всепроникающими станут такие программы. Как правило, очень легко добавить информацию о языке и это не несет никаких санкций.

Правда ли, что поиск Гугл игнорирует ключевые слова?

Гугл индексирует только заголовки и мета- описания, это правда?

Google не игнорирует ключевые слова на страницах в тегах, расположенных внутри тега , он их индексирует, это легко проверить, достаточно ввести ключевые слова в поисковую форму и google Вам выдаст страницы, содержащие ключевые слова из Вашего поискового запроса, но совсем иначе обстоит дело с метатегом keywords. Соглашусь с Slavomir по поводу поисковых алгоритмов, никто Вам этого не скажет, здесь вряд ли есть те, кто работал в google, мы же можем строить только свои предположения. Я считаю, что более-менее достоверную информацию можно получить из справочника метатегов google:

Особое внимание следует обратить на то, что содержится в последнем предложении, поскольку meta name keywords не входит в этот список, следовательно включать его «неразумно», опять же если ссылаться на этот источник от Google. Еще веской причиной не использовать данный метатег я бы назвал то, что он раскрывает семантическое ядро Вашего сайта, а сеошники профессионалы от конкурентов могут проанализировать Ваш код на страницах и увидеть по каким ключевым словам Вы продвигаете свои страницы. Еще Вы себе время сэкономите, если не будете его заполнять. Это что касается продвижения и использования метатега в поисковой системе Google.

Как правильно использовать атрибуты rel=alternate и hreflang=x

Атрибут rel=»alternate» hreflang=»x» помогает Google предоставлять соответствующие URL по языку или региону пользователя поисковой системы.

Примеры ситуаций, в которых рекомендуется использовать атрибут rel=»alternate» hreflang=»x» :

  • У вас переведен только шаблон страницы, например, элементы навигации и нижний колонтитул, в то время как основное содержание на одном языке. Это характерно для сайтов с контентом произведенным пользователями, например, сообщения на форуме.
  • Ваши страницы имеют очень похожий текст на одном языке, но с небольшими отличиями, которые изменяются в зависимости от региона. Это могут быть, например, англоязычные материалы направлены для читателей из США, Великобритании и Ирландии.
  • Ваш сайт полностью переведен. Например, каждая страница существует на русском и английском языках.

Использование атрибута rel=alternate hreflang=x

Допустим, что у вас есть русскоязычная страница http://www.example.com/ и её испанская версия http://es.example.com Одним из двух способов вы можете сообщить Google, что под другим URL находится испаноязычный аналог русской версии сайта:

  • Элемент HTML link – в разделе HTML по адресу http://www.example.com/ поместите элемент ссылку на испанскую версию этого сайта (http://es.example.com/):
  • HTTP заголовок – при публикации файлов в формате, отличном от HTML (например, PDF), вы можете указать другую языковую версию URL с помощью HTTP-заголовка: Ссылка: ; rel=»alternate»; hreflang=»es»

Если у вас есть несколько языковых версий URL, в каждой вы должны использовать атрибут rel=»alternate» hreflang=»x» для указания других.

Например, если веб-сайт содержит материалы на французском, английском и русском языках, сайт на русском языке должен содержать ссылки с атрибутами rel=»alternate» hreflang=»x» на английскую и французскую версию, а они, в свою очередь, должны содержать аналогичные ссылки, указывающие на две другие версии.

Поддерживаемые значения атрибута hreflang

Значение атрибута hreflang определяет язык (chinese формате ISO 639-1) и, опционально, регион (в формате ISO 3166-1) страницы в качестве альтернативного URL.

  • de: материалы на немецком языке, независимо от региона;
  • en-GB: материалы на английском языке, для пользователей из Великобритании;
  • de-ES: материалы на немецком языке, для пользователей из Испании.

Система письма определяется по стране. Например, использование кода zh-TW вызовет автоматический выбор китайского письма (в данном случае традиционного). Конкретную систему письма вы также можете определить самостоятельно с помощью кодов ISO 15924.

Существует также возможность ввода комбинации, обозначающих систему письма и региона.

Пример конфигурации: rel=alternate hreflang=x

Компания «Пример» запустила сайт предназначенный для пользователей из Германии, Швейцарии и России.

Под следующим URL находятся в основном одно и тоже содержание, но с некоторыми отличиями вытекающими из этого региона:

  • http://www.example.com/site.html – главная на немецком языке;
  • http://de-de.example.com/site.html – немецкая версия с ценами в евро;
  • http://de-ch.example.com/site.html – немецкая версия с ценами в швейцарских франках;
  • http://ru.example.com/stranica.html – сайт на русском языке.

Атрибуты rel=»alternate» hreflang=»x» работают на уровне страницы, а не всего сайта, поэтому вы должны соответствующим образом отмечать каждый набор страниц, включая главную страницу.

Обновите код HTML во всех URL, добавив группу элементов с атрибутами rel=»alternate» hreflang=»x» на каждой странице:

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

Атрибут hreflang как его использовать для указания языка

Автор: Эдуард Бунаков · Опубликовано 18 мая 2020 · Обновлено 1 июня 2020

Атрибут hreflang (тег) — это техническое решение для сайтов, которые публикуют один и тот же контент на разных языках. Владельцы многоязычных сайтов хотят, чтобы поисковые машины предлагали людям контент на их родном языке. Допустим, ваш посетитель – голландец, страница ранжируется на английском языке, но есть и её голландская версия.

Вы хотите, чтобы Google показывал в выдаче страницу на голландском для пользователя-голландца. Это как раз та задача, для решения которой был разработан hreflang.

Краткое содержание статьи:

Тэг hreflang имеет одни из самых строгих требований, которые встречаются среди инструкций для поисковых машин. Настроить их — непростое и довольно затратное по времени занятие. Чтобы избежать самых распространенных ошибок при использовании hreflang, дочитайте это руководство до конца.

Для чего нужны теги hreflang?

Тэг hreflang – это способ повышения в выдаче страниц, которые имеют одну и ту же информацию, но предназначены для разных языков и/или регионов. Вот три самых популярных способа реализации его на практике:

  • контент с региональными вариантами вроде en-us и en-gb;
  • контент на разных языках, вроде en, de и fr;
  • комбинация разных языков и региональных вариантов.

Тэги hreflang используют, как правило, для работы с разными рынками, использующими один и тот же язык. Например, чтобы разграничить регионы США и Великобритании или Германии и Австрии.

Преимущества использования hreflang для SEO

Почему мы вообще говорим про hreflang? Какие преимущества для SEO дает использование тэга? Есть две основные причины реализовать эту возможность, с точки зрения SEO.

Во-первых, если у вас есть версии страницы, которые оптимизированы под язык и местоположение пользователя, вы захотите, чтобы посетители сайта попадали на нужную страницу.

Наличие правильного языка и информации, зависящей от местоположения, улучшает пользовательский опыт и приводит к меньшему числу возвратов на страницу с поисковой выдачей. Чем меньше людей возвращается к результатам поиска, тем выше ранжируется сайт.

Во-вторых, hreflang предотвращает проблему дублирования контента. Если у вас есть один и тот же контент на английском языке по разным адресам, предназначенный для Великобритании, США и Австралии, разница на страницах может быть такой же небольшой, как и валютные колебания.

Без hreflang робот Google может не разобраться, что вы хотите сделать, и посчитать этот контент дублирующим. С hreflang вы четко даете понять поисковой системе, что это почти один и тот же контент, но оптимизированный для разных пользователей.

Что такое hreflang?

Hreflang – это тэг, о котором можно сообщить поисковым машинам тремя разными способами, о чем мы подробнее поговорим позже. При помощи этого кода вы определяете все отличающиеся адреса на сайте, по которым расположен один и тот же контент.

По этим ссылкам может располагаться один и тот же контент на разных языках или на одном и том же языке, но предназначенный для разных регионов.

Какие поисковые системы поддерживают hreflang?Тэг поддерживается Google и Yandex. Bing не имеет аналога, но поддерживает языковые метатэги.

Что дает атрибут hreflang?

При полноценном внедрении hreflang каждый адрес страницы определяет, какие еще варианты доступны.

Когда пользователь занимается поиском, Google проходит такие шаги:

  1. определяет, что хочет ранжировать адресную ссылку;
  2. проверяет, есть ли у этой адресной ссылки описание hreflang;
  3. представляет пользователю результат с наиболее подходящим для него адресом.

Текущее местоположение пользователя и его языковые настройки определяют самую подходящую ссылку. У пользователя может быть указано несколько языков в настройках браузера (например, английский и русский).

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

Следует ли использовать атрибут hreflang?

Разобравшись, что такое hreflang и как он работает, можно понять, нужно ли использовать этот тэг в вашем случае. Он нужен, если:

  • у вас есть один и тот же контент на разных языках;
  • у вас есть контент, предназначенный для разных географических регионов, разговаривающих на одном и том же языке.

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

Подсказка: сначала главная страница! Если вы не уверены, хотите ли распространять действие тэга hreflang на весь сайт, начните с главной страницы! Люди, которые ищут вашу компанию, попадут на правильный вариант контента. Такую реализацию осуществить гораздо проще, он «отловит» значительную часть вашего трафика.

Выбор архитектурного решения

При реализации тэга hreflang главное – не переусердствовать. Допустим, у вас есть три варианта страниц:

  • немецкий;
  • немецкий, предназначенный для Австрии;
  • немецкий, предназначенный для Швейцарии.

Вы можете реализовать языковые версии, используя три атрибута hreflang так:

  • de-de, для говорящих на немецком языке пользователей из Германии;
  • de-at, для говорящих на немецком языке пользователей из Австрии;
  • de-ch, для говорящих на немецком языке пользователей из Швейцарии.

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

Чтобы каждый пользователь, который говорит на немецком и не выбирает de-at или de-ch, гарантированно получил страницу для Германии, измените первый атрибут hreflang на de. Во многих случаях указание только языка без региона – лучшее, что можно сделать.

Полезно знать, что при создании наборов ссылок вроде приведенных выше приоритет будет у самых подробных вариантов. Порядок, в котором поисковая система просматривает ссылки, не имеет значения, она всегда будет пытаться подбирать сначала более конкретные, а потом менее конкретные перенаправления.

Техническая реализация – основы

Вне зависимости от того, какой вариант реализации тэга вы выберете, нужно соблюдать три основных правила.

Верные атрибуты hreflang

Атрибут hreflang должен содержать значение, которое состоит из языка в комбинации с регионом. Атрибут языка должен быть записан в формате ISO 639-1 (двухбуквенный код).

Регион указывается по желанию и должен записываться в формате ISO 3166-1 Alpha 2. Точнее говоря, это должен быть официально заданный элемент. Используйте список из Wikipedia, чтобы проверить правильность используемых обозначений языка и региона. Чаще всего на этом этапе ошибки возникают из-за неправильно указанного кода региона.

Неправильный код региона. Google может обрабатывать отдельные распространенные ошибки, связанные с региональными кодами (хотя не стоит на это рассчитывать). Например, поисковая машина может обработать en-uk так же, как и «правильный» en-gb. Но en-eu работать не будет, так как eu не означает страну.

2. Обратные ссылки

Второе правило — обратные ссылки. Вне зависимости от типа реализации, каждому адресу страницы нужны обратные ссылки на другие адреса, указывающие на канонические версии (подробности ниже).

Чем больше у вас языков, тем сильнее хочется ограничить количество обратных ссылок – но не поддавайтесь искушению. Если вы поддерживаете 80 языков, у вас будут ссылки hreflang для 80 адресов страниц, и обойти это невозможно.

3. Ссылка hreflang на себя

Третье и последнее из основных правил – ссылки hreflang на себя. Возможно, это выглядит не менее странно, чем обратные ссылки. Но они важны, и реализация не будет без них работать.

Выбор технической реализации

Есть три варианта реализации hreflang:

  • использование ссылок в ;
  • использование заголовков http;
  • XML-карты сайта.

У каждого варианта есть свои условия использования. Обсудим, когда какой из вариантов использовать.

1. Ссылочные html-элементы для hreflang в

Первый способ реализации hreflang – это ссылочные html-элементы в . Вы добавляете код вроде такого в разделе на каждой странице:

Так как каждый вариант должен иметь ссылку на каждый другой вариант, эта реализация может быть очень громоздкой и замедлять работу сайта. Если у вас 20 языков, выбор ссылочных html-элементов означал бы добавление 20 элементов на каждой странице так, как показано выше.

Это 1,5К обязательной загрузки дополнительного кода на каждой странице, который будет использовать далеко не каждый пользователь. Вдобавок, CSM должна будет сделать несколько вызовов из базы данных, чтобы сгенерировать все эти ссылки.

И все эти действия нужны только для того, чтобы сообщить поисковым системам о нескольких вариантах контента. Вот почему способ не рекомендуется для более-менее крупных сайтов.

2. http-заголовки hreflang

Второй способ реализации hreflang – с помощью http-заголовков. Их применяют для файлов в формате pdf и другого контента не в формате html, который нужно оптимизировать.

Ссылочные элементы отлично работают с html-документами, но не с другими типами контента, так как последние вы не можете включить в параметры этих элементов.

Тут и приходят на помощь http-заголовки. Они должны выглядеть приблизительно так:

Проблема с http-заголовками похожа на проблему со ссылочными элементами в : их придется многократно добавлять для каждого запроса.

3. Реализация hreflang с помощью XML- файла Sitemap

Третий вариант реализации hreflang использует разметку XML-файл Sitemap с картой сайта. Речь идет об атрибуте xhtml:link в Sitemap, который добавляет примечание к каждой адресной ссылке. Во многом он работает аналогично с элементами
.

Если вам показалось, что ссылочные элементы многословные, с реализацией через XML- файл Sitemap дела обстоят еще хуже. Его разметка требует всего один тэг с двумя другими языками:

Вы видите, что в нем есть третья адресная ссылка, в которой страница ссылается на себя, определяя конкретный адрес для варианта en-gb и ссылки для двух других вариантов языка. Две другие адресные ссылки должны быть указаны в Sitemap подобным образом:


Как видно, мы только меняем адресные ссылки в элементе , поскольку все остальное должно оставаться точно таким же. В этом методе каждая адресная ссылка имеет ссылающийся на себя атрибут hreflang и обратные ссылки, соответствующие другим адресам.

Разметка XML- файла Sitemap вроде этой очень многословная: вам нужно сделать много выводов для большого количества адресных ссылок. Преимущество подобной реализации простое: обычных пользователей эта разметка затрагивать не будет. Вам не придется раздувать размер каждой страницы, а при загрузке не будет идти множество обращений к базе данных для генерации разметки.

Еще одно преимущество добавления hreflang через Sitemap – простота изменения одного файла, по сравнению с изменением всех страниц на сайт. Вам не придется проходить долгую процедуру аутентификации; возможно, вы даже получите прямой доступ к файлу Sitemap.

Другие технические аспекты внедрения hreflang

Итак, вы определились с вариантом технической реализации. Вот еще несколько технических моментов, о которых нужно помнить, прежде чем заняться использованием атрибута hreflang.

1. hreflang x-default

x-default – это специальный атрибут hreflang, который определяет, куда нужно направить пользователя, если ни один из языков, определенных в других ссылках, не соответствует настройкам браузера.

В ссылочном элементе это выглядит как:

Когда атрибут вводился, его описали как предназначенный для «международных посадочных страниц», то есть страниц, на которые вы перенаправляете пользователей на основе их географического местонахождения.

Но его можно определить как финальную «ловушку» всех описаний hreflang. Сюда направляются пользователи, если их местоположение и язык не соответствуют ни одному из указанных значений hreflang.

Если в примере с немецким языком, упомянутом выше, пользователь делает поиск на английском и не находит подходящую адресную ссылку, это как раз повод для использования x-default. Тогда в разметке вы укажете четыре ссылки, используя:

Ссылка x-default по умолчанию указывала бы на тот же адрес, что и de. Не советуем удалять ссылку на страницу для de, даже если технически получается один и тот же результат. В конце концов, для определения языка на странице de (для Германии) лучше иметь оба варианта. К тому же это облегчает чтение кода.

2. hreflang and rel=canonical

Значения rel=”alternate” hreflang=”x” и rel= ”canonical” могут и должны использоваться вместе. Для каждого языка должна быть ссылка rel=”canonical”, указывающая на себя. Предположив, что мы находимся на главной странице example.com в первом примере, это должно выглядеть как:

Если бы мы были на странице en-gb, произошло бы только изменение для rel=”canonical”:

Не делайте ошибку, устанавливая ссылку в тэге с rel=”canonical” на http://example.com/ для страницы en-gb, так как это нарушит правильность реализации атрибута. Очень важно, чтобы ссылки hreflang указывали на канонические версии страниц для каждой языковой версии, потому что эти системы должны работать рука об руку!

Полезные инструменты при реализации hreflang

Если вы дочитали до этого места, скорее всего, в голове уже мелькала мысль: «Ничего себе, как это все сложно!» К счастью, есть много доступных инструментов для реализации атрибута hreflang.

Генератор тэга hreflang

Алейда Солис разработал очень полезный генератор тэга hreflang , который поможет при создании ссылочных элементов. Даже если вы не используете реализацию ссылочного элемента, инструмент пригодится при создании какого-нибудь примера кода.

Генератор hreflang для XML-файла Sitemap

Компания Media Flow создала генератор hreflang для XML-файла Sitemap. Просто «скормите» ему CSV-файл с адресными ссылками для каждого из языков, и генератор создаст XML-файл. Это первый серьезный шаг при создании карты сайта.

В подготовленном для ввода CSV-файле нужно выделить по колонке на каждый язык. Если вы хотите добавить адресную ссылку для x-default, просто создайте еще одну колонку и назовите её x-default.

Средство для валидации hreflang

Как только вы добавили разметку к своим страницам, стоит проверить их правильность. Если вы решили добавить ссылочные элементы в раздел , вам повезло, так как есть несколько инструментов для валидации атрибута hreflang в этой реализации. Лучшим среди них является DejanSEO.(http://flang.dejanseo.com.au/)

Топ-пост этого месяца:  Как сделать, чтобы класс .current_page_item остался и на той странице которой не относится к меню

Проверка работоспособности hreflang

Создав работающий атрибут hreflang, вы должны настроить процесс его поддержки. Также будет правильно регулярно контролировать работу созданной реализации, чтобы убедиться в сохранности правильных настроек.

Убедитесь, что люди, которые занимаются размещением контента на вашем сайте, знают об атрибуте hreflang и не повредят его работу.

Важно соблюдать два правила:

  • когда страница удаляется, проверьте, обновлены ли её аналоги;
  • когда страница перенаправляется, измените адресные ссылки на её аналоги.

Если вы регулярно контролируете работоспособность атрибута, у вас не должно возникнуть никаких проблем.

Заключение

Настройка атрибута hreflang — утомительный процесс. Он имеет жесткие стандарты с большим количеством различных нюансов, о которых нужно знать и с которыми приходится иметь дело.

Постоянно появляются обновления спецификаций, поэтому перед очередным созданием реализации hreflang сверьтесь с документаций, например, в Справке Google.

Теги в Google Tag Manager

Тег в Google Tag Manager – это фрагмент JavaScript кода, который собирает данные о посетителях на сайте и в приложении, а затем пересылает их на сторонние сервисы — Google Analytics, Google AdWords, Facebook, Яндекс.Метрика и т.д.

Если вы не используете Google Tag Manager, то все фрагменты кода других сервисов вам приходится вставлять вручную в исходный код страницы сайта. Это не очень удобно и отнимает много времени. Благодаря GTM все становится куда проще — исходный код менять не требуется, достаточно лишь указать в интерфейсе, какие теги вы хотите использовать и когда их нужно активировать.

В Google Tag Manager есть n-ое количество шаблонов тегов, которые облегчают их установку на сайте. Они разделены на категории:

  • рекомендуемые – Universal Analytics, классический Google Analytics, отслеживание конверсий AdWords, ремаркетинг AdWords, счетчик DoubleClick Floodlight, тег продаж DoubleClick Floodlight, Google Optimize, Google Опросы;
  • специальные – пользовательский HTML и пользовательское изображение;
  • еще – сторонние сервисы, Twitter Universal Website Tag, Adometry, Crazy Egg, comScore Unified Digital Measurement, K50 tracking tag, Foxmetrics, Hotjar Tracking Code и другие.

Теги сторонних сервисов

Разберем предметно первые две категории. Шаблоны, поддерживаемые в диспетчере тегов Google (последняя категория «еще»), можно посмотреть в официальной справке Google.

Чтобы создать тег в Google Tag Manager, перейдите на вкладку меню «Теги» и нажмите кнопку «Создать».

В появившемся окне нажмите на пустое пространство конфигурации тега и выберите его тип.

Выбор конфигурации тега

Рекомендуемые теги

Как правило, большинство маркетологов и веб-аналитиков работает с первыми четырьмя рекомендуемыми тегами: Universal Analytics, Классический Google Analytics, Отслеживание конверсий Google AdWords и Ремаркетинг AdWords. В зависимости от решаемых задач могут использоваться и другие.

Классический Google Analytics является устаревшей версией Universal Analytics. Однако он по-прежнему установлен на различных сайтах в интернете и официально поддерживается Google. На смену классическому пришел UA (Universal Analytics, 2012 год), в который привнесли ряд изменений:

  • процесс сбора данных (у классического GA было 5 разных cookies, у UA – 1, ClientID);
  • в UA добавили новый протокол передачи статистических данных, который называется Measurement Protocol;
  • пользовательские определения (параметры и показатели) пришли на смену пользовательским переменным (раньше для создания было доступно 5 метрик, то теперь их количество увеличилось до 20);
  • в UA добавили расширенную электронную торговлю;
  • в UA добавили функцию UserID, которая позволяет связывать разные устройства и объединять различные сеансы и действия во время этих сеансов с уникальным идентификатором. Это отслеживание еще называют кросс-девайсным.
  • и т.д.

Создадим тег «Universal Analytics» и разберем его настройки:

Тип тега – Universal Analytics

В зависимости от выбранного в теге типа отслеживания дополнительные поля настроек будут меняться:

Сравнение полей настроек в зависимости от типа отслеживания

Для простого отслеживания Universal Analytics необходимо добавить один тег и выбрать тип отслеживания «Просмотр страницы». Если же вас интересуют события или транзакции электронной торговли, потребуется добавить и другие теги.

Тип отслеживания – «Просмотр страницы» (Page View)

Выбирается в том случае, когда вас интересует, какие страницы просматривают посетители на вашем сайте.

Для того, чтобы информация из GTM передавалась в Google Analytics, необходимо в тег добавить идентификатор отслеживания GA. Сделать это можно несколькими способами:

  1. указать переменную в опцию «Настройки Google Analytics»;

При такой настройке следует добавить идентификатор отслеживания Google Analytics (например, UA-113446186-1) в пользовательскую переменную типа «Константа», предварительно создав ее.

Настройки Google Analytics

При клике на значок «i» откроется окно с заданной переменной, в которой можно оперативно поменять настройки.

поставить галочку «Включить переопределение настроек в этом теге» и вручную добавить идентификатор отслеживания Google Analytics.

Включить переопределение настроек в этом теге

При активации данного способа у тега появляются дополнительные поля переопределения настроек, в которых мы можем изменять настройки счетчика Google Analytics через интерфейс Google Tag Manager. Она служит для настройки конфигураций Google Analytics, общих для нескольких тегов. Когда вы создаете тег Google Analytics с помощью Universal Analytics, Диспетчер предложит вам выбрать или создать переменную настроек Google Analytics. Большинство пользователей начнут работу с переменной настроек, содержащей только идентификатор отслеживания Google Analytics. Эту переменную можно будет использовать в любых дополнительных конфигурациях тегов с тем же идентификатором отслеживания Google Analytics (при этом вам не понадобится повторно его указывать).

  • Поля, которые необходимо задать – доступен раскрывающийся список с полями, в которых задаются пара «ключ=значение»;

Поля, которые необходимо задать

Например, вы можете добавить поле для кроссплатформенного отслеживания (функция User ID) или для отслеживания поддоменов. При настройке электронной коммерции в Fields to Set также можно передавать значения по товарам – идентификатор (ecomm_prodid), тип страницы (ecomm_pagetype) или общую ценность товаров (ecomm_totalvalue), а также многое другое.

Если вас интересуют отчеты по демографии и интересам, ремаркетинг Google Analytics и интеграция с DoubleClick Campaign Manager (DCM), задайте значение «True». Включить эту функцию можно непосредственно через сам Google Analytics (на уровне ресурса «Отслеживание – Сбор данных – Ремаркетинг «Вкл.»)

Включение ремаркетинга и функций отчетов по рекламе в GA

  • Электронная торговля — Включить расширенные функции электронной торговли;

При значении «True» вы сможете узнавать, когда пользователи добавляли товары в корзину, переходили к оформлению покупки и завершали ее, а также какие сегменты покупателей не совершают заказ. В Google Analytics настройка задается на уровне представления в разделе «Настройки электронной торговли».

Включение отслеживание электронной торговли

Примечание: просто включив эту настройку, данные по электронной коммерции передаваться не будут. Настройка Enhanced Ecommerce куда более сложный процесс и требует определенного времени и навыков.

  • Междоменное отслеживание;

Для корректного сбора данных можно настроить междоменное отслеживание. Тогда сеанс с переходом между вашими разными сайтами, например, domain.com, domain.ru, domain.org, будет засчитан как один сеанс, а время сеанса будет определено как общее время пребывания на всех посещенных ресурсах.

Автоматическое связывание доменов. Перечислите через запятую домены, для которых следует использовать общий идентификатор клиента, либо же создайте переменную типа «Константа» и задайте все домены там;

Использовать в качестве разделителя решетку. Позволяет использовать решетку (#) вместо знака вопроса (?) для добавления значений cookie в URL;

Изменение внешнего вида форм. Позволяет добавить информацию отслеживания к действию с формой.

  • Расширенная конфигурация, в которой можно задать глобальную функцию, использовать отладочную версию и улучшенную атрибуцию ссылок. Настройки в этой категории используются крайне редко и предназначены для опытных пользователей.

Название глобальной функции. Позволяет переименовать глобальную функцию, используемую тегом Universal Analytics.

В некоторых случаях при добавлении элементов библиотеки analytics.js на страницу переменная ga может быть уже занята. Эту проблему можно решить путем переименования глобального объекта ga. Например, чтобы переименовать объект ga в analytics, нужно изменить код отслеживания следующим образом:

Изменение переменной ga в коде отслеживания Google Analytics

Подробнее о переименовании глобальной функции (объектов ga) читайте в официальной справке разработчиков Google.

Использовать отладочную версию. Этот вариант библиотеки analytics.js при выполнении создает подробные записи в консоли JavaScript.

Они содержат сведения об успешно выполненных командах, а также предупреждения и сообщения об ошибках в коде отслеживания. Кроме того, с их помощью можно получить подробную информацию о каждом обращении, отправленном в Google Analytics. Это позволит проверить, какие именно данные отслеживаются.

Чтобы включить отладочную версию библиотеки analytics.js, измените URL в коде отслеживания JavaScript с

Включение отладочной версии через код отслеживания GA

Включение улучшенной атрибуции ссылок. Позволяет повысить точность отчета «Статистика страницы». Когда страница содержит несколько ссылок на один URL, к каждой ссылке добавляется уникальный идентификатор элемента.

В Google Analytics эта функция находится на уровне ресурса в разделе «Настройки ресурса».

Использование улучшенной атрибуции ссылок в Google Analytics

Задать имя трекера. Позволяет присвоить название объекту трекера. Не рекомендуется использовать в GTM, так как указав уже существующее имя трекера, это может привести к искажению данных. Хотя присвоение имени позволяет согласовать работу трекеров, созданных в Google Tag Manager с уже существующим кодом Google Analytics, вместо этого лучше перейти на dataLayer.

С помощью функции переопределения можно сделать так, чтобы тег Google Analytics использовал все те же настройки, которые были заданы в переменной настроек Google Analytics, но данные передавались на другой идентификатор отслеживания.

Подробнее о том, какие теги Google Analytics и дополнительные настройки поддерживает GTM, читайте в официальной справке Google.

Расширенные настройки

Приоритет активации тегов — целое число (положительное или отрицательное), определяющее порядок запуска тегов. Чем больше данное число, тем раньше будет активирован тег при истинности одного из триггеров, связанных с данным тегом. По умолчанию значение «0», и все теги начинают выполняться одновременно независимо от того, закончилось ли выполнение предыдущего тега. Например, тег с приоритетом «3» будет запускаться до тегов с приоритетами 1 и 2.

Приоритет активации тегов

Включить специальное расписание активации тега. Если вы знаете, что некоторый тег понадобится вам на сайте в определенный период времени (например, при проведении рекламной акции вы отслеживаете определенные действия пользователей на сайте) просто активируйте данную настройку. Вы можете задать дату начала (время начала) и дату окончания (время окончания). Также дополнительно необходимо указать часовой пояс. Дата и время окончания не могут предшествовать дате и времени начала.

Включение специального расписания активации тега

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

Активировать тег только в опубликованных контейнерах

Когда вы находитесь в режиме отладки, как правило, вы контейнер не опубликовывайте до тех пор, пока не убедитесь в корректности работы всех настроек. При активации данной настройки тег не будет активироваться, поскольку он не опубликован. Чтобы результаты тестирования были более точными, не включайте эту функцию.

Настройки активации тега

Настройки активации тега

Без ограничений. Тег активируется при каждом срабатывании триггера. Этот вариант используется, только если задан порядок активации тегов.

Один раз на событие (указывается по умолчанию). Тег активируется только один раз при выполнении определенного события. Этот вариант полезен для передачи информации на уровень данных. Информация передается один раз, поэтому и тег срабатывает один раз.

Один раз на страницу. Тег активируется один раз при загрузке страницы. Этот вариант применяется, когда необходимо активировать какой-то пользовательский скрипт JS, который мы подгрузили на страницу с помощью пользовательского HTML-тега.

Например, активации тега «Один раз на страницу» полезна, когда мы хотим отследить прокрутку страницы. Пользователь дошел до какого определенного элемента один раз, и мы это действие отследили. При последующих прокрутах туда-сюда нам уже это не так важно.

Порядок активации тегов

Порядок активации тегов

В Google Tag Manager есть возможность задать тег, который будет активирован перед текущим тегом и тег, который будет активирован после выполнения текущего тега.

После выбора тега у нас появляется настройка, которая позволяет указать параметр.

Порядок активации тегов

Если вы выбираем активировать тег перед текущим, то мы можем указать, что данный тег, в котором мы сейчас находимся не должен быть активирован, если тег, который задан перед ним, приостановлен или не сработал.

Если мы выбираем тег, который должен быть активирован после данного тега, в котором мы сейчас находим и выполняем настройку, то поставив галочку мы указываем, что тег, который выбран из списка, не должен быть активирован, если тег, в котором мы сейчас находимся, приостановлен или не сработал.

В качестве простого примера разберем:

1. клик по кнопке «Подобрать букет» на сайте;

Пример отслеживания клика по кнопке

2. вывод с помощью пользовательского HTML-тега сообщения в консоли браузера «Hello, World». Конструкция имеет такой вид:

Вывод сообщения с помощью пользовательского HTML-тега

В качестве порядка активации тегов зададим следующие значения:

  • в теге – «Подобрать букет» активируем настройку запуска тега перед текущим, выбрав наш пользовательский HTML-тег «Сообщение Hello, World»

Активация тега перед Тег – Подобрать букет

Таким образом, у нас сообщение в консоли «Hello, World» должно появиться до активации тега клика по кнопке «Подобрать букет».

У тега «Сообщение Hello, World» не заданы триггеры для активации, но есть информация о том, что данный тег будет активироваться непосредственно перед тегом «Подобрать букет».

Активация тега перед другими тегами


Перейдя в режим отладки Google Tag Manager и кликнув по кнопку, мы увидим, что по событию gtm.click активировалось два тега, несмотря на то, что у нас в настройках задан только один тег – это «Подобрать букет».

Пример активации тегов

Данные теги связаны между собой последовательностью активации. Аналогичным образом настраивается порядок активации «ПОСЛЕ».

Разберем другие типы отслеживания.

Тип отслеживания – Событие

В этом типе отслеживания задаются значения, которые использовались при настройке событий в Google Analytics.

Тип отслеживания — Событие

Опция «Не взаимодействие». Если вы хотите, чтобы отправка события влияла на ваш показатель отказов, то необходимо установить значение «False» для этого параметра. В противном случае – устанавливайте значение «True».

Опция «Не взаимодействие»

Все остальные настройки идентичны вышеописанным в типе отслеживания «Просмотр страницы».

Тип отслеживания – Транзакция

После того, как будет настроена передача данных о покупке, необходимо настроить тег, который будет передавать данные о транзакции в Google Analytics. Для этого и используется тип отслеживания – Транзакция.

Важно: включение отслеживания электронной торговли и создание тега с данным типом не позволит вам отслеживать данные о покупках пользователей. Для того, чтобы Google Tag Manager начал передавать сведения в Google Analytics обо всех транзакциях (идентификаторе товара, стоимости товара, наименовании и т.д.), необходимо использовать уровень данных или dataLayer, а также определенную конструкцию для передачи соответствующих параметров.

Тип отслеживания – Социальные сети

С помощью данного типа можно отслеживать социальные взаимодействия пользователей с сайтом, например, лайки/репосты Facebook, Vk, Twitter и т.д.

Тип отслеживания – Время

Отслеживание событий, срабатывающих по таймеру, может использоваться, если у вас есть страница (например, для просмотра видео), на которой пользователи могут долго оставаться, не запуская событий. Поскольку сеансы Google Analytics по умолчанию прекращаются через 30 минут, вам может понадобиться реализовать пользовательское событие, чтобы активность возобновлялась через какой-то другой промежуток времени.

Как правило, тип отслеживания «Время» в GTM используется в связке с триггером «Таймер», а для передачи данных в Google Analytics задаются параметры отслеживания пользовательского времени: переменная, категория, значение, ярлык.

Тип отслеживания – Внешний вид ссылки

Данный тип предназначен для отслеживания исходящих/внешних ссылок, то есть выходов (ухода) пользователей с сайта или загрузку файлов на странице (брошюр, прайс-листов, купонов и т.д.).

В качестве дополнительной настройки доступен параметр внешнего вида ссылки # (решетки) в качестве разделителя.

Параметры внешнего вида ссылки

Тип отслеживания – Изменить внешний вид формы

Этот тип отслеживания позволяет добавить информацию отслеживания к действию с формой. Например, чтобы отслеживать формы по доменам, информация об отслеживании должна быть добавлена к URL-адресу назначения формы при отправке формы. URL-адрес назначения формы — это URL-адрес в атрибуте действия формы:

Для чего используется атрибут ‘lang’ тега ?

В HTML хорошо иметь атрибут lang в , например .

Чем это полезно?

Если это используется для перевода, даже если язык установлен на английский и в документе есть весь текст на китайском языке, Google Translate распознает его как китайский, а не английский (это означает, что Google игнорирует атрибут lang ).

Я цитирую это из W3C:

Всегда используйте языковой атрибут в теге html чтобы объявить язык текста по умолчанию на странице. Если страница содержит контент на другом языке, добавьте атрибут языка к элементу, окружающему этот контент.

Используйте атрибут lang для страниц, служащих HTML, и атрибут xml:lang для страниц, служащих XML. Для документов полиглота XHTML 1.x и HTML5 используйте оба вместе.

Вы спросили «как это полезно».

«Атрибут может быть использован для объявления языка веб-страницы или части веб-страницы. Это предназначено для помощи поисковым роботам, форматированию страниц и технологии чтения с экрана»

Никакого упоминания о переводе — но часто паук поисковой системы не захочет анализировать документ «на неправильном языке» — его индексный файл будет расти (много новых слов), и результаты не будут полезны для пользователя (который не может читать язык, и кто использует неправильные условия поиска).

Появление технологии интеллектуального перевода (например, Google, о которой упоминалось выше) означает, что некоторые поисковые системы могут видеть страницу на одном языке, переводить ее и выяснять, что кто-то, ищущий «корову», может заинтересоваться этой страницей, которая упоминает «vache «и имеет .

Правильно ли вы настроили мультиязычность? Нюансы применения Hreflang

Зачем настраивать мультиязычность и мультирегиональность на сайте

  • Ускорить индексацию. Мультиязычные сайты зачастую имеют сложную разветвленную структуру, и поисковым системам не так-то и просто правильно проиндексировать и тем более показать именно тот контент, который нужен пользователю. Поэтому настройка мультиязычности позволяет поисковикам правильно понять структуру сайта и быстро индексировать его контент.
  • Устранить дубли. Кроме того, настройка мультиязычности с помощью тегов и атрибутов, позволяет указывать поисковикам, что другая языковая версия документа не является дублем данной страницы, а ее альтернатива на другом языке, предназначенная для другого региона.
  • Cнизить показатель отказов. Пользователи не будут сразу же уходить, увидев контент на не понятном для них языке.
  • Увеличить количество конверсий. Целевая аудитория будет приходить на нужную для неё языковую версию страницы.

Как понять на какие регионы и языки ориентировать свой сайт?

С помощью Google Analytics можно увидеть, пользователи каких стран составляют основную часть органического трафика сайта. Все, что для этого нужно, это перейти в раздел Аудитория — >> — Демографические данные — >> — Местоположение (если анализируем регион)

или раздел Аудитория — >> — Демографические данные — >> — Язык — и проанализировать отчёт по сегменту органического поиска. Там же анализируем ключевые слова и целевые страницы, которые привели пользователей из других стран или говорящих на другом языке. Так вы сможете понять, в каких странах и на каких языках живет и говорит ваша целевая аудитория, и сможете соответствующим образом оптимизировать сайт.

С помощью чего настроить правильное отображение в поиске мультиязычного сайта?

• Атрибут hreflang

• Расширение x-default

Всеми ли поисковиками понимается атрибут hreflang?

В каких случаях применяется атрибут hreflang?

Какие варианты использования hreflang?

Используем Sitemap для указания языковых версий

В файле Sitemap.xml прописывается атрибут xhtml:link как аннотация к URL. Это довольно трудоемкий способ. В результате, у каждого URL должен быть атрибут hreflang на ту же и обратные ссылки, ведущие на URL других языковых версий документа. Плюсы этого способа в том, что атрибуты находятся не в теле страницы, а в карте сайта, что облегчает код.

Пример для страницы на русском языке c альтернативной версией на немецком для всего мира.
и наоборот.

Используем заголовок Link в HTTP (HTTPS) — ответе страницы

Используем атрибут hreflang в head документа совместно с cannonical

Последний способ – это элементы link для документов HTML. Пример для страницы, предназначенной для англоговорящих пользователей, живущих в США:
(«en-us» — это значит, что код языка «en» (английский), а код региона «us» – контент предназначен для США)

При этом на странице каждого из языков обязательно нужно прописать ссылку с атрибутом rel=»canonical» на эту же страницу. При этом не рекомендуется прописывать атрибут rel=»canonical» для разных языковых или региональных версий. Лучше использовать его в пределах одной версии языка/страны.

Руководство по hreflang

Атрибут hreflang — это техническое решение для веб-сайтов, у которых есть одинаковый контент на нескольких языках. И в интересах этих сайтов, чтобы поисковые системы выдавали соответствующие версии в результатах запросов. Ситуация для примера. Пользователь — житель Германии, страница сайта в поисковой выдаче на английском, но также имеется немецкая версия. Нужно сделать так, чтобы этому конкретному пользователю Google показывал страницу на немецком. Для этого и был разработан атрибут hreflang.

Атрибут hreflang — один из наиболее сложных аспектов, с которыми приходится иметь дело во время работы с поисковой системой. Сделать все правильно довольно сложно и для этого необходимо время. Данное руководство позволит избежать распространенных ошибок.

Предназначение атрибутов hreflang

Атрибуты hreflang — это способ маркировки страниц с одинаковым содержанием, но на разных языках и для разных регионов. hreflang применяется в трех случаях:

  • Региональные версии контента (en-us и en-gb).
  • Контент на разных языках, английский, немецкий или французский.
  • Комбинация разных языков и региональных отличий.

Атрибуты hreflang для нескольких региональных рынков (использующих один и тот же язык), где коммуникации осуществляются на одном и том же языке. Это одна из самых распространенных ситуаций. С помощью hreflang вы можете указать, что одна страница предназначена для жителей США, а другая — для жителей британских островов, или же сделать две разные страницы для пользователей из Германии и Австрии.

Преимущества hreflang для SEO

Зачем мы вообще говорим о hreflang? Чем этот атрибут может помочь в плане поискового продвижения? Есть две главные причины. Допустим, у вас имеется версия страницы для определенного языка и региона, и вы хотите, чтобы она появлялась в результатах поиска. Наличие подходящего языка и информации, связанной с определенным регионом, в целом улучшает UX. Таким образом, меньший процент пользователей будет возвращаться обратно к поисковой выдаче. А отсюда и более высокие позиции в Google.

Еще одна причина — hreflang решает проблему дублирующегося контента. Одинаковый контент на английском может присутствовать на разных URL — для Великобритании, США и Австралии. Фактическая разница на этих страницах минимальная. Однако без подсказки поисковая система не поймет, что вы пытаетесь делать, и страницы будут рассматриваться как дубликаты. Атрибут hreflang информирует Google о том, что это (практически) тот же контент, только оптимизированный для разных людей.

Что такое hreflang?

hreflang — код, который показывается поисковой системе тремя разными способами (более подробно об этом дальше). С помощью данного кода вы отмечаете все разные URL вашего сайта, у которых есть аналогичный контент. У этих ссылок может быть тот же контент на разных языках, или на одном языке, но предназначенный для разных регионов.

Чего можно достичь с помощью hreflang?

hreflang поддерживается Google и Yandex. У Bing нет эквивалента, но этот поисковик поддерживает метатеги.

Текущее местонахождение пользователя и настройки его языка определяют наиболее подходящий URL. У пользователя может быть несколько языков в настройках браузера. Порядок, в котором эти языки появляются в настройках, определяет наиболее подходящий язык.

Стоит ли использовать hreflang?

Совет: главная страница должна быть в приоритете.

Если возникают сомнения относительно hreflang, начните с главной. Люди, которые ищут ваш бренд, получат нужную страницу. Сделать это несложно.

Исходя из того, что было установлено, чем является hreflang и как это работает, мы уже можем определить, стоит ли использовать этот атрибут. Делать это нужно в двух случаях:

  • У вас есть одинаковый контент на разных языках
  • У вас есть контент, ориентированный на разные географические регионы, но при этом язык одинаковый.

Не имеет значения, размещен ли контент на одном домене или нескольких. Вы можете объединить несколько версий в одном домене, или сделать ссылки между доменами.

Выбор архитектурной реализации

Допустим, есть три типа страниц:

  • На немецком
  • На немецком, для Австрии
  • На немецком, для Швейцарии

Для их реализации можно выбрать три варианта hreflang:

  • de-de для немецкоговорящей аудитории Германии
  • de-at для немецкоговорящей аудитории Австрии
  • de-ch для немецкоговорящей аудитории Швейцарии

Но какой из трех этих вариантов Google должен показывать пользователям, которые вписывают поисковые запросы на немецком в Бельгии? Первая страница, вероятнее всего, окажется наиболее уместной. Чтобы удостовериться в том, что каждый пользователь, который что-либо ищет на немецком и при этом не относится к категории de-at или de-ch, увидит нужную ему страницу — измените атрибут hreflang на de.

В большинстве случаев будет достаточно только лишь указать язык.

Стоит помнить, что при создании подобного набора ссылок, выигрышной чаще всего оказывается наиболее специфичная. Порядок сканирования ссылок поисковой системой значения не имеет.

Основы технической реализации

Вне зависимости от избранного типа реализации, существуют три базовых правила.

1) Валидация атрибутов hreflang

Атрибут hreflang должен содержать информацию о языка, опционально дополненную информацией о регионе. Атрибут языка должен соответствовать формату ISO 639-1 (двухбуквенный код).

Неправильные региональные коды. Google может справиться с некоторыми распространенными ошибками в региональных кодах. К примеру, en-uk и en-gb. Однако en-eu не сработает, т.к. eu не определяет страну.

Указание региона является опциональным, и должно быть в формате ISO 3166-1 Alpha 2. Более того, это должен быть официально существующий элемент. Здесь часто допускаются ошибки: неверный код региона — весьма распространенная проблема. Используйте связанные списки в Википедии, для проверки избранных регионов и языковых кодов.

2) Обратные ссылки

Второе базовое правило касается обратных ссылок. Независимо от избранной реализации, каждому URL необходимы обратные ссылки на любой другой URL (ссылки должны вести на канонические версии). Чем больше у вас языков, тем больше вы можете склоняться к тому, чтобы ограничить эти обратные ссылки: но этого делать не стоит, т.к. в противном случае атрибуты могут быть определены неверно. Если у вас 80 языков, тогда у будет и 80 hreflang ссылок для 80 URL.

3) Ссылка hreflang на саму себя

Третье и последнее основное правило. Поначалу создание ссылки hreflang на текущую страницу может показаться довольно сложным, как, впрочем, и обратной ссылки. Но, как бы то ни было, это непременное условие.

Техническая реализация

Есть три способа: элемент link в заголовке страницы, HTTP-заголовки, файл Sitemap.

1) Элементы link в заголовке страницы

Для этого в раздел каждой страницы добавляется подобный код:

Поскольку каждая версия должна быть связана со всеми другими версиями, такие реализации в программном коде могут быть достаточно объемными и привести к сложностям по части производительности.

Если у вас 20 языков, выбор элементов link в HTML приведет к добавлению 20 элементов link на каждую страницу, как показано выше. А это дополнительные 1.5KB к загрузке страницы, которые ни один пользователь никогда использовать не будет, но ему придется ждать загрузки этих данных. В довершение этого, ваша CMS должна будет совершить несколько обращений к базе данных, для генерации всех этих ссылок. Такой подход предназначен исключительно для поисковых систем и не рекомендуется для крупных сайтов.

Топ-пост этого месяца:  Как откатить Wordpress до предыдущей версии Инструкция

2) HTTP-заголовки

Второй способ реализации hreflang — посредством HTTP-заголовков. HTTP-заголовки — это решение для всех ваших PDF и остального контента (за исключением HTML), который необходимо оптимизировать. Элементы link функционируют хорошо для документов HTML, но не для другого типа контента. HTTP-заголовки выглядят примерно так:

Проблема большого количества HTTP-заголовков — та же, что и проблема элементов link в : увеличение веса при каждом запросе.

3) Файл Sitemap

Используется атрибут xhtml:link в XML-файлах Sitemap, чтобы добавить аннотацию каждому URL. Все работает так, как и в случае с элементами link в заголовке страницы. Файл Sitemap — это еще более усложненный вариант. Такая разметка применяется лишь для одного URL с двумя другими языками:

Как можно видеть, присутствует URL, ссылающийся сам на себя в качестве третьего URL и указывающий на то, что специфический URL предназначен для en-gb; указываются два других языка. Теперь оба других URL также должны присутствовать в файле Sitemap:

Как можно видеть, по сути, меняются лишь URL в элементе , поскольку все должно быть одинаковым. Таким образом, у каждого URL есть атрибут hreflang, ведущий на ту же ссылку, и обратные ссылки на соответствующие URL.

Преимущество XML sitemap в том, что нет необходимости увеличивать вес страницы и не требуется слишком много обращений к базе данных.

Еще одно преимущество: изменить XML sitemap обычно намного проще, чем менять все страницы на сайте. Отсутствует затяжной процесс подтверждения, к тому же вы получаете непосредственный доступ к файлу XML sitemap.

Другие технические стороны реализации hreflang

Есть ряд других технических спецификаций.

hreflang x-default

Это специальное значение атрибута hreflang под названием x-default, которое определяет, куда пользователям необходимо пойти, в случае если ни один из языков, которые вы указали в ваших других ссылках hreflang, не соответствует настройкам их браузера. В элементе link это выглядит следующим образом:

Впервые такая возможность была представлена «для международных посадочных страниц», т.е. страниц, на которые вы перенаправляете пользователей в зависимости от их местонахождения. Вместе с тем, это служит универсальным средством. Если местонахождение и язык пользователей не соответствуют установленным, их перенаправляют сюда.

На примере с Германией, описанном выше, у пользователя, ищущего что-то на английском, не будет подходящего URL. В таких случаях и применяется x-default. Добавляется четвертая ссылка и получается:

В данном случае ссылка x-default будет указывать на тот же URL, что и de. Лучше не удалять ссылку de, даже если технически результат будет аналогичным. В долгосрочной перспективе целесообразнее иметь несколько вариантов, т.к. это указывает, на каком языке страница de, а также делает код более читабельным.

Комбинация hreflang и rel=canonical

Атрибуты rel=»alternate» hreflang=»x» и rel=»canonical» могут и должны использоваться в комбинации. У каждого языка должна быть ссылка rel=»canonical», указывающая на этот же URL. В случае с главной страницей сайта example.com, это будет выглядеть так:

На странице en-gb, помимо канонического URL, мало что изменится:

Не делайте ошибку, устанавливая канонический URL для страницы en-gb как http://example.com/, поскольку это все испортит. Очень важно, чтобы ссылки hreflang указывали на каноническую версию каждого URL. Эти системы должны функционировать в тандеме.

Полезные инструменты для hreflang

  • генератор hreflang тегов

hreflang tag generator позволяет генерировать элементы link. Даже когда фактическая работа не проводится, этот инструмент дает возможность создать код для примера.

  • hreflang XML sitemap generator

Для каждого языка необходима отдельная колонка. Если хотите добавить URL x-defaul — создайте колонку под названием x-default.

Добавив разметку на страницу, вам понадобится ее подтвердить. Если вы решите выбрать вариант с элементом link в заголовке страницы, тогда можете в качестве валидатора использовать один из лучших подобных инструментов — flang, разработанный DejanSEO.

  • К сожалению, валидаторов для XML sitemap пока нет.

Обеспечение функциональности hreflang

Важно чтобы люди из вашей компании, которые работают с контентом на сайте, знали о hreflang. Не стоит упускать и виду то обстоятельство, что настройка hreflang представляется довольно трудоемким процессом, и что существует множество нюансов, которые нужно учитывать.

АйТи бубен

Инструменты пользователя

Инструменты сайта


Содержание

Атрибут hreflang

Для правильного позиционирование ресурса в поиске, чтобы для определенного региона выдавалась его языковая версия сайта и ранжировалась в поисковых системах (ПС) именно она, нужно правильно настроить атрибут hreflang.

Валидатор, генератор hreflang

С указанием региона

Без указания региона

Распространенные проблемы при использовании атрибута hreflang

Цитата: Дублирующееся содержание и многоязыковые сайты

Атрибуты Attributes

Большая часть языка C# позволяет программисту указывать декларативные сведения о сущностях, определенных в программе. Much of the C# language enables the programmer to specify declarative information about the entities defined in the program. Например, доступность метода в классе определяется дополнив его с method_modifiers public , protected , internal , и private . For example, the accessibility of a method in a class is specified by decorating it with the method_modifiers public , protected , internal , and private .

C# позволяет программистам создавать новые типы декларативных сведений, называемых атрибуты. C# enables programmers to invent new kinds of declarative information, called attributes. Программисты могут присоединения атрибутов для различных сущностей программы и получить сведения об атрибутах в среде выполнения. Programmers can then attach attributes to various program entities, and retrieve attribute information in a run-time environment. Например, структура может определить HelpAttribute атрибут, который можно поместить на определенные элементы программы (например, классы и методы) для предоставления сопоставление этих элементов программы на документацию. For instance, a framework might define a HelpAttribute attribute that can be placed on certain program elements (such as classes and methods) to provide a mapping from those program elements to their documentation.

Атрибуты определяются путем объявления классов атрибутов (классы атрибутов), которые могут иметь позиционные и именованные параметры (Positional и именованные параметры). Attributes are defined through the declaration of attribute classes (Attribute classes), which may have positional and named parameters (Positional and named parameters). Атрибуты присоединяются к сущности в программе C# с помощью спецификаций атрибутов (спецификация атрибута) и могут быть получены во время выполнения как экземпляры атрибута (экземпляры атрибута). Attributes are attached to entities in a C# program using attribute specifications (Attribute specification), and can be retrieved at run-time as attribute instances (Attribute instances).

Классы атрибутов Attribute classes

Класс, производный от абстрактного класса System.Attribute , прямо или косвенно, является класс атрибута. A class that derives from the abstract class System.Attribute , whether directly or indirectly, is an attribute class. Объявление класса атрибута определяет новый вид атрибут , можно поместить в объявлении. The declaration of an attribute class defines a new kind of attribute that can be placed on a declaration. По соглашению классы атрибутов именуются с суффиксом Attribute . By convention, attribute classes are named with a suffix of Attribute . Использовании атрибута может включить или пропустить этот суффикс. Uses of an attribute may either include or omit this suffix.

Использование атрибута Attribute usage

Атрибут AttributeUsage (атрибут AttributeUsage) используется для описания того, как можно использовать класс атрибута. The attribute AttributeUsage (The AttributeUsage attribute) is used to describe how an attribute class can be used.

AttributeUsage имеет позиционный параметр (Positional и именованные параметры), позволяющий класс атрибута указывать типы объявлений, на которых он может использоваться. AttributeUsage has a positional parameter (Positional and named parameters) that enables an attribute class to specify the kinds of declarations on which it can be used. Пример The example

Определяет класс атрибута с именем SimpleAttribute , можно поместить в class_declarations и interface_declarationтолько s. defines an attribute class named SimpleAttribute that can be placed on class_declarations and interface_declarations only. Пример The example

показаны несколько способов применения Simple атрибута. shows several uses of the Simple attribute. Несмотря на то, что этот атрибут определен с именем SimpleAttribute , если этот атрибут используется, Attribute суффикс можно опускать, приводит к короткое имя Simple . Although this attribute is defined with the name SimpleAttribute , when this attribute is used, the Attribute suffix may be omitted, resulting in the short name Simple . Таким образом приведенный выше пример взят семантически эквивалентно следующему: Thus, the example above is semantically equivalent to the following:

AttributeUsage имеет именованный параметр (Positional и именованные параметры) вызывается AllowMultiple , которое указывает, является ли атрибут может быть указан более одного раза для данной сущности. AttributeUsage has a named parameter (Positional and named parameters) called AllowMultiple , which indicates whether the attribute can be specified more than once for a given entity. Если AllowMultiple для атрибута класса имеет значение true, то классу этого атрибута является класс атрибута многократного использованияи может быть указан более одного раза в сущности. If AllowMultiple for an attribute class is true, then that attribute class is a multi-use attribute class, and can be specified more than once on an entity. Если AllowMultiple для атрибута класса имеет значение false или не указано, то классу этого атрибута является однократного использования класса атрибутаего можно указать не более одного раза в сущности. If AllowMultiple for an attribute class is false or it is unspecified, then that attribute class is a single-use attribute class, and can be specified at most once on an entity.

Пример The example

Определяет класс атрибута многократного использования, с именем AuthorAttribute . defines a multi-use attribute class named AuthorAttribute . Пример The example

показано объявление класса с два способа использования Author атрибута. shows a class declaration with two uses of the Author attribute.

AttributeUsage имеет другой именованный параметр с именем Inherited , который указывает, наследуется ли также атрибут, заданный в базовом классе, классами, производными от этого базового класса. AttributeUsage has another named parameter called Inherited , which indicates whether the attribute, when specified on a base class, is also inherited by classes that derive from that base class. Если Inherited для атрибута класса имеет значение true, то этот атрибут является унаследованным. If Inherited for an attribute class is true, then that attribute is inherited. Если Inherited для атрибута класса имеет значение false, то этот атрибут не наследуется. If Inherited for an attribute class is false then that attribute is not inherited. Если не указано, значение по умолчанию — true. If it is unspecified, its default value is true.

Класс атрибута X отсутствие AttributeUsage атрибут, присоединенный к нему, как показано на An attribute class X not having an AttributeUsage attribute attached to it, as in

Эквивалентно следующему: is equivalent to the following:

Позиционные и именованные параметры Positional and named parameters

Классы атрибутов могут иметь позиционные параметры и именованные параметры. Attribute classes can have positional parameters and named parameters. Каждый конструктор открытого экземпляра для класса атрибута определяет допустимую последовательность позиционных параметров для этого класса атрибута. Each public instance constructor for an attribute class defines a valid sequence of positional parameters for that attribute class. Каждого нестатических открытое поле для чтения и записи и свойства для класса атрибута определяет именованный параметр для класса атрибута. Each non-static public read-write field and property for an attribute class defines a named parameter for the attribute class.

Пример The example

Определяет класс атрибута с именем HelpAttribute с одним позиционным параметром, url и один именованный параметр Topic . defines an attribute class named HelpAttribute that has one positional parameter, url , and one named parameter, Topic . Несмотря на то, что он является статическим и открытым, свойство Url не определяет именованный параметр, так как он не чтения и записи. Although it is non-static and public, the property Url does not define a named parameter, since it is not read-write.

Этот класс атрибута можно использовать следующим образом: This attribute class might be used as follows:

Типы параметров атрибутов Attribute parameter types

Типы позиционных и именованных параметров для класса атрибута ограничены типы параметров атрибутов, которые являются: The types of positional and named parameters for an attribute class are limited to the attribute parameter types, which are:

  • Один из следующих типов: bool , byte , char , double , float , int , long , sbyte , short , string , uint , ulong , ushort . One of the following types: bool , byte , char , double , float , int , long , sbyte , short , string , uint , ulong , ushort .
  • Тип object . The type object .
  • Тип System.Type . The type System.Type .
  • Перечисляемый тип, если он имеет общую доступность и типы, в которых он является вложенным (если таковые имеются) также иметь доступность уровня public (спецификация атрибута). An enum type, provided it has public accessibility and the types in which it is nested (if any) also have public accessibility (Attribute specification).
  • Одномерные массивы указанных выше типов. Single-dimensional arrays of the above types.
  • Аргумент конструктора или общее поле, которые не имеет ни одного из этих типов, не может использоваться как позиционные или именованные параметра в спецификации атрибута. A constructor argument or public field which does not have one of these types, cannot be used as a positional or named parameter in an attribute specification.

Спецификация атрибута Attribute specification

Спецификация атрибута — это применение предварительно определенного атрибута к объявлению. Attribute specification is the application of a previously defined attribute to a declaration. Атрибут — это часть дополнительные описательные данные, указанный для объявления. An attribute is a piece of additional declarative information that is specified for a declaration. Атрибуты могут быть заданы в глобальной области видимости (для указания атрибутов на сборки или модуля, содержащего) и для type_declarations (объявления типов), class_member_declaration s (ограничения параметров типа), interface_member_declarations (члены интерфейса), struct_member _declarations (члены структуры), enum_member_declarations (члены перечисления), accessor_declarations (Методы доступа), event_accessor_declarations (подобные полям события), и formal_parameter_lists (параметры метода). Attributes can be specified at global scope (to specify attributes on the containing assembly or module) and for type_declarations (Type declarations), class_member_declarations (Type parameter constraints), interface_member_declarations (Interface members), struct_member_declarations (Struct members), enum_member_declarations (Enum members), accessor_declarations (Accessors), event_accessor_declarations (Field-like events), and formal_parameter_lists (Method parameters).

Атрибуты указаны в атрибут разделах. Attributes are specified in attribute sections. Раздел «атрибут» состоит из пары квадратных скобок, которые окружают разделенный запятыми список из одного или нескольких атрибутов. An attribute section consists of a pair of square brackets, which surround a comma-separated list of one or more attributes. Порядок, в котором указаны атрибуты в таком списке и расположены порядок, в котором разделы, подключенные к одной и той же сущности программы, не имеет значения. The order in which attributes are specified in such a list, and the order in which sections attached to the same program entity are arranged, is not significant. Например, спецификаций атрибутов [A][B] , [B][A] , [A,B] , и [B,A] эквивалентны. For instance, the attribute specifications [A][B] , [B][A] , [A,B] , and [B,A] are equivalent.

Атрибут состоит из attribute_name и необязательный список позиционных и именованных аргументов. An attribute consists of an attribute_name and an optional list of positional and named arguments. Позиционные аргументы (если таковые имеются) предшествовать именованные аргументы. The positional arguments (if any) precede the named arguments. Позиционный аргумент состоит из attribute_argument_expression; именованный аргумент состоит из имени, а после знака равенства, за которым следует attribute_argument_expression, который, вместе , ограничены по тем же правилам, как простое присваивание. A positional argument consists of an attribute_argument_expression; a named argument consists of a name, followed by an equal sign, followed by an attribute_argument_expression, which, together, are constrained by the same rules as simple assignment. Порядок именованных аргументов не имеет значения. The order of named arguments is not significant.

Attribute_name идентифицирует класс атрибута. The attribute_name identifies an attribute class. Если виде attribute_nametype_name затем это имя должно ссылаться на класс атрибута. If the form of attribute_name is type_name then this name must refer to an attribute class. В противном случае возникает ошибка времени компиляции. Otherwise, a compile-time error occurs. Пример The example

приводит к ошибке времени компиляции, так как он пытается использовать Class1 как атрибут класса, если Class1 не является классом атрибута. results in a compile-time error because it attempts to use Class1 as an attribute class when Class1 is not an attribute class.

Определенные контексты разрешают спецификацию атрибута на нескольких целевых объектов. Certain contexts permit the specification of an attribute on more than one target. Программы можно явно указать целевой объект, включив attribute_target_specifier. A program can explicitly specify the target by including an attribute_target_specifier. Когда атрибут помещается на глобальном уровне, global_attribute_target_specifier является обязательным. When an attribute is placed at the global level, a global_attribute_target_specifier is required. В других местах, применяется разумного значения по умолчанию, но attribute_target_specifier можно использовать для подтверждения или переопределить значение по умолчанию в определенных случаях неоднозначности (или просто для подтверждения по умолчанию в случаях неоднозначные). In all other locations, a reasonable default is applied, but an attribute_target_specifier can be used to affirm or override the default in certain ambiguous cases (or to just affirm the default in non-ambiguous cases). Таким образом, как правило, attribute_target_specifiers может опускаться только на глобальном уровне. Thus, typically, attribute_target_specifiers can be omitted except at the global level. Потенциально неоднозначной контексты разрешаются следующим образом: The potentially ambiguous contexts are resolved as follows:

  • Атрибут, заданный в глобальной области можно применить к целевой сборке или целевому модулю. An attribute specified at global scope can apply either to the target assembly or the target module. По умолчанию существует для данного контекста, поэтому attribute_target_specifier всегда необходим в данном контексте. No default exists for this context, so an attribute_target_specifier is always required in this context. Наличие assembly attribute_target_specifier указывает, что атрибут применяется к целевому объекту сборки; наличие module attribute_target_specifier Указывает, что атрибут применяется к целевому модулю. The presence of the assembly attribute_target_specifier indicates that the attribute applies to the target assembly; the presence of the module attribute_target_specifier indicates that the attribute applies to the target module.
  • Атрибут, заданный в объявлении делегата можно применять к делегату объявляемого или возвращаемому значению. An attribute specified on a delegate declaration can apply either to the delegate being declared or to its return value. В случае отсутствия attribute_target_specifier, атрибут применяется к делегату. In the absence of an attribute_target_specifier, the attribute applies to the delegate. Наличие type attribute_target_specifier указывает, что атрибут применяется к делегату; наличие return attribute_target_specifier Указывает, что атрибут применяется к возвращаемому значению. The presence of the type attribute_target_specifier indicates that the attribute applies to the delegate; the presence of the return attribute_target_specifier indicates that the attribute applies to the return value.
  • Атрибут, заданный в объявлении метода можно применить для объявляемого метода или возвращаемому значению. An attribute specified on a method declaration can apply either to the method being declared or to its return value. В случае отсутствия attribute_target_specifier, атрибут применяется к методу. In the absence of an attribute_target_specifier, the attribute applies to the method. Наличие method attribute_target_specifier указывает, что атрибут применяется к методу; наличие return attribute_target_specifier указывает что атрибут применяется к возвращаемому значению. The presence of the method attribute_target_specifier indicates that the attribute applies to the method; the presence of the return attribute_target_specifier indicates that the attribute applies to the return value.
  • Атрибут, заданный в объявлении оператора можно применить к оператору или возвращаемому значению. An attribute specified on an operator declaration can apply either to the operator being declared or to its return value. В случае отсутствия attribute_target_specifier, атрибут применяется к оператору. In the absence of an attribute_target_specifier, the attribute applies to the operator. Наличие method attribute_target_specifier указывает, что атрибут применяется к методу; наличие return attribute_target_specifier Указывает, что атрибут применяется к возвращаемому значению. The presence of the method attribute_target_specifier indicates that the attribute applies to the operator; the presence of the return attribute_target_specifier indicates that the attribute applies to the return value.
  • Атрибут, заданный в объявлении события, который опускает доступа к событиям можно применять к событию, связанному полю (если событие не является абстрактным) или связанные добавить и удалить методы. An attribute specified on an event declaration that omits event accessors can apply to the event being declared, to the associated field (if the event is not abstract), or to the associated add and remove methods. В случае отсутствия attribute_target_specifier, атрибут применяется к событию. In the absence of an attribute_target_specifier, the attribute applies to the event. Наличие event attribute_target_specifier указывает, что атрибут применяется к событию; наличие field attribute_target_specifier указывает что атрибут применяется к полю; и наличие method attribute_target_specifier указывает, что атрибут применяется к методам. The presence of the event attribute_target_specifier indicates that the attribute applies to the event; the presence of the field attribute_target_specifier indicates that the attribute applies to the field; and the presence of the method attribute_target_specifier indicates that the attribute applies to the methods.
  • Атрибут, заданный в объявлении метода доступа get для объявления свойства или индексатора можно применить для связанного метода или возвращаемому значению. An attribute specified on a get accessor declaration for a property or indexer declaration can apply either to the associated method or to its return value. В случае отсутствия attribute_target_specifier, атрибут применяется к методу. In the absence of an attribute_target_specifier, the attribute applies to the method. Наличие method attribute_target_specifier указывает, что атрибут применяется к методу; наличие return attribute_target_specifier указывает что атрибут применяется к возвращаемому значению. The presence of the method attribute_target_specifier indicates that the attribute applies to the method; the presence of the return attribute_target_specifier indicates that the attribute applies to the return value.
  • Атрибут, заданный в метод доступа set для объявления свойства или индексатора можно применить к связанному методу или к его одиночному неявное параметру. An attribute specified on a set accessor for a property or indexer declaration can apply either to the associated method or to its lone implicit parameter. В случае отсутствия attribute_target_specifier, атрибут применяется к методу. In the absence of an attribute_target_specifier, the attribute applies to the method. Наличие method attribute_target_specifier указывает, что атрибут применяется к методу; наличие param attribute_target_specifier указывает что атрибут применяется к параметру; наличие return attribute_target_specifier указывает, что атрибут применяется к возвращаемому значению. The presence of the method attribute_target_specifier indicates that the attribute applies to the method; the presence of the param attribute_target_specifier indicates that the attribute applies to the parameter; the presence of the return attribute_target_specifier indicates that the attribute applies to the return value.
  • Атрибут, заданный в объявлении метода доступа add или remove, для объявления события можно применить к связанному методу или к его одиночному параметру. An attribute specified on an add or remove accessor declaration for an event declaration can apply either to the associated method or to its lone parameter. В случае отсутствия attribute_target_specifier, атрибут применяется к методу. In the absence of an attribute_target_specifier, the attribute applies to the method. Наличие method attribute_target_specifier указывает, что атрибут применяется к методу; наличие param attribute_target_specifier указывает что атрибут применяется к параметру; наличие return attribute_target_specifier указывает, что атрибут применяется к возвращаемому значению. The presence of the method attribute_target_specifier indicates that the attribute applies to the method; the presence of the param attribute_target_specifier indicates that the attribute applies to the parameter; the presence of the return attribute_target_specifier indicates that the attribute applies to the return value.

В других контекстах, включение attribute_target_specifier разрешено, но ненужные. In other contexts, inclusion of an attribute_target_specifier is permitted but unnecessary. Например, объявление класса включается или опустить описатель type : For instance, a class declaration may either include or omit the specifier type :

Это ошибка для указано недопустимое attribute_target_specifier. It is an error to specify an invalid attribute_target_specifier. Например, описатель param не может использоваться в объявлении класса: For instance, the specifier param cannot be used on a class declaration:

По соглашению классы атрибутов именуются с суффиксом Attribute . By convention, attribute classes are named with a suffix of Attribute . Attribute_name формы type_name может включить или пропустить этот суффикс. An attribute_name of the form type_name may either include or omit this suffix. Если класс атрибута находится в том случае, как с и без этого суффикса, присутствует неоднозначность и приводит к ошибке времени компиляции. If an attribute class is found both with and without this suffix, an ambiguity is present, and a compile-time error results. Если attribute_name написано таким образом, чтобы его крайнее правое идентификатор является буквальным идентификатором (идентификаторы), а затем сопоставляется только атрибут без суффикса, Таким образом, включение таких разрешить неоднозначность. If the attribute_name is spelled such that its right-most identifier is a verbatim identifier (Identifiers), then only an attribute without a suffix is matched, thus enabling such an ambiguity to be resolved. Пример The example

Показывает, два атрибута с именем классы X и XAttribute . shows two attribute classes named X and XAttribute . Атрибут [X] является неоднозначным, так как она может ссылаться на либо X или XAttribute . The attribute [X] is ambiguous, since it could refer to either X or XAttribute . С помощью буквальным идентификатором точного указания в таких редких случаях намерения. Using a verbatim identifier allows the exact intent to be specified in such rare cases. Атрибут [XAttribute] не является неоднозначным (несмотря на то, что было бы Если класс атрибута с именем XAttributeAttribute !). The attribute [XAttribute] is not ambiguous (although it would be if there was an attribute class named XAttributeAttribute !). Если объявление класса X удаляется, а затем оба атрибута ссылаются на класс атрибута с именем XAttribute , как показано ниже: If the declaration for class X is removed, then both attributes refer to the attribute class named XAttribute , as follows:

Это ошибка времени компиляции для использования класса атрибутом однократного использования более одного раза на той же сущности. It is a compile-time error to use a single-use attribute class more than once on the same entity. Пример The example

приводит к ошибке времени компиляции, так как он пытается использовать HelpString , — это класс атрибутом однократного использования, более одного раза в объявлении Class1 . results in a compile-time error because it attempts to use HelpString , which is a single-use attribute class, more than once on the declaration of Class1 .

Топ-пост этого месяца:  Facebook позволил добавлять мероприятия в Stories

Выражение E — attribute_argument_expression если выполняются все следующие инструкции: An expression E is an attribute_argument_expression if all of the following statements are true:

  • Тип E является типом параметра атрибута (типы параметров атрибутов). The type of E is an attribute parameter type (Attribute parameter types).
  • Во время компиляции, значение E можно разрешить в одно из следующих: At compile-time, the value of E can be resolved to one of the following:
    • Значение константы. A constant value.
    • Объект System.Type . A System.Type object.
    • Одномерный массив attribute_argument_expressions. A one-dimensional array of attribute_argument_expressions.

Пример: For example:

Объект typeof_expression (оператор typeof) используется как выражения аргумента атрибута можно ссылаться неуниверсального типа, закрытым сконструированным типом или несвязанного универсального типа, но не может ссылаться на открытый тип. A typeof_expression (The typeof operator) used as an attribute argument expression can reference a non-generic type, a closed constructed type, or an unbound generic type, but it cannot reference an open type. Это гарантирует, что выражение может разрешаться во время компиляции. This is to ensure that the expression can be resolved at compile-time.

Экземпляры атрибута Attribute instances

Экземпляра атрибута — это экземпляр, который представляет атрибут во время выполнения. An attribute instance is an instance that represents an attribute at run-time. Атрибут определяется с помощью класса атрибута, позиционных аргументов и именованные аргументы. An attribute is defined with an attribute class, positional arguments, and named arguments. Экземпляр атрибута — это экземпляр класса атрибута, который инициализируется с помощью позиционных и именованных аргументов. An attribute instance is an instance of the attribute class that is initialized with the positional and named arguments.

Извлечение экземпляра атрибута включает в себя во время компиляции и выполнения обработки, как описано в следующих разделах. Retrieval of an attribute instance involves both compile-time and run-time processing, as described in the following sections.

Компиляция атрибута Compilation of an attribute

Компиляция атрибут с классом атрибута T , positional_argument_list P и named_argument_list N , состоит из следующих действий: The compilation of an attribute with attribute class T , positional_argument_list P and named_argument_list N , consists of the following steps:

  • Выполните шаги обработки компиляции для компиляции object_creation_expression формы new T(P) . Follow the compile-time processing steps for compiling an object_creation_expression of the form new T(P) . Эти действия к ошибке времени компиляции или определить конструктор экземпляра C на T может вызываться во время выполнения. These steps either result in a compile-time error, or determine an instance constructor C on T that can be invoked at run-time.
  • Если C имеет открытый доступ, то возникает ошибка времени компиляции. If C does not have public accessibility, then a compile-time error occurs.
  • Для каждого именованный_аргумент Arg в N : For each named_argument Arg in N :
    • Позвольте Name быть идентификатор из именованный_аргумент Arg . Let Name be the identifier of the named_argument Arg .
    • Name необходимо определить нестатические чтения и записи открытое поле или свойство на T . Name must identify a non-static read-write public field or property on T . Если T имеет нет такого поля или свойства, то возникает ошибка времени компиляции. If T has no such field or property, then a compile-time error occurs.
  • Примите указанные ниже сведения для создания экземпляра атрибута во время выполнения: класс атрибута T , конструкторе экземпляра C на T , positional_argument_list P и named_argument_list N . Keep the following information for run-time instantiation of the attribute: the attribute class T , the instance constructor C on T , the positional_argument_list P and the named_argument_list N .

Во время выполнения извлечения экземпляра атрибута Run-time retrieval of an attribute instance

Подборка атрибут дает класс атрибута T , конструкторе экземпляра C на T , positional_argument_list P и named_argument_list N . Compilation of an attribute yields an attribute class T , an instance constructor C on T , a positional_argument_list P , and a named_argument_list N . Учитывая эти сведения, экземпляр атрибута можно получить во время выполнения, выполнив следующие действия: Given this information, an attribute instance can be retrieved at run-time using the following steps:

  • Выполните шаги обработки времени выполнения для выполнения object_creation_expression формы new T(P) , используя конструктор экземпляра C определяется во время компиляции. Follow the run-time processing steps for executing an object_creation_expression of the form new T(P) , using the instance constructor C as determined at compile-time. Следующие действия приводят к исключению, или создавать экземпляр O из T . These steps either result in an exception, or produce an instance O of T .
  • Для каждого именованный_аргумент Arg в N , в порядке: For each named_argument Arg in N , in order:
    • Позвольте Name быть идентификатор из именованный_аргумент Arg . Let Name be the identifier of the named_argument Arg . Если Name не определяет нестатических открытое поле для чтения и записи или свойства на O , то возникает исключение. If Name does not identify a non-static public read-write field or property on O , then an exception is thrown.
    • Позвольте Value быть результатом вычисления attribute_argument_expression из Arg . Let Value be the result of evaluating the attribute_argument_expression of Arg .
    • Если Name определяет поле на O , затем выберите значение Value . If Name identifies a field on O , then set this field to Value .
    • В противном случае Name определяет свойство на O . Otherwise, Name identifies a property on O . Присвойте этому свойству значение Value . Set this property to Value .
    • В результате O , экземпляр класса атрибута T , инициализирована с помощью positional_argument_list P и named_argument_list N . The result is O , an instance of the attribute class T that has been initialized with the positional_argument_list P and the named_argument_list N .

Зарезервированные атрибуты Reserved attributes

Небольшое количество атрибутов влияет на язык каким-либо образом. A small number of attributes affect the language in some way. Эти атрибуты включают: These attributes include:

  • System.AttributeUsageAttribute (Атрибут AttributeUsage), который используется для описания способов, в котором можно использовать класс атрибута. System.AttributeUsageAttribute (The AttributeUsage attribute), which is used to describe the ways in which an attribute class can be used.
  • System.Diagnostics.ConditionalAttribute (Атрибут Conditional), который используется для определения условные методы. System.Diagnostics.ConditionalAttribute (The Conditional attribute), which is used to define conditional methods.
  • System.ObsoleteAttribute (Атрибут Obsolete), который используется для пометки элемента как устаревший. System.ObsoleteAttribute (The Obsolete attribute), which is used to mark a member as obsolete.
  • System.Runtime.CompilerServices.CallerLineNumberAttribute , System.Runtime.CompilerServices.CallerFilePathAttribute и System.Runtime.CompilerServices.CallerMemberNameAttribute (информационные атрибуты вызывающего объекта), которые используются для предоставления сведений о контексте вызова к необязательным параметрам. System.Runtime.CompilerServices.CallerLineNumberAttribute , System.Runtime.CompilerServices.CallerFilePathAttribute and System.Runtime.CompilerServices.CallerMemberNameAttribute (Caller info attributes), which are used to supply information about the calling context to optional parameters.

Атрибут AttributeUsage The AttributeUsage attribute

Атрибут AttributeUsage используется для описания способа, в котором можно использовать класс атрибута. The attribute AttributeUsage is used to describe the manner in which the attribute class can be used.

Класс, отмеченный атрибутом AttributeUsage атрибут должен быть производным от System.Attribute , прямо или косвенно. A class that is decorated with the AttributeUsage attribute must derive from System.Attribute , either directly or indirectly. В противном случае возникает ошибка времени компиляции. Otherwise, a compile-time error occurs.

Атрибут Conditional The Conditional attribute

Атрибут Conditional позволяет определять условные методы и классы атрибут conditional. The attribute Conditional enables the definition of conditional methods and conditional attribute classes.

Условные методы. Conditional methods

Метод с атрибутом Conditional атрибут является условный метод. A method decorated with the Conditional attribute is a conditional method. Conditional Атрибут указывает условие, тестируя символ условной компиляции. The Conditional attribute indicates a condition by testing a conditional compilation symbol. Вызовы условного метода либо включены, либо пропущено в зависимости от того, определен ли этот символ в точке вызова. Calls to a conditional method are either included or omitted depending on whether this symbol is defined at the point of the call. Если этот символ определен, вызов включается; в противном случае вызов (включая оценки приемника и параметры вызова) опускается. If the symbol is defined, the call is included; otherwise, the call (including evaluation of the receiver and parameters of the call) is omitted.

Условный метод имеет следующие ограничения: A conditional method is subject to the following restrictions:

  • Условный метод должен быть методом в class_declaration или struct_declaration. The conditional method must be a method in a class_declaration or struct_declaration. Ошибка времени компиляции возникает, если Conditional атрибут указан для метода в объявлении интерфейса. A compile-time error occurs if the Conditional attribute is specified on a method in an interface declaration.
  • Условный метод должен иметь тип возвращаемого значения void . The conditional method must have a return type of void .
  • Условный метод не должен быть помечен с помощью override модификатор. The conditional method must not be marked with the override modifier. Условный метод помечен virtual модификатор, тем не менее. A conditional method may be marked with the virtual modifier, however. Переопределения такого метода неявно условного и не должен быть помечен явно с Conditional атрибута. Overrides of such a method are implicitly conditional, and must not be explicitly marked with a Conditional attribute.
  • Условный метод не должен быть реализацию метода интерфейса. The conditional method must not be an implementation of an interface method. В противном случае возникает ошибка времени компиляции. Otherwise, a compile-time error occurs.

Кроме того, возникает ошибка времени компиляции, если условный метод используется в delegate_creation_expression. In addition, a compile-time error occurs if a conditional method is used in a delegate_creation_expression. Пример The example

объявляет Class1.M как условный метод. declares Class1.M as a conditional method. Class2 в Test метод вызывает этот метод. Class2 ‘s Test method calls this method. Так как символ условной компиляции DEBUG определено, если Class2.Test является именем, он вызывает M . Since the conditional compilation symbol DEBUG is defined, if Class2.Test is called, it will call M . Если символ DEBUG бы не был определен, затем Class2.Test вызовет не Class1.M . If the symbol DEBUG had not been defined, then Class2.Test would not call Class1.M .

Важно отметить, что включение или исключение вызова условного метода управляется символами условной компиляции в точке вызова. It is important to note that the inclusion or exclusion of a call to a conditional method is controlled by the conditional compilation symbols at the point of the call. В примере In the example

Файл class1.cs : File class1.cs :

Файл class2.cs : File class2.cs :

Файл class3.cs : File class3.cs :

классы Class2 и Class3 каждая содержит вызовы условного метода Class1.F , который условного основан на ли DEBUG определен. the classes Class2 and Class3 each contain calls to the conditional method Class1.F , which is conditional based on whether or not DEBUG is defined. Так как этот символ определен в контексте Class2 , но не Class3 , вызов F в Class2 включено, а вызов F в Class3 опускается. Since this symbol is defined in the context of Class2 but not Class3 , the call to F in Class2 is included, while the call to F in Class3 is omitted.

Использование условного методов в цепочке наследования могут быть запутанными. The use of conditional methods in an inheritance chain can be confusing. Вызовы условного метода через base , формы base.M , подчиняются правилам обычный метод условного вызова. Calls made to a conditional method through base , of the form base.M , are subject to the normal conditional method call rules. В примере In the example

Файл class1.cs : File class1.cs :

Файл class2.cs : File class2.cs :

Файл class3.cs : File class3.cs :

Class2 включает вызов M определенные в базовом классе. Class2 includes a call to the M defined in its base class. Этот вызов опускается, так как базовый метод условного на основе наличия символа DEBUG , который не определен. This call is omitted because the base method is conditional based on the presence of the symbol DEBUG , which is undefined. Таким образом, метод выводит на консоль » Class2.M executed » только. Thus, the method writes to the console » Class2.M executed » only. Разумно использовать pp_declarations может устранить такие проблемы. Judicious use of pp_declarations can eliminate such problems.

Атрибут Conditional классы Conditional attribute classes

Класс атрибута (классы атрибутов) декорированные с одним или несколькими Conditional атрибутов класса атрибут conditional. An attribute class (Attribute classes) decorated with one or more Conditional attributes is a conditional attribute class. Класс атрибут conditional, таким образом, связанные с символы условной компиляции, объявленных в его Conditional атрибуты. A conditional attribute class is thus associated with the conditional compilation symbols declared in its Conditional attributes. В этом примере: This example:

объявляет TestAttribute как атрибут conditional класс, связанный с символами условной компиляции ALPHA и BETA . declares TestAttribute as a conditional attribute class associated with the conditional compilations symbols ALPHA and BETA .

Спецификации атрибута (спецификация атрибута) условного атрибута включаются, если один или несколько символов связанные условной компиляции определен точке спецификации, в противном случае атрибут Спецификация опускается. Attribute specifications (Attribute specification) of a conditional attribute are included if one or more of its associated conditional compilation symbols is defined at the point of specification, otherwise the attribute specification is omitted.

Это важно отметить, что включение или исключение спецификации атрибута класса атрибут conditional управляется символы условной компиляции точке спецификации. It is important to note that the inclusion or exclusion of an attribute specification of a conditional attribute class is controlled by the conditional compilation symbols at the point of the specification. В примере In the example

Файл test.cs : File test.cs :

Файл class1.cs : File class1.cs :

Файл class2.cs : File class2.cs :

классы Class1 и Class2 являются каждого дополнен атрибутом Test , которой условного зависит от того, нужно ли DEBUG определен. the classes Class1 and Class2 are each decorated with attribute Test , which is conditional based on whether or not DEBUG is defined. Так как этот символ определен в контексте Class1 , но не Class2 , спецификация Test атрибут Class1 включаются при спецификации Test атрибут Class2 опускается. Since this symbol is defined in the context of Class1 but not Class2 , the specification of the Test attribute on Class1 is included, while the specification of the Test attribute on Class2 is omitted.

Атрибут Obsolete The Obsolete attribute

Атрибут Obsolete используется для пометки типы и члены типов, которые больше не должны использоваться. The attribute Obsolete is used to mark types and members of types that should no longer be used.

Если программа использует тип или член, отмеченный атрибутом Obsolete атрибут, компилятор выдает предупреждение или ошибку. If a program uses a type or member that is decorated with the Obsolete attribute, the compiler issues a warning or an error. В частности, компилятор выдает предупреждение, если указан параметр не ошибка, или если параметр ошибки и имеет значение false . Specifically, the compiler issues a warning if no error parameter is provided, or if the error parameter is provided and has the value false . Компилятор выдает ошибку, если указан параметр ошибки и имеет значение true . The compiler issues an error if the error parameter is specified and has the value true .

В примере In the example

Класс A снабжен Obsolete атрибута. the class A is decorated with the Obsolete attribute. Каждое использование A в Main результаты предупреждение с указанным сообщением «этот класс является устаревшим. Используйте класс B.» Each use of A in Main results in a warning that includes the specified message, «This class is obsolete; use class B instead.»

Информационные атрибуты вызывающего объекта Caller info attributes

Для целей, например для ведения журналов и отчетности иногда полезно для функции-члена для получения определенных сведений во время компиляции об вызывающий код. For purposes such as logging and reporting, it is sometimes useful for a function member to obtain certain compile-time information about the calling code. Информационные атрибуты вызывающего объекта предоставить способ передачи таких сведений прозрачно. The caller info attributes provide a way to pass such information transparently.

Если необязательный параметр помечается с помощью одного из информационные атрибуты вызывающего объекта, пропуск соответствующего аргумента в вызове необязательно вызывают значение параметра по умолчанию должен быть замещен. When an optional parameter is annotated with one of the caller info attributes, omitting the corresponding argument in a call does not necessarily cause the default parameter value to be substituted. Вместо этого Если доступен указанный сведения о вызывающем контексте, эти сведения будут переданы как значение аргумента. Instead, if the specified information about the calling context is available, that information will be passed as the argument value.

Пример: For example:

Вызов Log() без аргументов выводит строки и номер путь вызова, а также имя члена, в котором произошел вызов. A call to Log() with no arguments would print the line number and file path of the call, as well as the name of the member within which the call occurred.

Информационные атрибуты вызывающего объекта может произойти в любой точке мира, необязательные параметры, включая в объявлениях делегатов. Caller info attributes can occur on optional parameters anywhere, including in delegate declarations. Тем не менее атрибуты сведений о конкретной вызывающей стороны имеют ограничения на типы параметров, которые они могут атрибута, таким образом, чтобы всегда будет существовать неявное преобразование из подставляемого значения к типу параметра. However, the specific caller info attributes have restrictions on the types of the parameters they can attribute, so that there will always be an implicit conversion from a substituted value to the parameter type.

Это ошибкой в том же информационный атрибут вызывающего объекта для параметра, как определить и реализовать часть объявления разделяемого метода. It is an error to have the same caller info attribute on a parameter of both the defining and implementing part of a partial method declaration. Применяются только информационные атрибуты вызывающего объекта в определение части, в то время как происходит только в реализации части информационные атрибуты вызывающего объекта учитываются. Only caller info attributes in the defining part are applied, whereas caller info attributes occurring only in the implementing part are ignored.

Сведения о вызывающем объекте не влияет на разрешение перегрузки. Caller information does not affect overload resolution. Как по-прежнему с атрибутами возможно использование необязательных параметров опускаются из исходного кода, вызывающего объекта, разрешение перегрузки игнорирует эти параметры таким же образом, он игнорирует другие пропущенный необязательные параметры (разрешение перегрузки). As the attributed optional parameters are still omitted from the source code of the caller, overload resolution ignores those parameters in the same way it ignores other omitted optional parameters (Overload resolution).

Сведения о вызывающем объекте подставляется только в том случае, когда функция вызывается явным образом в исходном коде. Caller information is only substituted when a function is explicitly invoked in source code. Неявные вызовы, например неявные родительский конструктор вызывает нет исходного расположения и не производит подстановку сведения о вызывающем объекте. Implicit invocations such as implicit parent constructor calls do not have a source location and will not substitute caller information. Кроме того вызовы, динамическая привязка не заменит сведения о вызывающем объекте. Also, calls that are dynamically bound will not substitute caller information. Если вызывающий объект info, атрибутами параметр опускается в таких случаях, будет использовано указанное значение по умолчанию значение параметра. When a caller info attributed parameter is omitted in such cases, the specified default value of the parameter is used instead.

Единственное исключение — выражения запроса. One exception is query-expressions. Они считаются синтаксические расширения, и если вызовы расширены, чтобы пропустить необязательные параметры с информационные атрибуты вызывающего объекта, будут заменены сведения о вызывающем объекте. These are considered syntactic expansions, and if the calls they expand to omit optional parameters with caller info attributes, caller information will be substituted. Место, используемое находится предложение запроса, что вызов был создан из. The location used is the location of the query clause which the call was generated from.

Если указано более одного Информационный атрибут вызывающего объекта на данном параметре, они являются предпочтительными в следующем порядке: CallerLineNumber , CallerFilePath , CallerMemberName . If more than one caller info attribute is specified on a given parameter, they are preferred in the following order: CallerLineNumber , CallerFilePath , CallerMemberName .

Атрибут CallerLineNumber The CallerLineNumber attribute

System.Runtime.CompilerServices.CallerLineNumberAttribute Разрешена для необязательных параметров, при отсутствии стандартного неявные преобразования (стандартные неявные преобразования) из значения константы int.MaxValue к типу параметра. The System.Runtime.CompilerServices.CallerLineNumberAttribute is allowed on optional parameters when there is a standard implicit conversion (Standard implicit conversions) from the constant value int.MaxValue to the parameter’s type. Это гарантирует, что любое строки неотрицательное число вплоть до это значение можно передать без ошибок. This ensures that any non-negative line number up to that value can be passed without error.

Если вызов функции из расположения в исходном коде опускает необязательный параметр со CallerLineNumberAttribute , а затем числовой литерал, представляющий номер строки в это расположение используется в качестве аргумента вызова вместо значения параметра по умолчанию. If a function invocation from a location in source code omits an optional parameter with the CallerLineNumberAttribute , then a numeric literal representing that location’s line number is used as an argument to the invocation instead of the default parameter value.

Если вызов занимает несколько строк, выбранной строки зависит от реализации. If the invocation spans multiple lines, the line chosen is implementation-dependent.

Обратите внимание, что номер строки могут быть затронуты #line директивы (строки директивы). Note that the line number may be affected by #line directives (Line directives).

Атрибут CallerFilePath The CallerFilePath attribute

System.Runtime.CompilerServices.CallerFilePathAttribute Разрешена для необязательных параметров, при отсутствии стандартного неявные преобразования (стандартные неявные преобразования) из string к типу параметра. The System.Runtime.CompilerServices.CallerFilePathAttribute is allowed on optional parameters when there is a standard implicit conversion (Standard implicit conversions) from string to the parameter’s type.

Если вызов функции из расположения в исходном коде опускает необязательный параметр со CallerFilePathAttribute , а затем в строковый литерал, представляющий путь к файлу это расположение используется в качестве аргумента вызова вместо значения параметра по умолчанию. If a function invocation from a location in source code omits an optional parameter with the CallerFilePathAttribute , then a string literal representing that location’s file path is used as an argument to the invocation instead of the default parameter value.

Формат пути к файлу зависит от реализации. The format of the file path is implementation-dependent.

Обратите внимание, что путь к файлу может затронуть #line директивы (строки директивы). Note that the file path may be affected by #line directives (Line directives).

Атрибут CallerMemberName The CallerMemberName attribute

System.Runtime.CompilerServices.CallerMemberNameAttribute Разрешена для необязательных параметров, при отсутствии стандартного неявные преобразования (стандартные неявные преобразования) из string к типу параметра. The System.Runtime.CompilerServices.CallerMemberNameAttribute is allowed on optional parameters when there is a standard implicit conversion (Standard implicit conversions) from string to the parameter’s type.

Если вызов функции из расположения в теле функции-члена или в атрибут применен к функции-члена, самого или его тип возвращаемого значения, параметров или параметров типа в исходный код опускает необязательный параметр со CallerMemberNameAttribute , а затем строковый литерал, представляющий имя этого элемента используется в качестве аргумента вызова вместо значения параметра по умолчанию. If a function invocation from a location within the body of a function member or within an attribute applied to the function member itself or its return type, parameters or type parameters in source code omits an optional parameter with the CallerMemberNameAttribute , then a string literal representing the name of that member is used as an argument to the invocation instead of the default parameter value.

Для вызовов, происходящих в универсальных методах только само имя метода используется без списка параметров типа. For invocations that occur within generic methods, only the method name itself is used, without the type parameter list.

Для вызовов, которые происходят в явные реализации члена интерфейса только само имя метода используется без предыдущем квалификацию интерфейса. For invocations that occur within explicit interface member implementations, only the method name itself is used, without the preceding interface qualification.

Для вызовов, возникающих в рамках методов доступа свойства или события используется имя члена, свойства или само событие. For invocations that occur within property or event accessors, the member name used is that of the property or event itself.

Для вызовов, возникающих в рамках методам доступа индексаторов, используется имя члена, предоставляемые IndexerNameAttribute (атрибут IndexerName) на элемент индексатора, если он имеется, или имя по умолчанию Item в противном случае. For invocations that occur within indexer accessors, the member name used is that supplied by an IndexerNameAttribute (The IndexerName attribute) on the indexer member, if present, or the default name Item otherwise.

Для вызовов, которые происходят в конструкторы экземпляров, статические конструкторы, деструкторы и операторы объявления члена имя, используемое зависит от реализации. For invocations that occur within declarations of instance constructors, static constructors, destructors and operators the member name used is implementation-dependent.

Атрибуты для взаимодействия Attributes for Interoperation

Примечание. Этот раздел применим только к реализации Microsoft .NET C#. Note: This section is applicable only to the Microsoft .NET implementation of C#.

Взаимодействие с компонентами COM и Win32 Interoperation with COM and Win32 components

Время выполнения .NET предоставляет большое количество атрибутов, которые позволяют программы на C# для взаимодействия с компонентами, написанными на COM и библиотеки DLL Win32. The .NET run-time provides a large number of attributes that enable C# programs to interoperate with components written using COM and Win32 DLLs. Например DllImport атрибут может быть использован для static extern методу, чтобы показать, что метод реализуется в библиотеки DLL Win32. For example, the DllImport attribute can be used on a static extern method to indicate that the implementation of the method is to be found in a Win32 DLL. Эти атрибуты найдены в System.Runtime.InteropServices пространства имен и подробную документацию для этих атрибутов см. в документации среды выполнения .NET. These attributes are found in the System.Runtime.InteropServices namespace, and detailed documentation for these attributes is found in the .NET runtime documentation.

Взаимодействие с другими языками .NET Interoperation with other .NET languages

Атрибут IndexerName The IndexerName attribute

Индексаторы реализованы в .NET с помощью индексированных свойств и иметь имя в метаданных .NET. Indexers are implemented in .NET using indexed properties, and have a name in the .NET metadata. Если не IndexerName присутствует атрибут для индексатора, а затем имя Item используется по умолчанию. If no IndexerName attribute is present for an indexer, then the name Item is used by default. IndexerName Атрибут которой разработчики могут переопределить это поведение по умолчанию и указать другое имя. The IndexerName attribute enables a developer to override this default and specify a different name.

Добавить комментарий