Руководство для раз

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

Как сделать в 1ый раз: руководство для начинающих

Подготовьтесь

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

Важен комфорт

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

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

Самое лучшее в создании уверенности в первый раз — это практиковать. Не бойтесь экспериментировать и делать ошибки. Они помогут вам совершенствоваться и расти.

Сохраняйте спокойствие и трезвый ум

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

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

Руководство для Фрекен Бок» — книга для родителей. Вы узнаете, как сделать своего ребенка счастливым, научитесь разговаривать с ним на понятном ему языке, освоите технику подкреплений и логику порядка. Вооружившись уникальным «Руководством» от Андрея Курпатова, вы станете настоящим авторитетом в глазах собственного ребенка — родителем, которым дорожат, которого ценят и любят!

Содержание:

  • ПРЕДИСЛОВИЕ 1

  • Вместо введения: — СКАЗКА ПРО ЗЕРКАЛО, — или обратный отсчет 3

  • Глава первая — ТАЙНА «СЕРЫХ КЛЕТОЧЕК», — или чего ждать от детского мозга 6

  • Глава вторая — «ГОВОРИТЬ БЕСПОЛЕЗНО», — или как ребенку объяснить, что… 15

  • Глава третья — «НЕЖНЕЕ, ЕЩЕ НЕЖНЕЕ!» — или язык чувств и высшая школа эмоций 23

  • Глава четвертая — ЕГО ВЕЛИЧЕСТВО ПОРЯДОК, — или слово «Нет» и все, что с ним связано 40

  • Вместо заключения: — ПРАВО НА ПОДВИГ 50

  • Приложение: — ПРАВА ДЕТЕЙ И НАШИ ПРАВИЛА 52

  • Post Scriptum 52

  • Примечания 52

Андрей Курпатов
Первое руководство для родителей
СЧАСТЬЕ ВАШЕГО РЕБЕНКА
2-ое издание

ПРЕДИСЛОВИЕ

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

Собственно, поэтому, из-за такого, прямо скажем, философского настроя книги, я и не слишком рассчитывал на какой-то особенный читательский прием моего «Триумфа». Однако, книга оказалась успешной, мне даже кажется — чересчур. Сейчас я держу в руках уже ее шестое переиздание, не считая множества так называемых «дополнительных тиражей», и, признаться> сам не верю, что у нее такая счастливая судьба. Но дело даже не в том, сколько издатель перевел на нее бумаги, а в том, сколько отзывов пришло мне на эту книгу. Сколько и каких! Люди писали мне о своих ощущениях, которые они испытывали во время чтения, делились своими мыслями, рассказывали о том, как она помогла им изменить свою жизнь. Честно сказать, я был несколько обескуражен. А еще меня стали постоянно спрашивать о книге, которую я легкомысленно анонсировал в самом последнем абзаце «Триумфа», назвав ее «своеобразным вторым томом», — о «Руководстве для Фрекен Бок».

Почему же «Триумф», несмотря на «отсутствие конкретики», все-таки нашел путь к сердцам читателей? Ну, верно, потому, что в этой книге я рассказывал о наших отношениях с людьми, которые были, есть и будут самыми главными в нашей жизни, о наших отношениях с родителями. А эти отношения — архисложная штука, нечто очень интимное. Они полны какого-то странного напряжения — слишком много в них внутренней, невысказанной, не понятой толком, не осознанной нами, какой-то потаенной боли. И потому, вероятно, меня все время теребят по поводу этого «Руководства» — мол, доктор, нам нужна эта книга, нам важно, чтобы с нашими детьми ничего подобного не случилось, мы хотим, чтобы они не чувствовали этой боли, мы хотим, чтобы наше воспитание не сделало их невротиками.

