Настройка оборудования и программного обеспечения

Давай напишем ядро! Создаем простейшее рабочее ядро операционной системы. Семантическое ядро — как составить правильно? Сделать семантическое ядро

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


Привет, мир!

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

Как загружаются x86-машины

Прежде чем думать о том, как писать ядро, давай посмотрим, как компьютер загружается и передает управление ядру. Большинство регистров процессора x86 имеют определенные значения после загрузки. Регистр - указатель на инструкцию (EIP) содержит адрес инструкции, которая будет исполнена процессором. Его захардкоженное значение - это 0xFFFFFFF0. То есть x86-й процессор всегда будет начинать исполнение с физического адреса 0xFFFFFFF0. Это последние 16 байт 32-разрядного адресного пространства. Этот адрес называется «вектор сброса» (reset vector).

В карте памяти, которая содержится в чипсете, прописано, что адрес 0xFFFFFFF0 ссылается на определенную часть BIOS, а не на оперативную память. Однако BIOS копирует себя в оперативку для более быстрого доступа - этот процесс называется «шедоуинг» (shadowing), создание теневой копии. Так что адрес 0xFFFFFFF0 будет содержать только инструкцию перехода к тому месту в памяти, куда BIOS скопировала себя.

Итак, BIOS начинает исполняться. Сначала она ищет устройства, с которых можно загружаться в том порядке, который задан в настройках. Она проверяет носители на наличие «волшебного числа», которое отличает загрузочные диски от обычных: если байты 511 и 512 в первом секторе равны 0xAA55, значит, диск загрузочный.

Как только BIOS найдет загрузочное устройство, она скопирует содержимое первого сектора в оперативную память, начиная с адреса 0x7C00, а затем переведет исполнение на этот адрес и начнет исполнение того кода, который только что загрузила. Вот этот код и называется загрузчиком (bootloader).

Загрузчик загружает ядро по физическому адресу 0x100000. Именно он и используется большинством популярных ядер для x86.

Все процессоры, совместимые с x86, начинают свою работу в примитивном 16-разрядном режиме, которые называют «реальным режимом» (real mode). Загрузчик GRUB переключает процессор в 32-разрядный защищенный режим (protected mode), переводя нижний бит регистра CR0 в единицу. Поэтому ядро начинает загружаться уже в 32-битном защищенном режиме.

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

Что нам понадобится

  • Компьютер, совместимый с x86 (очевидно),
  • Linux,
  • ассемблер NASM,
  • ld (GNU Linker),
  • GRUB.

Входная точка на ассемблере

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

Как сделать так, чтобы ассемблерный код стал стартовой точкой для нашего ядра? Мы используем скрипт для компоновщика (linker), который линкует объектные файлы и создает финальный исполняемый файл ядра (подробнее объясню чуть ниже). В этом скрипте мы напрямую укажем, что хотим, чтобы наш бинарный файл загружался по адресу 0x100000. Это адрес, как я уже писал, по которому загрузчик ожидает увидеть входную точку в ядро.

Вот код на ассемблере.

kernel.asm
bits 32 section .text global start extern kmain start: cli mov esp, stack_space call kmain hlt section .bss resb 8192 stack_space:

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

Вторая строка начинает текстовую секцию, также известную как секция кода. Сюда пойдет весь наш код.

global - это еще одна директива NASM, она объявляет символы из нашего кода глобальными. Это позволит компоновщику найти символ start , который и служит нашей точкой входа.

kmain - это функция, которая будет определена в нашем файле kernel.c . extern объявляет, что функция декларирована где-то еще.

Далее идет функция start , которая вызывает kmain и останавливает процессор инструкцией hlt . Прерывания могут будить процессор после hlt , так что сначала мы отключаем прерывания инструкцией cli (clear interrupts).

В идеале мы должны выделить какое-то количество памяти под стек и направить на нее указатель стека (esp). GRUB, кажется, это и так делает за нас, и на этот момент указатель стека уже задан. Однако на всякий случай выделим немного памяти в секции BSS и направим указатель стека на ее начало. Мы используем инструкцию resb - она резервирует память, заданную в байтах. Затем оставляется метка, указывающая на край зарезервированного куска памяти. Прямо перед вызовом kmain указатель стека (esp) направляется на эту область инструкцией mov .

Ядро на C

В файле kernel.asm мы вызвали функцию kmain() . Так что в коде на C исполнение начнется с нее.

kernel.c
void kmain(void) { const char *str = "my first kernel"; char *vidptr = (char*)0xb8000; unsigned int i = 0; unsigned int j = 0; while(j < 80 * 25 * 2) { vidptr[j] = " "; vidptr = 0x07; j = j + 2; } j = 0; while(str[j] != "\0") { vidptr[i] = str[j]; vidptr = 0x07; ++j; i = i + 2; } return; }

Все, что будет делать наше ядро, - очищать экран и выводить строку my first kernel.

Первым делом мы создаем указатель vidptr, который указывает на адрес 0xb8000. В защищенном режиме это начало видеопамяти. Текстовая экранная память - это просто часть адресного пространства. Под экранный ввод-вывод выделен участок памяти, который начинается с адреса 0xb8000, - в него помещается 25 строк по 80 символов ASCII.

Каждый символ в текстовой памяти представлен 16 битами (2 байта), а не 8 битами (1 байтом), к которым мы привыкли. Первый байт - это код символа в ASCII, а второй байт - это attribute-byte . Это определение формата символа, в том числе - его цвет.

Чтобы вывести символ s зеленым по черному, нам нужно поместить s в первый байт видеопамяти, а значение 0x02 - во второй байт. 0 здесь означает черный фон, а 2 - зеленый цвет. Мы будем использовать светло-серый цвет, его код - 0x07.

В первом цикле while программа заполняет пустыми символами с атрибутом 0x07 все 25 строк по 80 символов. Это очистит экран.

Во втором цикле while символы строки my first kernel, оканчивающейся нулевым символом, записываются в видеопамять и каждый символ получает attribute-byte, равный 0x07. Это должно привести к выводу строки.

Компоновка