А у меня, признаться, случился самый настоящий «писательский» ступор. Ну, не могу приступить к книге, и все. Хоть ты тресни! Не пишется, и баста. А голова, тем временем, «любезно» подсказывает разного рода оправдания моей бездеятельности — то других дел много, то из-за суеты нет возможности сосредоточиться как следует, чтобы написать хорошо. Или вот, например, самая хитрая уловка… Я же в этот период и сам стал папой, а потому надо все проверить на опыте — чего я буду людям рассказывать какую-то теорию, если сам «пороху не нюхал»? Надо проверить, а потом уже писать. И вот проверяю и проверяю на моей Сонечке. Теория, понятное дело, никаких сбоев не дает, а вот не сажусь за книгу, и все. Написал за это время с десяток других книг, а за эту не сажусь… готовлюсь.

Не знаю, надо ли объяснять причину этого моего, как выразились бы на моем месте психологи, «внутреннего сопротивления»? Наверное, не надо. И так понятно — ответственность. Такая прямо ужасная-преужасная, большая-пребольшая ответственность! Шутка ли — о детях говорить! Объяснять, что с ними происходит, как их воспитывать… По мне, так это ответственность в прогрессии, без конца и края. Они же маленькие, несмышленые, они полностью зависят от нас. Одно неловкое движение, слово, поступок — и все, что-то поломалось, не восстановишь, не перепишешь. Это как у скульпторов, я думаю, когда они с куском мрамора работают: чуть передавил резцом, и все, привет — будет тебе не Давид, а Венера без конечностей. И это в лучшем случае! А то ведь и вовсе груда строительного мусора может образоваться, мозаику потом собирать. В общем, струхнул я. Самым натуральным образом.

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

Ганс Христиан Андерсен

И это я еще не рассказал, сколько раз и каким образом начинал писать эту книгу. Это же вообще комическая история! То так ее начну, то эдак, то передумаю — и по-другому, то один план составлю, то другой, то тридцать третий. Сегодня нравится, завтра — нет. Вчера вроде бы «все сложилось», сегодня — ерунда на постном масле. Прямо как заколдованная книга, честное слово! Но никакого колдовства, конечно, тут нет и близко. Все дело, не побоюсь повториться, в ответственности, к которой, собственно, я этим предисловием всех родителей и призываю. На нас родителях — лежит гигантская ответственность! Тут, с одной стороны, «не навреди», а с другой — в тень-то уйти нельзя, на плетень не наведешь, бездействие получается, а оно смерти подобно, потому как — то самое «навреди» и выйдет. Ужас!

Короче говоря, сегодня я принял решение прекратить все эти свои бессмысленные «творческие» метания-искания и писать как пишется. Думаю, тем, кто знает (например, по научным работам автора), насколько он любит все структурировать и систематизировать, это решение, им принятое, — это просто подвиг какой-то! И далось оно мне не просто. Но переставлять материалы из конца в начало и из начала в конец — это становится уже даже как-то глупо. Смешно было год назад. В общем, пишу вот с самого начала, с «предисловия», которое обычно всегда создается уже в самом конце, когда понятно, что и как получилось в книге и с книгой. Учитывая все это, сразу прошу меня простить за то, что последовательность будет не содержательной, а смысловой. То есть, это не тот случай, когда все можно поделить на несколько важных тем и каждую в отдельности рассмотреть, тут будет общее движение… Не обессудьте.

Составляем документацию разработчика пошагово без диет и тренировок

Время на прочтение
8 мин

Количество просмотров 14K

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

Привет! Это Теодора — технический писатель Платформы, жизненно важного департамента Ozon. Документация для нас имеет большое значение, потому что вся компания пользуется нашими разработками: 

  • инфраструктурой as a service;

  • фреймворками и библиотеками на Go, C#, TypeScript;

  • трейсингом, мониторингом, логированием, нагрузочным тестированием;

  • инструментами для работы с базами данных и аналитикой;

  • виртуализацией и контейнеризацией.

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

Это гусь Гоша и его постоянно отвлекают техническими вопросами

Это гусь Гоша и его постоянно отвлекают техническими вопросами

Дисклеймер: в этой статье упор сделан на содержание, структуру и формат. Сугубо гуманитарные вещи вроде орфографии и пунктуации обсуждать не будем — они на вашей совести.

Зачем вам документация

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

Плюсы хорошей документации:

  • увеличивается bus-фактор: знание распространяется между большим числом людей, и его сложнее потерять;

  • команда не отвлекается на ответы на одни и те же вопросы и занимается своей работой;

  • коллеги быстро находят ответы (в том числе через Ctrl+F), решают проблемы и разбираются в технологии: как следствие, увеличиваются их продуктивность и доход компании;

  • для внешней документации: разгружает сотрудников техподдержки.

Да и, согласитесь, вам просто приятно читать документацию, в которой всё понятно описано и легко искать информацию. Если у вас есть примеры, делитесь в комментариях.


Хорошая ли у вас документация?

Пройдите маленький тест и посчитайте набранные баллы:

Результаты:

  • 5 баллов: у вас хорошая документация, автор вами гордится!

  • 0–4 балла: есть что доработать — переходите к практическим шагам.

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

Не торопитесь переходить к действиям — сначала налейте чай и просто прочитайте статью.


Шаг 1. Соберите всю информацию

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

  • старая документация;

  • личные страницы — ваши и коллег (например, в Confluence);

  • ответы в чатах;

  • репозитории (например, в GitLab);

  • Word и другие текстовые редакторы;

  • ссылки в закладках браузера.

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

  • легче обновить одну, чем две;

  • одну из версий точно забудут обновить — и она будет вводить в заблуждение; как назло всегда будут находить именно её.


Шаг 2. Выбросите мусор

Одна актуальная статья лучше десяти устаревших.

Проверено: если у вас в документации найдут устаревшие сведения, никто не будет читать дальше — спросят у вас лично.

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

Под «избавлением» имеется в виду одно из двух:

  • добавление в архив — предпочтительно;

  • безвозвратное удаление.

Если после этого вообще ничего не осталось, это нормально.

Если вы детально не знаете начинку описываемой технологии

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

Удачно: позвать на встречу или созвон эксперта из команды (обычно это тимлид или старший разработчик) и вычитать с ним весь материал полностью, не поверхностно.

Неудачно: скинуть материал эксперту и попросить его самого удалить лишнее.

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

После такой «чистки» обычно очень легко дышится — будто камень с шеи снял.


Шаг 3. Найдите частые вопросы и сценарии

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

  1. Вы перечитываете все вопросы в чате за последний месяц, выписываете их на отдельную страницу (не удаляйте её) и считаете их количество. 

  2. Читаете комментарии с вопросами под инструкциями, если есть.

  3. Опрашиваете аудиторию. Обычно это либо пост в публичном чате, либо вопросы знакомому коллеге лично. Формы с опросами, как правило, неэффективны, поскольку собирают мало ответов.

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

Вначале выпишите вопросы и сценарии, а потом начинайте писать для них тексты.

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


Шаг 4. Поделите на разделы

Цель — наметить примерный план будущей базы знаний. Он может дополняться, когда появятся новые данные, но пока нужно сделать «скелет» для всего остального. 

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

Добавить их все сплошным списком вразнобой — провальный вариант. Ctrl+F тут тоже не всегда поможет, потому что, например, вы пишете в названии страницы «кубер», а ваш читатель ищет «Kubernetes» или «k8s», ничего не находит — и идёт к вам в личку.

Целевая аудитория

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

Подумайте, какие люди будут её читать. Например:

  • только ваша команда;

  • другие команды, им нужна одна функциональность;

  • другие команды, им нужна разная функциональность;

  • и ваша команда, и другие команды.

Внешние команды не должны видеть странички «Черновик to do», «[убрать в архив] 2 декабря». Держите их в отдельной папке для черновиков.

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


Шаг 5. Составьте словарь терминов

Одна сущность — один термин.

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

Термины должны легко находиться через Ctrl+F.

Неудачные варианты

Удачные варианты