Теперь мы должны собрать kernel.asm в объектный файл с помощью NASM, а затем при помощи GCC скомпилировать kernel.c в другой объектный файл. Наша задача - слинковать эти объекты в исполняемое ядро, пригодное к загрузке. Для этого потребуется написать для компоновщика (ld) скрипт, который мы будем передавать в качестве аргумента.

link.ld
OUTPUT_FORMAT(elf32-i386) ENTRY(start) SECTIONS { . = 0x100000; .text: { *(.text) } .data: { *(.data) } .bss: { *(.bss) } }

Здесь мы сначала задаем формат (OUTPUT_FORMAT) нашего исполняемого файла как 32-битный ELF (Executable and Linkable Format), стандартный бинарный формат для Unix-образных систем для архитектуры x86.

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

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

В фигурных скобках, которые идут за выражением SECTIONS , точка означает счетчик позиции (location counter). Он автоматически инициализируется значением 0x0 в начале блока SECTIONS , но его можно менять, назначая новое значение.

Ранее я уже писал, что код ядра должен начинаться по адресу 0x100000. Именно поэтому мы и присваиваем счетчику позиции значение 0x100000.

Взгляни на строку.text: { *(.text) } . Звездочкой здесь задается маска, под которую подходит любое название файла. Соответственно, выражение *(.text) означает все входные секции.text во всех входных файлах.

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

После того как компоновщик выдаст текстовую секцию, значение счетчика позиции будет 0x100000 плюс размер текстовой секции. Точно так же секции data и bss будут слиты и помещены по адресу, который задан счетчиком позиции.

GRUB и мультизагрузка

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

Существует стандарт для загрузки разных ядер x86 с помощью бутлоадера. Это называется «спецификация мультибута ». GRUB будет загружать только те ядра, которые ей соответствуют.

В соответствии с этой спецификацией ядро может содержать заголовок (Multiboot header) в первых 8 килобайтах. В этом заголовке должно быть прописано три поля:

  • magic - содержит «волшебное» число 0x1BADB002, по которому идентифицируется заголовок;
  • flags - это поле для нас не важно, можно оставить ноль;
  • checksum - контрольная сумма, должна дать ноль, если прибавить ее к полям magic и flags .

Наш файл kernel.asm теперь будет выглядеть следующим образом.

kernel.asm
bits 32 section .text ;multiboot spec align 4 dd 0x1BADB002 ;magic dd 0x00 ;flags dd - (0x1BADB002 + 0x00) ;checksum global start extern kmain start: cli mov esp, stack_space call kmain hlt section .bss resb 8192 stack_space:

Инструкция dd задает двойное слово размером 4 байта.

Собираем ядро

Итак, все готово для того, чтобы создать объектный файл из kernel.asm и kernel.c и слинковать их с применением нашего скрипта. Пишем в консоли:

$ nasm -f elf32 kernel.asm -o kasm.o

По этой команде ассемблер создаст файл kasm.o в формате ELF-32 bit. Теперь настал черед GCC:

$ gcc -m32 -c kernel.c -o kc.o

Параметр -c указывает на то, что файл после компиляции не нужно линковать. Мы это сделаем сами:

$ ld -m elf_i386 -T link.ld -o kernel kasm.o kc.o

Эта команда запустит компоновщик с нашим скриптом и сгенерирует исполняемый файл под названием kernel .

WARNING

Хакингом ядра лучше всего заниматься в виртуалке. Чтобы запустить ядро в QEMU вместо GRUB, используй команду qemu-system-i386 -kernel kernel .

Настраиваем GRUB и запускаем ядро

GRUB требует, чтобы название файла с ядром следовало конвенции kernel-<версия> . Так что переименовываем файл - я назову свой kernel-701 .

Теперь кладем ядро в каталог /boot . На это понадобятся привилегии суперпользователя.

В конфигурационный файл GRUB grub.cfg нужно будет добавить что-то в таком роде:

Title myKernel root (hd0,0) kernel /boot/kernel-701 ro

Не забудь убрать директиву hiddenmenu, если она прописана.

GRUB 2

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

Menuentry "kernel 701" { set root="hd0,msdos1" multiboot /boot/kernel-701 ro }

Благодарю Рубена Лагуану за это дополнение.

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



Это и есть твое ядро!

Пишем ядро с поддержкой клавиатуры и экрана

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

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

Работа с портами: чтение и вывод

read_port: mov edx, in al, dx ret write_port: mov edx, mov al, out dx, al ret

Доступ к портам ввода-вывода осуществляется при помощи инструкций in и out , входящих в набор x86.

В read_port номер порта передается в качестве аргумента. Когда компилятор вызывает функцию, он кладет все аргументы в стек. Аргумент копируется в регистр edx при помощи указателя на стек. Регистр dx - это нижние 16 бит регистра edx . Инструкция in здесь читает порт, номер которого задан в dx , и кладет результат в al . Регистр al - это нижние 8 бит регистра eax . Возможно, ты помнишь из институтского курса, что значения, возвращаемые функциями, передаются через регистр eax . Таким образом, read_port позволяет нам читать из портов ввода-вывода.

Функция write_port работает схожим образом. Мы принимаем два аргумента: номер порта и данные, которые будут записаны. Инструкция out пишет данные в порт.

Прерывания

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

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

За прерывания в архитектуре x86 отвечает чип под названием Programmable Interrupt Controller (PIC). Он обрабатывает хардверные прерывания и направляет и превращает их в соответствующие системные прерывания.

Когда пользователь что-то делает с устройством, чипу PIC отправляется импульс, называемый запросом на прерывание (Interrupt Request, IRQ). PIC переводит полученное прерывание в системное прерывание и отправляет процессору сообщение о том, что пора остановить то, что он делает. Дальнейшая обработка прерываний - это задача ядра.

Без PIC нам бы пришлось опрашивать все устройства, присутствующие в системе, чтобы посмотреть, не произошло ли событие с участием какого-то из них.

Давай разберем, как это работает в случае с клавиатурой. Клавиатура висит на портах 0x60 и 0x64. Порт 0x60 отдает данные (когда нажата какая-то кнопка), а порт 0x64 передает статус. Однако нам нужно знать, когда конкретно читать эти порты.

Прерывания здесь приходятся как нельзя более кстати. Когда кнопка нажата, клавиатура отправляет PIC сигнал по линии прерываний IRQ1. PIС хранит значение offset , сохраненное во время его инициализации. Он добавляет номер входной линии к этому отступу, чтобы сформировать вектор прерывания. Затем процессор ищет структуру данных, называемую «таблица векторов прерываний» (Interrupt Descriptor Table, IDT), чтобы дать функции - обработчику прерывания адрес, соответствующий его номеру.

Затем код по этому адресу исполняется и обрабатывает прерывание.

Задаем IDT

struct IDT_entry{ unsigned short int offset_lowerbits; unsigned short int selector; unsigned char zero; unsigned char type_attr; unsigned short int offset_higherbits; }; struct IDT_entry IDT; void idt_init(void) { unsigned long keyboard_address; unsigned long idt_address; unsigned long idt_ptr; keyboard_address = (unsigned long)keyboard_handler; IDT.offset_lowerbits = keyboard_address & 0xffff; IDT.selector = 0x08; /* KERNEL_CODE_SEGMENT_OFFSET */ IDT.zero = 0; IDT.type_attr = 0x8e; /* INTERRUPT_GATE */ IDT.offset_higherbits = (keyboard_address & 0xffff0000) >> 16; write_port(0x20 , 0x11); write_port(0xA0 , 0x11); write_port(0x21 , 0x20); write_port(0xA1 , 0x28); write_port(0x21 , 0x00); write_port(0xA1 , 0x00); write_port(0x21 , 0x01); write_port(0xA1 , 0x01); write_port(0x21 , 0xff); write_port(0xA1 , 0xff); idt_address = (unsigned long)IDT ; idt_ptr = (sizeof (struct IDT_entry) * IDT_SIZE) + ((idt_address & 0xffff) << 16); idt_ptr = idt_address >> 16 ; load_idt(idt_ptr); }

IDT - это массив, объединяющий структуры IDT_entry. Мы еще обсудим привязку клавиатурного прерывания к обработчику, а сейчас посмотрим, как работает PIC.

Современные системы x86 имеют два чипа PIC, у каждого восемь входных линий. Будем называть их PIC1 и PIC2. PIC1 получает от IRQ0 до IRQ7, а PIC2 - от IRQ8 до IRQ15. PIC1 использует порт 0x20 для команд и 0x21 для данных, а PIC2 - порт 0xA0 для команд и 0xA1 для данных.

Оба PIC инициализируются восьмибитными словами, которые называются «командные слова инициализации» (Initialization command words, ICW).

В защищенном режиме обоим PIC первым делом нужно отдать команду инициализации ICW1 (0x11). Она сообщает PIC, что нужно ждать еще трех инициализационных слов, которые придут на порт данных.

Эти команды передадут PIC:

  • вектор отступа (ICW2),
  • какие между PIC отношения master/slave (ICW3),
  • дополнительную информацию об окружении (ICW4).

Вторая команда инициализации (ICW2) тоже шлется на вход каждого PIC. Она назначает offset , то есть значение, к которому мы добавляем номер линии, чтобы получить номер прерывания.

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

ICW4 задает дополнительные параметры окружения. Нам нужно определить только нижний бит, чтобы PIC знали, что мы работаем в режиме 80x86.

Та-дам! Теперь PIC проинициализированы.

У каждого PIC есть внутренний восьмибитный регистр, который называется «регистр масок прерываний» (Interrupt Mask Register, IMR). В нем хранится битовая карта линий IRQ, которые идут в PIC. Если бит задан, PIC игнорирует запрос. Это значит, что мы можем включить или выключить определенную линию IRQ, выставив соответствующее значение в 0 или 1.

Чтение из порта данных возвращает значение в регистре IMR, а запись - меняет регистр. В нашем коде после инициализации PIC мы выставляем все биты в единицу, чем деактивируем все линии IRQ. Позднее мы активируем линии, которые соответствуют клавиатурным прерываниям. Но для начала все же выключим!

Если линии IRQ работают, наши PIC могут получать сигналы по IRQ и преобразовывать их в номер прерывания, добавляя офсет. Нам же нужно заполнить IDT таким образом, чтобы номер прерывания, пришедшего с клавиатуры, соответствовал адресу функции-обработчика, которую мы напишем.

На какой номер прерывания нам нужно завязать в IDT обработчик клавиатуры?

Клавиатура использует IRQ1. Это входная линия 1, ее обрабатывает PIC1. Мы проинициализировали PIC1 с офсетом 0x20 (см. ICW2). Чтобы получить номер прерывания, нужно сложить 1 и 0x20, получится 0x21. Значит, адрес обработчика клавиатуры будет завязан в IDT на прерывание 0x21.

Задача сводится к тому, чтобы заполнить IDT для прерывания 0x21. Мы замапим это прерывание на функцию keyboard_handler , которую напишем в ассемблерном файле.

Каждая запись в IDT состоит из 64 бит. В записи, соответствующей прерыванию, мы не сохраняем адрес функции-обработчика целиком. Вместо этого мы разбиваем его на две части по 16 бит. Нижние биты сохраняются в первых 16 битах записи в IDT, а старшие 16 бит - в последних 16 битах записи. Все это сделано для совместимости с 286-ми процессорами. Как видишь, Intel выделывает такие номера на регулярной основе и во многих-многих местах!

В записи IDT нам осталось прописать тип, обозначив таким образом, что все это делается, чтобы отловить прерывание. Еще нам нужно задать офсет сегмента кода ядра. GRUB задает GDT за нас. Каждая запись GDT имеет длину 8 байт, где дескриптор кода ядра - это второй сегмент, так что его офсет составит 0x08 (подробности не влезут в эту статью). Гейт прерывания представлен как 0x8e. Оставшиеся в середине 8 бит заполняем нулями. Таким образом, мы заполним запись IDT, которая соответствует клавиатурному прерыванию.

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

С дескриптором никаких сложностей. Он содержит размер IDT в байтах и его адрес. Я использовал массив, чтобы вышло компактнее. Точно так же можно заполнить дескриптор при помощи структуры.

В переменной idr_ptr у нас есть указатель, который мы передаем инструкции lidt в функции load_idt() .

Load_idt: mov edx, lidt sti ret