«Пушка», «долбилка» и «стрелялка»;
Почему: кажется, что это разные термины, возникает путаница. Не найдётся по Ctrl+F.

«Пушка»

Почему: все коллеги в Ozon знают этот термин.

«СronJob’ы», «кроны» и «джобы»;
Почему: неясно, составляющие это друг друга или одно и то же. Не найдётся по Ctrl+F.

«CronJob»

Почему: все коллеги знают этот термин, он цельный.

«Фэктори» и «фабрика», «эккаунт» и «аккаунт», «экшен» и «действие»
Почему: будьте осторожны с англицизмами. Не используйте их, если есть подходящий термин на русском языке. Не найдётся по Ctrl+F.

«Фабрика», «аккаунт» и «действие»

Почему: популярные, понятные всем термины на русском языке.

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


Шаг 6. Утвердите правила для команды

Заранее обговорите с командой правила и план ведения документации.

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

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

Если не договориться «на берегу», документация всегда превращается в хаос:

  • нет структуры — статьи добавляют куда попало;

  • никто не убирает устаревшую информацию;

  • команда не всегда знает, что у неё есть в документации;

  • много заброшенных статей;

  • много пустых статей из 2016 с пометкой «to do»;

  • перемешаны внутренние черновики и внешняя документация;

  • нет архива;

  • ведётся на русском, английском, латинском и древнегреческом.

Донесите до команды, что документация — это ваш общий продукт и от её качества зависит эффективность: ваша и других команд.

Пример правил по созданию новых страниц:

  1. Черновик статьи создавайте в папке для черновиков.

  2. Не добавляйте статью в список публичных, пока не допишете.

  3. Чтобы перенести статью в список публичных:

  • отправьте её в чат команды;

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

  • решите с командой, в какой раздел её перенести.

  1. Статью можно переносить.

Советую почитать о методике совместного ведения документации.


Шаг 7. Напишите тексты

Лучший способ научиться писать хорошие инструкции — это отдавать их на вычитку. Желательно — редактору. Если его нет — любому коллеге. Я не о проверке пунктуации, а о том, понятно ли написана статья, полная ли в ней информация.

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

  • Освойте инструменты форматирования там, где вы ведёте документацию. Примеры: макросы Confluence, синтаксис Markdown и HTML.

  • Укажите, для кого страница и что в ней описано, — тогда человек сразу поймёт, нужно ли ему это читать.

  • Не пишите сплошные тексты — делите их на логические абзацы и разделы. При грамотной вёрстке легче сходу найти ответ.

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

  • Оформите разводящую страницу. Это главная страница с основной информацией и разделами по темам. Она нужна, чтобы читатель быстро понял, где искать необходимую инструкцию.
    Пример Ozon Docs
    Пример Yandex Cloud
    Пример Amazon EC2

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

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

  • Избегайте канцеляризмов — они утяжеляют тексты: «для того чтобы в данном процессе осуществить определённую функциональность».

  • Выделяйте в тексте важное, но не превращайте его в одни сплошные плашки.

  • Укажите контакты команды, чтобы читатели знали, к кому обращаться.


Шаг 8. Добавьте FAQ

FAQ — страница с часто задаваемыми вопросами и ответами на них. 

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

Используйте список из шага 3, если он есть.

FAQ — это не полноценная инструкция. Не дублируйте тексты и не делайте ответы очень подробными. 

Оптимальный вариант — краткий ответ со ссылкой на полную инструкцию. Например, «Да, это возможно. Подробнее в статье “Как создать N”».

Для продвинутых идеалистов:

Вопросы можно сгруппировать по темам — так их будет проще найти. Такие страницы FAQ обычно очень нравятся разработчикам, но это не принципиально, потому что обычно вопросы ищут с помощью Ctrl+F.


Шаг 9. Продумайте, как вашу документацию будут находить

Чтобы ваши труды не пропали даром, вашу документацию должно быть легко найти. 