Дополнительно функция load_idt() возвращает прерывание при использовании инструкции sti .

Заполнив и загрузив IDT, мы можем обратиться к IRQ клавиатуры, используя маску прерывания, о которой мы говорили ранее.

Void kb_init(void) { write_port(0x21 , 0xFD); }

0xFD - это 11111101 - включаем только IRQ1 (клавиатуру).

Функция - обработчик прерывания клавиатуры

Итак, мы успешно привязали прерывания клавиатуры к функции keyboard_handler , создав запись IDT для прерывания 0x21. Эта функция будет вызываться каждый раз, когда ты нажимаешь на какую-нибудь кнопку.

Keyboard_handler: call keyboard_handler_main iretd

Эта функция вызывает другую функцию, написанную на C, и возвращает управление при помощи инструкций класса iret. Мы могли бы тут написать весь наш обработчик, но на C кодить значительно легче, так что перекатываемся туда. Инструкции iret/iretd нужно использовать вместо ret , когда управление возвращается из функции, обрабатывающей прерывание, в программу, выполнение которой было им прервано. Этот класс инструкций поднимает флаговый регистр, который попадает в стек при вызове прерывания.

Void keyboard_handler_main(void) { unsigned char status; char keycode; /* Пишем EOI */ write_port(0x20, 0x20); status = read_port(KEYBOARD_STATUS_PORT); /* Нижний бит статуса будет выставлен, если буфер не пуст */ if (status & 0x01) { keycode = read_port(KEYBOARD_DATA_PORT); if(keycode < 0) return; vidptr = keyboard_map; vidptr = 0x07; } }

Здесь мы сначала даем сигнал EOI (End Of Interrupt, окончание обработки прерывания), записав его в командный порт PIC. Только после этого PIC разрешит дальнейшие запросы на прерывание. Нам нужно читать два порта: порт данных 0x60 и порт команд (он же status port) 0x64.

Первым делом читаем порт 0x64, чтобы получить статус. Если нижний бит статуса - это ноль, значит, буфер пуст и данных для чтения нет. В других случаях мы можем читать порт данных 0x60. Он будет выдавать нам код нажатой клавиши. Каждый код соответствует одной кнопке. Мы используем простой массив символов, заданный в файле keyboard_map.h , чтобы привязать коды к соответствующим символам. Затем символ выводится на экран при помощи той же техники, что мы применяли в первой версии ядра.

Чтобы не усложнять код, я здесь обрабатываю только строчные буквы от a до z и цифры от 0 до 9. Ты с легкостью можешь добавить спецсимволы, Alt, Shift и Caps Lock. Узнать, что клавиша была нажата или отпущена, можно из вывода командного порта и выполнять соответствующее действие. Точно так же можешь привязать любые сочетания клавиш к специальным функциям вроде выключения.

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

Сами запросы можно разделить на три группы:

  1. Первичные запросы характеризуют сайт в общем. К примеру, для моего сайта: заработок на дому, заработок в интернете, работа в интернете.
  2. Основные запросы входят в семантическое ядро и по ним стоит продвигать сайт. К примеру: заработок в интернете без вложений, работа в интернете для мам.
  3. Вспомогательные запросы или ассоциативные, т.е. схожие по смыслу с основными. Например, кем работать в декрете, подработка для мамы в декрете.

Составляем семантическое ядро своими руками онлайн

wordstat.yandex.ru самый доступный способ для создания СЯ. На этом сайте показывается, сколько раз в месяц люди вбивают в поиск ту или иную фразу (ключевой запрос).

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

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

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

Чтобы понять, сколько раз люди искали конкретную фразу, нужно взять ее в кавычки и поставить в начале восклицательный знак: «!заработок без вложений». Значение стало в несколько раз меньше, но теперь вы знаете точную частотность, т.е. сколько людей вбивают в поиск конкретно эту фразу.

Аналогичным образом происходит подбор ключевых запросов для гугла (Google.Adwords) и рамблера (Rambler.Adstat). Остальные поисковые системы слишком незначительные, чтобы подбирать под них запросы.

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

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

  1. На верхней панели нажмите на шестеренку и зайдите в настройки. Здесь много всего можно подстроить под себя, но сейчас перейдите в последнюю вкладку Yandex.Direct;
  2. Введите логин и пароль от Яндекса (создайте доп.ящик, т.к. его могут забанить);
  3. Жмите создать новый проект, назовите и сохраните его;
  4. Нажмите на «Пакетный сбор слов из левой колонки Yandex Wordstat»;
  5. Внесите первичный запрос и пару основных, затем жмите Начать сбор;
  6. Просмотрите выдачу и пометьте галочкой все, которые не подходят для вас, потом кликните правой кнопкой мыши и Удалить отмеченные строки;
  7. Нажмите «Сбор частотности из сервиса Yandex.Wordstat» — Собрать частотности «!».
  8. Ориентируйтесь именно на столбец «Частотность «!»» — это конкретное число запросов именно этой фразы (в месяц). Можно отфильтровать по возрастанию, и сразу отбросить все КЗ с частотностью ниже 30 — это всего 1 запрос в день.
  9. Экспортируйте данные в Excel – нажмите на верхней панели соответствующий значок.

платная программа (около 1700 рублей). С ним работают профессиональные сеошники. Если вы хотите просто подобрать СЯ для небольшого блога и все, не стоит платить такие деньги за программу, лучше использовать Словоеб. Чаще всего ее покупают опытные блоггеры со множеством сайтов или веб-райтеры, занимающиеся сео-статьями.

Работать с программой очень просто:

  1. Начать новый проект;
  2. Выбрать регион Россия + СНГ (или другое);
  3. Введите поисковый запрос и нажмите на кнопку Яндекс.Вордстат (1 выделенная зеленым кнопка);
  4. Просмотрите варианты и выберите подходящие;
  5. Перенесите подходящие запросы во 2 и 3 кнопки, выделенные зеленым на скрине;
  6. Получите подходящие ключи.

Сама программа довольно проста в использовании + есть инструкции в интернете. При желании можно купить и пользоваться.

Составляем семантическое ядро своими руками

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

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

Убирайте высококонкурентные запросы, по которым вы не сможете пробиться в ТОП10. При возникновении сомнений посмотрите на сайте Мутаген уровень конкуренции. Ну или вручную оценивайте выдачу – популярные запросы видно сразу.

Распределите запросы по сайту. Среднечастотные запросы идут на главную страницу, низкочастотные сгруппируйте по смыслу и используйте в статьях или разделах. Используйте их как ключевые слова в статьях (1 среднечастотный главный, пара низкочастотных в статье и подзаголовках, и разбавьте по тексту вспомогательными). Вписывайте в среднем 1-2 ключа на 2000 знаков, не чаще.

Некоторые не создают СЯ и все равно добиваются успеха. Но лучше знать, как составить семантическое ядро своими руками, программы для подбора слов сделают это практически на автомате (словоеб). А вам будет потом намного проще развиваться и писать статьи.

Приветствую вас дорогие мои читатели!

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

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

Как составить семантическое ядро!

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

А чтобы составить достаточно солидный список (200-300 слов) у вас на это уйдет немало времени. Поэтому для удобства мы воспользуемся специальными сервисами, такими как Yandex wordstat, Google adwords, Rambler adstat они нам значительно упростят задачу при . Конечно, можно было бы обойтись только Yandex и Google, т.к. это гиганты в поиске ключевых запросов по сравнению с Rambler, но статистика говорит о том, что 5-6% людей все же используют в качестве поисковой системы Rambler, поэтому не будем ей пренебрегать.

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

кисти для фотошоп
кисти для photoshop
кисти фотошоп
кисти photoshop
эффекты фотошоп
эффекты photoshop
фотоэффект
рисунки фотошоп
рисунки photoshop
коллаж
фотоколлаж
фотомонтаж
рамки для фото
фото дизайн

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

Статистика ключевых слов Yandex wordstat

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

Дальше вы видите, что в Yandex wordstat имеются два столбца. Столбец слева показывает вам, что искали люди вбивая, в поисковую строку, в нашем случае фразу «кисти для фотошоп». Правый столбец показывает, что еще искали люди, искавшие фразу «кисти для фотошоп», советую вам не игнорировать правый столбец, а выбрать из него все слова, подходящие для вашей тематики.

Хорошо, с этим тоже разобрались, идем дальше. Еще один очень важный момент, как вы видите по результату поиска «кисти для фотошоп» мы наблюдаем огромную цифру 61134 запроса! Но это не значит, что фразу «кисти для фотошоп» вбивали столько раз за месяц в поисковую строку Яндекс. Yandex wordstat устроен таким образом, что если допустим вбить словосочетание «кисти для фотошоп» он вам выдаст число запросов, которое будет означать, сколько раз люди искали любые словоформы (кисти фотошоп, кисти для фотошопа , кисть фотошопа и.т.д.), словосочетания (предложения) (бесплатные кисти для фотошоп, скачать кисти фотошоп бесплатно и т.д.), в которых присутствует фраза «кисти для фотошоп». Я думаю это тоже понятно.

Для того что бы Yandex wordstat выдавал нам (относительно) точное число запросов, существуют специальные операторы, такие как («», «!»). Если вы вводите словосочетание «кисти для фотошоп» в кавычках, вы увидите совсем другую цифру, которая вам показывает сколько раз люди искали словосочетание «кисти для фотошоп» в разных словоформах (кисти для фотошопа и т.д.).

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

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

Но об этом чуть позже, после того, как мы рассмотрим две другие системы по подбору ключевых слов (Google adwords и Rambler adstat). Так как после их рассмотрения ваш список ключевых слов существенно пополнится.

Подбор ключевых слов Google adwords

Для подбора ключевых слов так же используют Google adwords, это аналогичный сервис с Yandex wordstat. Давайте так же перейдем вот . Перед нами откроется окно подбора ключевых слов Google adwords. Точно также вбиваем в поисковой строке первую фразу из нашего списка «кисти для фотошоп». Обратите внимание, что в Google adwords нет никаких операторов, а достаточно поставить галочку напротив слова [Точное] в столбце «Типы соответствия». Как мы видим, количество запросов/в месяц в Google adwords существенно отличается от Yandex wordstat. Это говорит о том, что все же больше людей используют поисковую систему Yandex. Но если просмотреть весь список, то можно найти те ключевые слова, которые Yandex wordstat вообще не показывает.

Также в Google adwords можно узнать еще много чего интересного (например, приблизительная цена за клик), что также следует учитывать при отборе ключевых слов. Чем больше цена за клик – тем более высоко конкурентный запрос. Подробно останавливаться здесь я не буду, принцип отбора ключевых слов схожий с Yandex wordstat и немного покопавшись, вы и сами сможете со всем разобраться. Идем дальше.

Статистика по поисковым запросам Rambler adstat

Как я уже упоминал выше, что Rambler adstat намного уступает двум предыдущим сервисам, но все же из него тоже можно, почерпнуть кое-какую информацию. Давайте так же перейдем вот и точно также введем в поисковой строке первую фразу из нашего списка «кисти для фотошоп». Здесь я думаю, тоже подробно останавливаться не стоит. Повторюсь еще раз принцип отбора ключевых слов у всех трех систем схожий.

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

ВЧ, СЧ и НЧ запросы или ВЧЗ, СЧЗ и НЧЗ

При составлении семантического ядра существуют еще такие понятия как высокочастотные, среднечастотные и низкочастотные запросы или их еще называют ВЧ, СЧ и НЧ запросы, также могут встречаться ВЧЗ, СЧЗ и НЧЗ. Это те запросы, которые люди вводят в поисковые системы. Чем больше людей введет один и тот же запрос в поисковую строку, тем высокочастотней будет запрос (ВЧ запрос), то же самое с СЧ и НЧ запросами. Надеюсь это тоже понятно.

Теперь запомните один очень важный момент. На начальном этапе развития блога, его следует продвигать только по НЧ запросам, иногда используют и СЧ запросы, это будет зависеть от конкурентности запроса. По ВЧ запросам вы вряд ли сможете , у вас просто не хватит на это денег. Не пугайтесь по НЧ запросам выйти в ТОП возможно и без вложения средств. У вас скорее всего возник вопрос, а какие запросы считать ВЧ запросами, СЧ запросами и НЧ запросами?