Подумайте, куда ваши коллеги чаще обращаются за помощью:

  • к вам в личку: закрепите ссылку на документацию у себя в профиле на корпоративном портале;

  • в ваш чат: закрепите ссылку в шапке, закреплённом сообщении, сделайте так, чтобы каждому вступившему ссылку отправлял бот;

  • в поиск Confluence: удалите устаревшую информацию, если ещё этого не сделали, чтобы она не всплывала, понятно называйте статьи.

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


Шаг 10. Проанализируйте результат

Лучший источник для анализа — ваша аудитория. 

Есть несколько способов понять, решает ли проблемы ваша документация.

Что обычно делаю я:

  • Считаю количество запросов в чатах. 

  • Провожу мини-исследование среди читателей: готовлю открытые вопросы, спрашиваю, долго ли они искали информацию, что именно они искали, нашли ли ответы на свои вопросы.

  • Изучаю статистику просмотров в Confluence и Grafana: если за месяц никто не обратился к документации, нужна ли она?

Сама не практикую, но отличная идея:

  • Добавить фичу «Оцените статью». Такие макросы точно есть в Confluence.

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


Итог

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

И помните, что документация — ваш общий продукт. 

Буду рада ответить на ваши вопросы. Делитесь мнением и историями в комментариях.

В этом руководстве рассказывается, как реализовать Google Менеджер тегов на вашем сайте.

Как работать с уровнями данных

Чтобы создать максимально простое, гибкое и переносимое решение, рекомендуем использовать Google Менеджер тегов совместно с уровнем данных.
Уровень данных – это объект, содержащий всю информацию, которую требуется передавать в Менеджер тегов. Таким образом можно передавать события, переменные и прочие данные. При этом в Менеджере тегов можно настраивать триггеры, основанные на значении переменных (например, активацию тега ремаркетинга, когда purchase_total больше 6000 руб.) или на определенных событиях. Значения переменных можно также передавать в другие теги (например, значение purchase_total в поле со значением тега).

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

Как добавить на страницу переменные уровня данных

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

<script>
  dataLayer = [];
</script>

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

<script>
  dataLayer = [{
    'pageCategory': 'signup',
    'visitorType': 'high-value'
  }];
</script>

Например, Google Менеджер тегов можно настроить так, чтобы теги активировались на всех страницах категории signup и/или на тех, посетители которых помечены как high-value. Код уровня данных обязательно должен размещаться выше контейнера, как описано в кратком руководстве по началу работы.

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

Неверно

<!-- Google Tag Manager -->
...
<!-- End Google Tag Manager -->
<script>
  dataLayer = [{
    'pageCategory': 'signup',
    'visitorType': 'high-value'
  }];
</script>

Верно

<script>
  dataLayer = [{
    'pageCategory': 'signup',
    'visitorType': 'high-value'
  }];
</script>
<!-- Google Tag Manager -->
...
<!-- End Google Tag Manager -->

Все переменные, объявленные в объекте уровня данных, сохраняются, пока посетитель остается на текущей странице.
Переменные уровня данных, которые релевантны для нескольких страниц (например, visitorType), должны быть объявлены в уровне данных на каждой странице. Не обязательно задавать один и тот же набор переменных в уровне данных каждой страницы, но необходимо использовать единый принцип их именования. Другими словами, если для страницы регистрации вы задаете категорию с помощью оператора pageCategory, необходимо использовать тот же оператор (pageCategory) и на странице покупки.

Уровень данных не обязательно задавать явным образом. Поэтому, если вы решили не добавлять код уровня данных (и не указывать в нем переменные), фрагмент-контейнер Google Менеджера тегов инициирует объект уровня данных самостоятельно.

Как использовать уровень данных в обработчике событий HTML

В Google Менеджере тегов доступна специальная переменная уровня данных event, которая используется в блоках прослушивания событий JavaScript для активации тегов при взаимодействии пользователя с элементами сайта (например, кнопками). Допустим, вы хотите, чтобы тег отслеживания конверсий срабатывал при нажатии кнопки Submit в форме подписки на рассылку. События могут вызываться в результате взаимодействия пользователя с элементами сайта (ссылками, кнопками, Flash-компонентами меню) или в результате срабатывания JavaScript (например, при задержке).

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