Здесь точный ответ я думаю, не может дать ни кто! У блогов разных тематик он будет разным. Есть тематики очень популярные, в которых точное число запросов («!») достигает 20 тыс. показов/в месяц и более (например, «!уроки!фотошопа»), а есть менее популярные, в которых точное число запросов не достигает и 2000 показов/в месяц (например «!уроки!английского»).

Я в этом случае придерживаюсь простой формулы, которую вычислил для себя, продемонстрирую на примере «!уроки!фотошопа»:

ВК, СК и НК запросы ВКЗ, СКЗ и НКЗ

По мимо ВЧ, СЧ и НЧ запросов существует еще одна категория. Это высоко конкурентные (ВК), средне конкурентные (СК) и низко конкурентные (НК) запросы, также могут встречаться ВКЗ, СКЗ и НКЗ. В этом случае нам потребуется определить конкурентность тех запросов, по которым мы планируем продвигаться в ТОП, но об этом будет отдельный пост, на тему « ». . А пока давайте считать, что ВЧ запросы являются ВК запросами, СЧ – СК и НЧ – НК. В большинстве случаев эта формула работает, но бывают и исключения, когда например НЧ запросы являются высоко конкурентными (ВК) и наоборот ВЧ запросы являются НК. Все зависит от тематики блога.

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

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

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

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

Сразу хочу сказать, что я не специалист в «фотошопе», просто эта тема мне пришла на ум при написании поста. Поэтому я подбирал запросы по смыслу. Хорошо, вот какая схема семантического ядра у меня получилась на тему «фотошоп». У вас должно получиться, что-то на подобии:

Виды запросов

Все запросы (наши ключевые слова) можно разделить на три категории:

  • Первичные запросы – это те запросы, которые одним-двумя словами могут дать общее определение вашему ресурсу или его части. Первичные запросы, наиболее охватывающие общую тематику вашего блога лучше оставить на главной странице. В нашем случае это: уроки фотошоп, эффекты фотошоп, как сделать фотоколлаж.
    Первичные запросы, менее охватывающие общую тематику вашего блога, но наиболее точно характеризующие его какую-то часть, рекомендуется использовать в качестве отдельных рубрик вашего блога. В нашем случае это: кисти фотошоп, рамки фотошоп, шаблоны фотошоп, фото дизайн.
  • Основные запросы – это те запросы, которые достаточно точно определяют тематику вашего проекта и способны дать полезную информацию читателю, научить его тому, что он хочет, или ответить на часто задаваемый вопрос КАК??? Т.е., в нашем случае это: как добавить кисти в фотошопе, как сделать шаблон в фотошопе, как сделать фотоколлаж в фотошопе и т.д. Основные запросы, по сути, должны являться заголовками наших будущих статей.
  • Дополнительные (вспомогательные) запросы или их еще называют ассоциативными – это те запросы, которые люди так же вводили в поисковую строку браузера при поиске основного запроса. Т.е. это ключевые фразы, которые являются частью основного запроса. Они как бы будут дополнять основной запрос, и являться ключевыми словами при продвижении ее в ТОП. Например: фотошоп для начинающих онлайн, фотошоп убрать эффект красных глаз, коллаж из нескольких фотографий. Я думаю это понятно.

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

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

Как я уже писал выше: на начальном этапе стоит продвигать свой блог по НЧ или НК запросам. А что же делать с СЧ (СК) и ВЧ (ВК) запросами, спросите вы? Поясняю.

Продвигаться по ВЧ (ВК) запросам у вас вряд ли получится, поэтому их можно удалить, но рекомендуется оставить один-два ВЧ (ВК) запроса для главной страницы. Сразу же оговорюсь: не надо кидаться на самый ВЧ запрос, такой как «фотошоп», у которого точное число показов/в месяц составляет – 163384. Например, вы хотите при помощи вашего блога обучить людей работе в фотошопе. Вот и возьмите за основу ВЧ запроса – «уроки фотошоп», у которого точное число показов/в месяц составляет – 7110. Этот запрос более характеризует вашу тему и по нему вам будет легче продвинуться.

А вот СЧ (СК) запросы можно поместить на отдельной страничке в excel. По мере того как ваш блог будет подниматься в глазах ПС они (СЧ (СК) запросы) будут понемногу становиться востребованными.

Я знаю, что новички сейчас вообще не понимают, о чем я говорю, советую вам почитать статью о том, изучив которую вам станет все понятно.

Заключение

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

А каким образом вы составляете семантическое ядро? А может вы его вообще не составляете? Какие используете программы и сервисы при составлении? Рад буду услышать ваши ответы в комментариях!

И напоследок посмотрите интересное видео.

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

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

  1. По одному запросу продвигается только одна страница . Не допускается, чтобы одному запросу соответствовали две и более страницы на сайте – в ином случае поисковые системы могут выбрать для показа по запросу не ту страницу, которая продвигается.
  2. Страница должна отвечать на запрос пользователя . Например, если запрос включает слово «цены» – на продвигаемой странице должны быть указаны цены на товар. Если вы продвигаете страницу по запросу «калькулятор каско» – на странице должна быть форма расчета стоимости КАСКО.
  3. Семантическое ядро должно включать высоко, средне и низко- частотные запросы . Необходимо найти максимальное количество подходящих запросов, иначе вы не получите полную отдачу от продвижения.
  4. При группировке запросов в одну группу необходимо включать запросы, по которым реально продвигать одну страницу. Для этого посмотрите, есть ли в результатах поиска страницы, которые находятся в ТОП-10 по выбранным вами запросам. Если таких страниц нет – запросы нужно разводить по разным группам.
  5. Проверьте влияние «Спектра» в Яндексе . Может оказаться, что для вашей темы «Спектр» оставил в ТОПе не 10 мест, а только 1 или 2 – конкуренция за них усиливается. Также есть запросы, по которым необходимо выводить в ТОП информационные статьи, а страницу с коммерческой информацией – не получится.
  6. Внимание, реклама и колдунщики! В конкурентных тематиках в результатах поиска может быть много рекламы Директа и колдунщиков, которые смещают результаты поиска сильно вниз и снижают отдачу от нахождения в ТОПе. Пример такого запроса: «авиабилеты купить» (см. скриншот ниже и попробуйте найти на экране органическую выдачу).

Сколько запросов должно включать семантическое ядро?

Максимально возможное количество – в идеале все запросы, которые есть в вашей тематике и подходят вам (то есть по этим запросам ваш сайт реально может ответить).

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

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

Пример простого семантического ядра для SEO-блога

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

Как можно собрать семантическое ядро?

  1. Скопировать у конкурентов . В данном случае выбирается 2-3 сайта конкурентов и через специальные программы выкачивается информация, по каким запросам их сайты находятся в ТОП-10. Например, бесплатно получить такую информацию можно через сервис Seopult.ru. В качестве сайтов конкурентов можно выбирать самые популярные сайты в тематике или сайты компаний, ассортимент которых максимально близок вашему проекту.
    Плюсы способа: экономия времени на создании семантического ядра, относительная простота и бесплатность.
    Минусы способа: большое количество «мусорных» запросов, полученные данные потребуется фильтровать и дополнительно обрабатывать, есть риск копирования ошибок конкурентов. В семантику не пропадут запросы, которые по каким-то причинам конкуренты не выбрали или не нашли.
  2. Продвигать запросы, близкие к ТОПу . Продвижение сайта по запросам, позиции по которым близки к ТОПу. Данный способ подходит только для старых сайтов, которые ранее продвигались. Через системы из п.1 собирается информация, по каким запросам проект находится в ТОП-30 и данные запросы включаются в семантическое ядро.
    Плюсы способа : экономия времени и бюджета заказчика. Более быстрая отдача от продвижения.
    Минусы способа : данный подход позволяет собрать минимальное количество запросов. В дальнейшем семантическое ядро необходимо расширять. Нет гарантий, что все запросы, которые будут получены – эффективны для бизнеса клиента.
  3. Создать семантическое ядро «с нуля» . Семантика формируется, исходя из глубокого анализа запросов, по которым могут искать продвигаемые товары, услуги или информацию.
    Плюсы способа : сбор максимального количества запросов для максимально эффективного продвижения.
    Минусы способа : долго и дорого.

Этапы составления семантического ядра для сайта «с нуля»

  1. Анализ проекта . В рамках анализа необходимо составить полный перечень услуг, категорий товаров или типов информации, представленной на сайте клиента. На данном этапе также анализируется потенциальный клиент компании. Например, если компания желает продавать товары в премиальном сегменте – нет смысла предлагать для продвижения запросы со словом «дешево». Оптимально все выписывать на листок, еще лучше – формировать таблицы в Excel.
  2. Мозговой штурм . На данном этапе команда проекта составляет перечень запросов, по которым – по мнению участников команды – могут искать каждый товар, услугу или тип информации на сайте клиента. К мозговому штурму можно привлекать клиента и сторонних людей, не связанных с SEO, и задавать им вопросы, как они будут искать ту или иную информацию в сети – какие запросы задавать и т.д. Люди очень разные и порою они ищут информацию по таким запросам – по которым ни один специалист не догадается! Полезно изучить тексты на сайте клиента и конкурентов – как правило, в них содержатся части поисковых запросов, различные названия одних и тех же товаров – то есть по сути все комбинации слов и фраз, по которым их могут искать через поисковики.
  3. Выкачивание поисковых запросов из других источников конце статьи будут даны ссылки на наиболее полезные программы для решения данной задачи):
    • Статистика запросов в Яндексе и Google;
    • Поисковые подсказки в поисковых системах;
    • Статистика переходов на сайт из поисковых систем (если сайт имеет трафик);
    • Ключевые запросы у конкурентов;
    • База Пастухова – содержит порядка 800 млн. запросов, которые задавали пользователи поисковых систем. База постоянно обновляется и дополняется. Платная.
  4. Фильтрация запросов, удаление дублей и «пустых» фраз . На данном этапе совмещаются списки запросов, полученных из разных источников. Из этого списка удаляются дубли и «пустые» запросы. Таковыми считаются фразы, если при вводе их в кавычках в системах статистики поисковых систем выдается нулевая частота. Подробнее про определение частоты запросов .
  5. Группировка запросов . На данном этапе из всех запросов выделяются группы, по которым будут продвигаться отдельные разделы и страницы сайта. Если на вашем сайте нет подходящих страниц для продвижения по определенным группам запросов – такие страницы необходимо создать.
  6. Подумать еще . Иногда полезно после создания семантического ядра отдохнуть 1-2 дня и снова вернуться к этому вопросу – взглянуть на всю собранную информацию свежим взглядом. Иногда появляются новые идеи, как еще люди ищут информацию через поисковые системы – и получается расширить семантическое ядро.

Тестирование семантического ядра

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

Подробнее про тестирование семантического ядра можно прочитать в статье пять причин покупать контекстную рекламу .

Развитие семантики сайта

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

В комментариях вы можете задать вопросы, как создать семантическое ядро – мы по возможности поможем и ответим.

Полезные сайты и сервисы для подбора семантического ядра:

  • Wordstat.yandex.ru – инструмент для просмотра статистики запросов в Яндексе;
  • Rush-analytics.ru – сервис позволяет собирать большие ядра на основе данных Яндекс.Wordstat и сбора поисковых подсказок в Яндексе и Google. Дают приятный бонус при регистрации в системе.
  • Topvisor.ru – сервис позволяет автоматически сгруппировать запросы из семантического ядра. Можно задать точность группировки, которая влияет на число запросов в одной группе.
  • Advse.ru – инструмент, позволящий посмотреть, по каким запросам конкуренты выводят контекстную рекламу (по тем же запросам можно продвигаться)
  • Базы Пастухова – огромная база запросов к поисковой системе Яндекс, на момент написания статьи состояла из 800 млн. запросов.
  • Seopult.ru – инструмент, позволяющий бесплатно посмотреть позиции своего сайта или конкурентов в результатах поиска. Для просмотра позиций необходимо зарегистрироваться в системе, создать проект и дойти до этапа выбора ключевых слов.

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


Больше видео на нашем канале - изучайте интернет-маркетинг с SEMANTICA

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

Для чего сайту семантическое ядро

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

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

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