dataLayer.push({'event': 'event_name'});

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

Например, чтобы настроить событие для нажатия кнопки, можно изменить ссылку кнопки, чтобы вызвать push() API:

<a href="#" name="button1" onclick="dataLayer.push({'event': 'button1-click'});" >Button 1</a>

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

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

В случае событий этот результат достигается вызовом push() API, который добавляет переменные в уровень данных и заменяет их. Самый простой синтаксис для настройки динамических переменных уровня данных выглядит так:

dataLayer.push({'variable_name': 'variable_value'});

Здесь variable_name – название переменной уровня данных, которую нужно настроить, а variable_value – значение переменной, которое нужно задать или заменить.

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

dataLayer.push({'color': 'red'});

Одновременная передача нескольких переменных

Вы можете передавать несколько переменных и событий одновременно с помощью одного оператора dataLayer.push().
Вот пример того, как это сделать:

dataLayer.push({
  'color': 'red',
  'conversionValue': 50,
  'event': 'customizeCar'
});

Этот же принцип можно использовать для обработчика событий ссылки:

<a href="#"
   name="color"
   onclick="dataLayer.push({
     'color': 'red',
     'conversionValue': 50,
     'event': 'customizeCar'});">Customize Color</a>

Следует учитывать, что передача на уровень данных переменной с тем же названием, что и у существующей, приведет к перезаписи текущего значения новым. Например, если в момент нажатия на ссылку выше на уровне данных уже была объявлена переменная color со значением blue, оно будет заменено новым (red).

Как работает асинхронный синтаксис

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

Асинхронный синтаксис возможен благодаря объекту dataLayer [уровень_данных].
Он срабатывает в порядке очереди, то есть обрабатывает вызовы API и активирует соответствующие теги по мере поступления обращений.
Чтобы добавить в очередь элемент, используйте метод dataLayer.push. Метод dataLayer.push позволяет передавать в Менеджер тегов дополнительные метаданные с помощью переменных и задавать события.

Создание объекта dataLayer можно определить перед кодом Менеджера тегов. Если этого не сделать, то объект dataLayer будет создан Менеджером тегов.

Дополнительную информацию об асинхронном синтаксисе вы найдете в разделе об отслеживании с помощью метода dataLayer.push.

Как избежать распространенных ошибок

При настройке Менеджера тегов следует учитывать перечисленные ниже особенности.

Слой данных dataLayer нельзя переопределять

Когда вы назначаете значения в уровень данных dataLayer (например, так: dataLayer = [{'item':
'value'}]
), любые существующие значения будут перезаписаны. Класс dataLayer рекомендуется объявлять в коде как можно выше, над фрагментом-контейнером и любыми другими сниппетами Google Оптимизации для скрытия страницы. После того как вы объявите уровень данных dataLayer, можно использовать метод dataLayer.push({'item': 'value'}), чтобы позднее добавить в него дополнительные значения с помощью скриптов.

В имени объектов dataLayer учитывается регистр

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

datalayer.push({'pageTitle': 'Home'});    // Won't work
dataLayer.push({'pageTitle': 'Home'});    // Better

Имена переменных должны быть заключены в кавычки

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

dataLayer.push({new-variable: 'value'});      // Won't work
dataLayer.push({'new-variable': 'value'});    // Better

Имена переменных должны быть одинаковыми на разных страницах

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

Неверный код
// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitor_type': 'high-value'});
Рабочий код
// Homepage:
dataLayer.push({'visitorType': 'low-value'});

// Checkout Page:
dataLayer.push({'visitorType': 'high-value'});

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