Данная задача решается двумя путями:

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

Виды ключевых запросов (КЗ) по количеству просмотров

  • НЧ – низкочастотные. До 100 показов в месяц.
  • СЧ – среднечастотные. От 101 до 1 000 показов.
  • ВЧ – высокочастотные. Более 1000 показов.

По статистике, 60-80% всех фраз и слов относятся к НЧ. Работать при продвижении с ними дешевле и проще. Поэтому вы должны составить максимально объемное ядро фраз, которое будет постоянно дополняться новыми НЧ. ВЧ и СЧ также не стоит игнорировать, но основной упор делайте на расширение списка низкочастотников.

Виды КЗ по типу поиска

  • Информационные нужны при поиске информации. «Как жарить картофель» или «сколько звезд на небе».
  • Транзакционные используются для совершения действия. «Заказать пуховый платок», «скачать песни Высоцкого»
  • Навигационные используются для поиска связанного с какой-то конкретной фирмой или привязкой к сайту. «Хлебопечь МВидео» или «смартфоны Связной».
  • Прочие - расширенный список, по которому невозможно понять конечную цель поиска. К примеру, запрос «торт Наполеон» – возможно, человек ищет рецепт его приготовления, а, возможно, хочет купить торт.

Как составить семантику

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

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

Сбор семантического ядра вручную

Яндекс Wordstat

  • Выберите регион веб-ресурса.
  • Введите ключевую фразу. Сервис выдаст вам количество запросов с данным ключевиком за последний месяц и список «родственных» терминов, которые интересовали посетителей. Имейте ввиду, что если вы вводите, к примеру, «купить окна», то получаете результаты по точному вхождению ключевика. Если вводите данный ключ без кавычек, то получаете общие результаты, и запросы типа «купить окна в воронеже» и «купить окно пластиковое» также будут отражены в данной цифре. Для сужения и уточнения показателя можно воспользоваться оператором «!», который ставится перед каждым словом: !купить!окна. Вы получите число, показывающее точную выдачу по каждому слову. Получится список типа: купить пластиковые окна, купить и заказать окна, при этом слова «купить» и «окна» будут отражаться в неизменном виде. Для получения абсолютного показателя по запросу «купить окна» следует применять следующую схему: вводим в кавычках «!купить!окна». Вы получите самые точные данные.
  • Соберите слова из левой колонки и проанализируйте каждое из них. Составьте начальную семантику. Обращайте внимание на правую колонку, содержащую КЗ, которые пользователи вводили до или после поиска слов из левой колонки. Вы найдете еще немало нужных фраз.
  • Пройдите по вкладке «История запросов». На графике вы сможете проанализировать сезонность, популярность фраз в каждом месяце. Неплохие результаты дает работа с поисковыми подсказками Яндекса. Каждый КЗ вводится в поисковое поле, и на основе всплывающих подсказок расширяется семантика.

Google-планировщик КЗ

  • Введите главный ВЧ запрос.
  • Выберите «Получить варианты».
  • Отберите самые релевантные варианты.
  • Повторите данной действие с каждой отобранной фразой.

Изучение сайтов-конкурентов

Используйте этот метод как дополнительный, чтобы определить правильность выбора того или иного КЗ. В этом вам помогут инструменты BuzzSumo, Searchmetrics, SEMRush, Адвсе.

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

Рассмотрим некоторые самые популярные сервисы.

  • Key Collector. Если вы составляете очень объемную семантику, то без этого инструмента вам не обойтись. Программа подбирает семантику, обращаясь к Яндекс Wordstat, собирает поисковые подсказки данного поисковика, фильтрует КЗ со стоп-словами, очень низкой частотой, дублированные, определяет сезонность фраз, изучает статистику счетчиков и соцсетей, подбирает релевантные страницы к каждому запросу.
  • SlovoEB. Бесплатный сервис от Key Collector. Инструмент подбирает ключевые слова, группирует и анализирует их.
  • Allsubmitter. Помогает подобрать КЗ, показывает сайты-конкуренты.
  • KeySO. Анализирует видимость веб-ресурса, его конкурентов и помогает в составлении СЯ.

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

  • Показатели частотности.
  • Большая часть КЗ должна быть НЧ, остальные - СЧ и ВЧ.
  • Релевантные поисковым запросам страницы.
  • Конкурентов в ТОП.
  • Конкурентность фразы.
  • Прогнозируемое количество переходов.
  • Сезонность и геозависимость.
  • КЗ с ошибками.
  • Ассоциативные ключи.

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

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

Составьте следующие списки: категории товаров или услуг (далее -ТУ), названия ТУ их бренды, коммерческие хвосты («купить», «заказать» и т.п.), синонимы, транслитерацию на латинице (или на русском соответственно), профессиональные жаргонизмы («клавиатура» – «клава» и т.п.), технические характеристики, слова с возможными опечатками и ошибками («оренбуржский» вместо «оренбургский» и т.п.), привязки к местности (город, улицы и т.п.).

При работе со списками ориентируйтесь на КЗ из договора по продвижению, структуру веб-ресурса, информацию, прайс-листы, сайты-конкуренты, опыт предшествующего SEO.

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

Сформируйте список стоп-слов и удалите неподходящие КЗ.

Сгруппируйте КЗ по релевантным страницам. Под каждый ключ подбирается наиболее релевантная страница или создается новый документ. Желательно данную работу проводить вручную. Для крупных проектов предусмотрены платные сервисы типа Rush Analytics.

Идите от большего к меньшему. Сначала распределите ВЧ по страницам. Затем то же самое проделайте с СЧ. НЧ можно добавить к страницам с распределенными по ним ВЧ и НЧ, а также подобрать для них индивидуальные страницы.
После анализа первых результатов работ мы можем увидеть, что:

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

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

Распространенные ошибки при работе с КЗ

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

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

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

Понравилась статья? Поделитесь с друзьями!
Была ли эта статья полезной?
Да
Нет
Спасибо, за Ваш отзыв!
Что-то пошло не так и Ваш голос не был учтен.
Спасибо. Ваше сообщение отправлено
Нашли в тексте ошибку?
Выделите её, нажмите Ctrl + Enter и мы всё исправим!