Для того чтобы теги активировались при загрузке страницы и выполнении заданного условия (например, на страницах, для которых переменной pageCategory присвоено значение sports), переменная pageCategory должна быть определена в уровне данных перед фрагментом-контейнером (например, 'pageCategory': 'sports'). Если переменные, передаваемые на уровень данных (например, с помощью метода dataLayer.push()), расположены после фрагмента-контейнера, они не смогут активировать теги при загрузке страниц, соответствующих определенному условию.

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

Все теги, активируемые Менеджером тегов, должны быть перенесены в Менеджер, а не просто скопированы туда (подробнее о переносе тегов рассказывается здесь).
Если одновременно внедрять теги как с помощью Менеджера тегов, так и с помощью других систем или через код сайта, это может привести к увеличению объема данных или проблемам с их целостностью. Например, если вы переносите тег отслеживания Google Аналитики в Менеджер тегов, это тег необходимо удалить из кода вашего сайта.

Переименование уровня данных

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

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','myNewName','GTM-XXXX');</script>
<!-- End Google Tag Manager -->

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

<script>
  myNewName = [{
    // ...
  }];
  myNewName.push({'variable_name': 'variable_value'});
</script>

Перенос тегов в Менеджер тегов

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

  1. Создайте схему сайта (необязательно)

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

  2. Добавьте стандартный фрагмент кода Менеджера тегов

    Составив схему, добавьте на сайт один (пустой) фрагмент кода Менеджера тегов и разверните его. Подробную информацию об этом вы найдете в кратком руководстве.

  3. Добавьте события и переменные

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

  4. Добавьте теги и связанные с ними триггеры в интерфейс управления Менеджера тегов

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

  5. Замените теги

    Одновременно удалите старые теги и опубликуйте новые в Менеджере тегов. Для этого в течение нескольких минут выполните следующие операции:

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

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

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

Работа с несколькими доменами

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

Если у вас один контейнер для нескольких доменов, тщательно настройте теги и триггеры в Менеджере тегов. Использование в Менеджере тегов триггера по умолчанию для всех страниц ($url matches RegEx .*) приведет к срабатыванию тегов на всех страницах всех доменов, где размещен фрагмент-контейнер. Поскольку настройки или цели некоторых тегов зависят от доменов, на которых они размещаются, может понадобиться создать собственные триггеры (или даже удалить триггер «Все страницы»), чтобы обеспечить активацию тегов на всех страницах одного или всех доменов.

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

Изображение со схемой нескольких доменов

В этом случае вам потребуется вручную задать основной домен, на котором будут настроены файлы cookie Google Аналитики, добавив строку в код отслеживания Google Аналитики (например, настроить файлы cookie для общего домена .example-petstore.com на сайтах www.example-petstore.com и dogs.example-petstore.com). Однако для дополнительного сайта, например www.my-example-blogsite.com, вы можете установить файлы cookie для домена .my-example-blogsite.com. Таким образом, один из двух тегов отслеживания Google Аналитики (с настройками для .example-petstore.com и .my-example-blogsite.com) будет активировать теги в каждом из этих доменов. Если в оба домена добавить один и тот же контейнер Менеджера тегов (с помощью используемого по умолчанию триггера «Все страницы»), все теги будут срабатывать на всех страницах обоих доменов.

Использование нескольких контейнеров на одной странице

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

Если вам необходимо использовать больше одного контейнера, внедрите все фрагменты-контейнеры в одном объекте уровня данных. Пример для двух контейнеров:

  1. Скопируйте приведенный ниже код JavaScript и добавьте его на страницу как можно ближе к открывающему тегу <head>.
    <!-- Google Tag Manager -->
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-XXXX');</script>
    
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
    new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
    j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
    'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-YYYY');</script>
    <!-- End Google Tag Manager -->
    
    
  2. Скопируйте приведенный ниже фрагмент и вставьте его сразу после открывающего тега <body>.
    <!-- Google Tag Manager (noscript) -->
    <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-XXXX"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    
    <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-YYYY"
    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <!-- End Google Tag Manager (noscript) -->
    
    

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

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

Flash и ActionScript

Чтобы Менеджер тегов активировал теги в зависимости от контента Flash-ролика или взаимодействия с ним, используйте метод ActionScript ExternalInterface для передачи событий и динамических переменных уровня данных из ролика SWF в уровень данных на странице контейнера. Для этого необходимо внедрить фрагмент-контейнер Менеджера тегов в HTML-код родительской страницы SWF-ролика в соответствии с этими инструкциями.

События и динамические переменные уровня данных могут передаваться из компонента Flash в Менеджер тегов вызовом метода push с помощью ExternalInterface. Например, чтобы инициировать событие при нажатии кнопки mybutton_btnс помощью ActionScript 3, добавьте приведенный ниже код в файл SWF.

import flash.display.*;
import flash.events.*;
import flash.external.*;
mybutton_btn.addEventListener(MouseEvent.MOUSE_UP, onButtonClick);
function onButtonClick( Event:MouseEvent ):void {
  var name:String= "FLASH_EVENT";
  if (ExternalInterface.available) {
    ExternalInterface.call('dataLayer.push',{'event': name});
  }
}

Чтобы метод ExternalInterface работал корректно, атрибуту allowscriptaccess при встраивании в SWF должно быть присвоено значение always.

<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'
        width='300' height='300' id='player1' name='player1'>
  <param name='movie' value='file.swf'>
  <param name='allowfullscreen' value='true'>
  <param name='allowscriptaccess' value='always'>
  <param name='flashvars' value='file=playlist.xml'>
  <embed id='player1' name='player1'
         src='file.swf'
         width='300' height='300'
         allowscriptaccess='always'
         allowfullscreen='true'
         flashvars="file=playlist.xml"/>
</object>

Как добавить переменные уровня данных для устройств, не поддерживающих JavaScript

Для устройств, которые не поддерживают JavaScript или на которых он отключен, в Менеджере тегов предусмотрен фрагмент кода <noscript>. С его помощью осуществляется развертывание независимых от JavaScript тегов в случаях, когда основной JavaScript Менеджера тегов не может быть загружен.

Важно отметить, что для работы уровня данных (содержащего переменные уровня данных, объявляемые при загрузке страницы), а также любых событий или динамических переменных уровня данных, передаваемых на уровень данных, требуется наличие JavaScript. Поэтому, если триггеры, которые активируют теги, не зависящие от JavaScript (и которые необходимо активировать, даже если JavaScript не может быть загружен), зависят от переменных уровня данных, вы должны передать эти переменные слоя данных в окно iframe <noscript> как параметры запроса. Например, чтобы тег активировался, когда категория страницы (pageCategory) – sports, а тип посетителя (visitorType) – returning, фрагмент-контейнер на этой странице необходимо изменить следующим образом:

<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-XXXX&pageCategory=sports&visitorType=returning" height="0"
                  width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->

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

Защита

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

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

Использование URL без указания протокола

По умолчанию фрагмент-контейнер Менеджера тегов всегда использует для загрузки контейнеров протокол https (например, https://www.googletagmanager.com). Это помогает защитить контейнер от отслеживания и действий злоумышленников и, как правило, повышает эффективность его работы.

Если вы хотите загружать контейнеры Менеджера тегов без указания протокола, замените https:// на // в исходном URL фрагмента-контейнера (см. выделенный код в примере ниже).

<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-XXXX');</script>
<!-- End Google Tag Manager -->
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-XXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->

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

В более старых версиях фрагмента-контейнера Менеджера тегов для загрузки контейнеров всегда используются URL без указания протокола (например, //www.googletagmanager.com). Эти версии будут продолжать работать, вносить в них изменения не требуется.

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

Понравилась статья? Поделить с друзьями:
  • Сухожар wx 12c инструкция как стерилизовать
  • Конспект руководство трудовой деятельности
  • Официальное письменное сообщение руководству
  • Калимин таблетки инструкция по применению цена отзывы аналоги
  • Гку рк крымздрав официальный сайт руководство