Как составить семантическое ядро для интернет-магазина: пошаговая инструкция. Настраиваем grub и запускаем ядро. Как расширить СЯ с помощью планировщика ключевых слов Google

UNIX-подобная операционная система интересна для разбора, а также для написания собственного ядра, которое выведет сообщение. Ну что, напишем?

UNIX-подобная операционная система и загрузка x86 машины

Что такое UNIX-подобная операционка? Это ОС, созданная под влиянием UNIX. Но прежде чем заняться написанием ядра для нее, давайте посмотрим, как машина загружается и передает управление ядру.

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

Теперь карта памяти чипсета гарантирует, что 0xFFFFFFF0 сопоставляется с определенной частью BIOS, а не с ОЗУ. Между тем, BIOS копирует себя в ОЗУ для более быстрого доступа. Это называется затенением (shadowing). Адрес 0xFFFFFFF0 будет содержать только инструкцию перехода к адресу в памяти, где BIOS скопировал себя.

Таким образом, код BIOS начинает свое выполнение. Сначала BIOS ищет загрузочное устройство в соответствии с настроенным порядком загрузочных устройств. Он ищет определенное магическое число, чтобы определить, является устройство загрузочным или нет (байты 511 и 512 первого сектора равны 0xAA55).

После того, как BIOS обнаружил загрузочное устройство, он копирует содержимое первого сектора устройства в оперативную память, начиная с физического адреса 0x7c00; затем переходит по адресу и выполняет только что загруженный код. Этот код называется системным загрузчиком (bootloader).

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

Все x86 процессоры стартуют в упрощенном 16-битном режиме, называемом режимом реальных адресов. Загрузчик GRUB переключается в 32-битный защищенный режим, устанавливая младший бит регистра CR0 равным 1. Таким образом, ядро ​​загружается в 32-разрядный защищенный режим.

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

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

  • x86 компьютер (разумеется)
  • Ассемблер NASM
  • ld (GNU Linker)
  • Исходный код

Ну и неплохо было бы иметь представление о том, как работает UNIX-подобная ОС. Исходный код можно найти в репозитории на Github.

Точка входа и запуск ядра

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

Как убедиться, что этот код послужит отправной точкой для ядра?

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

Вот код сборки:

;;kernel.asm bits 32 ;директива nasm - 32 bit section .text global start extern kmain ;kmain определена в C-файле start: cli ;блокировка прерываний mov esp, stack_space ;установка указателя стека call kmain hlt ;остановка процессора section .bss resb 8192 ;8KB на стек stack_space:

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

Вторая строка начинается с текстового раздела. Здесь мы разместим весь наш код.

global — еще одна директива NASM, служит для установки символов исходного кода как глобальных.

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

Функция start вызывает функцию kmain и останавливает CPU с помощью команды hlt. Прерывания могут пробудить CPU из выполнения инструкции hlt. Поэтому мы предварительно отключаем прерывания, используя инструкцию cli.

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

Ядро на C

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

/* * 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") { /* ascii отображение */ vidptr[i] = str[j]; vidptr = 0x07; ++j; i = i + 2; } return; }

* kernel.c

void kmain (void )

const char * str = "my first kernel" ;

unsigned int i = 0 ;

unsigned int j = 0 ;

/* этот цикл очищает экран*/

while (j < 80 * 25 * 2 ) {

/* пустой символ */

vidptr [ j ] = " " ;

/* байт атрибутов */

vidptr [ j + 1 ] = 0x07 ;

j = j + 2 ;

j = 0 ;

/* в этом цикле строка записывается в видео память */

while (str [ j ] != "\0" ) {

/* ascii отображение */

vidptr [ i ] = str [ j ] ;

vidptr [ i + 1 ] = 0x07 ;

i = i + 2 ;

return ;

Наше ядро ​​будет очищать экран и выводить на него строку «my first kernel».

Для начала мы создаем указатель vidptr, который указывает на адрес 0xb8000. Этот адрес является началом видеопамяти в защищенном режиме. Текстовая память экрана – это просто кусок памяти в нашем адресном пространстве. Ввод/вывод для экрана на карте памяти начинается с 0xb8000 и поддерживает 25 строк по 80 ascii символов каждая.

Каждый элемент символа в этой текстовой памяти представлен 16 битами (2 байта), а не 8 битами (1 байт), к которым мы привыкли. Первый байт должен иметь представление символа, как в ASCII. Второй байт является атрибутным байтом. Он описывает форматирование символа, включая разные атрибуты, например цвет.

Чтобы напечатать символ с зеленым цветом на черном фоне, мы сохраним символ s в первом байте адреса видеопамяти и значение 0x02 во втором байте.

0 — черный фон, а 2 — зеленый.

Ниже приведена таблица кодов для разных цветов:

0 - Black, 1 - Blue, 2 - Green, 3 - Cyan, 4 - Red, 5 - Magenta, 6 - Brown, 7 - Light Grey, 8 - Dark Grey, 9 - Light Blue, 10/a - Light Green, 11/b - Light Cyan, 12/c - Light Red, 13/d - Light Magenta, 14/e - Light Brown, 15/f – White.

0 - Black , 1 - Blue , 2 - Green , 3 - Cyan , 4 - Red , 5 - Magenta , 6 - Brown , 7 - Light Grey , 8 - Dark Grey , 9 - Light Blue , 10 / a - Light Green , 11 / b - Light Cyan , 12 / c - Light Red , 13 / d - Light Magenta , 14 / e - Light Brown , 15 / f –White .

В нашем ядре мы будем использовать светло-серые символы на черном фоне. Поэтому наш байт атрибутов должен иметь значение 0x07.

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

Во втором цикле while символы строки «my first kernel» записываются в кусок видеопамяти. Для каждого символа атрибутный байт содержит значение 0x07.

Таким образом, строка отобразится на экране.

Связующая часть

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

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

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

* link.ld

OUTPUT_FORMAT (elf32 - i386 )

ENTRY (start )

SECTIONS

0x100000 ;

Text : { * (. text ) }

Data : { * (. data ) }

Bss : { * (. bss ) }

Во-первых, мы устанавливаем выходной формат исполняемого файла как 32-битный исполняемый (ELF). ELF – стандартный формат двоичного файла для Unix-подобных систем на архитектуре x86.

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

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

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

Счетчик местоположения всегда инициализируется до 0x0 в начале блока SECTIONS. Его можно изменить, присвоив ему новое значение.

Как уже говорилось, код ядра должен начинаться с адреса 0x100000. Таким образом, мы установили счетчик местоположения в 0x100000.

Посмотрите на следующую строку .text: {*(.text)}

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

Таким образом, компоновщик объединяет все текстовые разделы объектных файлов в текстовый раздел исполняемого файла по адресу, хранящемуся в счетчике местоположения. Раздел кода исполняемого файла начинается с 0x100000.

После того, как компоновщик разместит секцию вывода текста, значение счетчика местоположения установится в 0x1000000 + размер раздела вывода текста.

Аналогично, разделы данных и bss объединяются и помещаются на значения счетчика местоположения.

Grub и Multiboot

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

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

GRUB загрузит ядро только в том случае, если оно соответствует Multiboot-спецификации.

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

Кроме того, этот заголовок должен содержать дополнительно 3 поля:

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

Итак, kernel.asm будет выглядеть таким образом:

;;kernel.asm ;nasm directive - 32 bit bits 32 section .text ;multiboot spec align 4 dd 0x1BADB002 ;магические числа dd 0x00 ;флаги dd - (0x1BADB002 + 0x00) ;контрольная сумма. мч+ф+кс должно равняться нулю global start extern kmain ;kmain определена во внешнем файле start: cli ;блокировка прерываний mov esp, stack_space ;указатель стека call kmain hlt ;остановка процессора section .bss resb 8192 ;8KB на стек stack_space:

; ; kernel . asm

; nasm directive - 32 bit

bits 32

section . text

; multiboot spec

align 4

dd 0x1BADB002 ; магическиечисла

dd 0x00 ; флаги

dd - (0x1BADB002 + 0x00 ) ; контрольнаясумма. мч+ ф+ ксдолжноравнятьсянулю

global start

extern kmain ; kmain определенавовнешнемфайле

start :

cli ; блокировкапрерываний

mov esp , stack _ space; указательстека

call kmain

hlt ; остановкапроцессора

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


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

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

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

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

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

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

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

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

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

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

Как создать семантическое ядро блога

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

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

И все таки, для блогов WordPress существует плагин All in One SEO Pack в котором следует прописать список ключевых слов характеризующих тематику Вашего блога. Этот плагин очень полезен для поискового продвижения Вашего блога. Так что, обязательно его поставьте и в админ панели настройте этот плагин.

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

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

В заголовке главной страницы пропишите название вашего блога и 1 - 2 ключевых слова по которым вы хотите выходить в топ.

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

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

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

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

Думаю сегодня я вам рассказал как составить семантическое ядро вашего блога и вашего сайта.

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

Ну а я с вами не прощаюсь дорогие друзья! До новых встреч в новых статьях!

Дальше я буду писать все больше о внутренней оптимизации, так как она очень важна. 80 % успешного продвижения зависит от внутренней оптимизации блога а 20% зависит от внешних факторов. Не спешите бежать на биржи и покупать ссылки на свой блог. Лучше сосредоточтесь на внутренней настройки вашего блога. Чтобы не пропустить полезные статьи о внутренней оптимизации не забудьте

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

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

Это перевод двух статей Арджуна Сридхарана:

Привет, мир! Давай напишем ядро, которое будет загружаться через 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 :

mov esp , stack_space

call kmain

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 [ j + 1 ] = 0x07 ;

j = j + 2 ;

j = 0 ;

while (str [ j ] != "\0" ) {

vidptr [ i ] = str [ j ] ;

vidptr [ i + 1 ] = 0x07 ;

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.

После того как компоновщик выдаст текстовую секцию, значение счетчика позиции будет 0x1000000 плюс размер текстовой секции. Точно так же секции 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 :

mov esp , stack_space

call kmain

section . bss

resb 8192

stack_space :

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

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

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

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

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

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

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

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

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

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

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

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

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

Полный исходный код ты можешь найти в репозитории автора на GitHub .

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

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

read_port :

mov edx , [ esp + 4 ]

in al , dx

write_port :

mov edx , [ esp + 4 ]

mov al , [ esp + 4 + 4 ]

out dx , al

Доступ к портам ввода-вывода осуществляется при помощи инструкций 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 [ IDT_SIZE ] ;

void idt_init (void )

unsigned long keyboard_address ;

unsigned long idt_address ;

unsigned long idt_ptr [ 2 ] ;

keyboard_address = (unsigned long ) keyboard_handler ;

IDT [ 0x21 ] . offset_lowerbits = keyboard_address & 0xffff ;

IDT [ 0x21 ] . selector = 0x08 ; /* KERNEL_CODE_SEGMENT_OFFSET */

IDT [ 0x21 ] . zero = 0 ;

IDT [ 0x21 ] . type_attr = 0x8e ; /* INTERRUPT_GATE */

IDT [ 0x21 ] . 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 [ 0 ] = (sizeof (struct IDT_entry ) * IDT_SIZE ) + ((idt_address & 0xffff ) << 16 ) ;

idt_ptr [ 1 ] = 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 , то есть значение, к которому мы добавляем номер линии, чтобы получить номер прерывания.

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

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

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

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

как создать семантическое ядро для сайта

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

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

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

Как вы понимаете я возьму за основу первые три сайта в выдаче Яндекс.

сезоны-года.рф
zeleneet.com
biofile.ru

Отбираем запросы конкурентов - автоматически

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

Добавляем нашего донора, а не наш сайт!

Как вы уже догадались я взял один из трёх сайтов, - вы же должны взять несколько. Жмём далее…

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

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

Отбираем НЧ СЧ и ВЧ запросы

На этом этапе нам поможет сервер, осторожно партнерская ссылка, зарегистрироваться в rookee.ru. Переходим на него и создаём новую рекламную кампанию используя сайт нашего конкурента.

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

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

Как видите, система нашла 299 запроса, но они меня не интересуют и я просто возьму их удалю и добавлю те 10, которые мне дал seopult на первом этапе. Кстати, один запрос должен оставаться, иначе не сможете все удалить.
У меня после удаления получилось так. Когда я добавлю основную базу запросов, я этот ключ удалю, чтоб он мне не мешал, так как он для меня не актуален. Теперь добавляем запросы, которые получили ранее.

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

Если у вас есть слова со значением ВК (высокая конкуренция) или СК (средняя конкуренция), то на первом этапе формирования ядра вам следует от них отказаться и выбрать только низкую конкуренцию.

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

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

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

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

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

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

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

P.S. Вы также можете получать мои новые статьи на почту просто подписавшись на rss рассылку и узнавать о моих секретах и методах первыми. А вы, как составляете семантическое ядро сайта? Напишите, мне о своем способе в комментариях, подискутируем.

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

Ответ банален - чтобы сайт «полюбили» поисковые машины. И чтобы при запросе пользователей по конкретным ключевым словам выдавали именно ваш ресурс.

И формирование семантического ядра – первый, но весьма важный и уверенный шаг на пути к цели!

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

Отметим, что в сети представлено несколько вариантов определения понятия семантического ядра (далее – СЯ).

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

В нашей статье приведен пример формирования СЯ для интернет-магазина постельного белья. Весь процесс разделен на пять последовательных этапов.

1) Собираем базовые запросы

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

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

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


Дабы не копировать все запросы вручную, рекомендуем использовать расширение Wordstat Helper, созданное специально для браузеров Mozilla Firefox и Google Chrome. Такое дополнение существенно упростит работу с подбором слов. Как оно работает – смотрите на скрине ниже.

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

2) Как расширить СЯ: три варианта

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

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

  • синонимы;
  • перефразирования.

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

Как расширить СЯ с помощью планировщика ключевых слов Google

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

После этого просто скачиваете полученные результаты.


Как расширить СЯ с помощью Serpstat (ex. Prodvigator)

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

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

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

  • ввести один запрос;
  • указать интересующий вас регион продвижения;
  • кликнуть по кнопке «Поиск»;
  • а когда он завершится – выбрать опцию «Поисковые запросы».


После этого кликните по кнопке «Экспорт таблицы».

Как расширить СЯ с помощью Key Collector/Словоёб

У вас большой магазин с огромным количеством товаров? В такой ситуации вам понадобится сервис Key Collector .

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

Скачайте приложение, перейдите в настройки Яндекс.Директ и введите логин/пароль от почтового ящика Яндекса.

После этого:

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

После этого приступайте к сбору СЯ из Wordstat.Yandex. Для этого:

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


Отметим, что Key Collector отличный инструмент для объемных, крупных проектов и с его помощью легко организовать сбор статистических данных по сервисам, анализирующим «работу» сайтов-конкурентов. Например, к таковым сервисам относятся следующие: SEMrush, SpyWords, Serpstat (ex. Prodvigator) и многие другие.

3) Удаляем лишние «ключи»

Итак, база сформирована. Объем собранных «ключей» — более чем солидный. Но если их проанализировать (в данном случае – просто внимательно почитать), выясниться, что далеко не все собранные слова точно соотносятся с тематикой вашего магазина. А потому по ним на сайт будут заходиться «не целевые» пользователи.

Такие слова нужно удалять.

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

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

Отметим следующие виды и типы слов, которые будут неактуальны для интернет-магазинов:

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

Теперь расскажем, как удалить все ненужные вам слова.

Сформируйте список

Открываем сервис Словоеб, в нем выбираем раздел «Данные», а там переходим во вкладку «Стоп-слова» и «вбейте» в нее отобранные вручную слова. Интересно, что записать слова можно, как вручную, так и просто подгрузить файл с ними (если вы таковой подготовили).


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

Быстрый фильтр

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

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

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

4) Группируем запросы

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

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

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

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

Тут вам на помощь снова придет все тот же сервис Словоеб и описанная выше опция Быстрого фильтра. Он поможет выполнить сортировку поисковых запросов по определенным категориям.

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

  • категории;
  • посадочной страницы и т.д.

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

Те фразы, что вам не нужны, просто выделите правой кнопкой мыши и удалите.


В правой части меню сервиса сделайте новую группу, назвав ее соответствующим образом. Например, наименованием бренда.

Чтобы перенести выбранные вами фразы в эту часть вкладки, необходимо выбрать строку Данные и кликнуть по надписи Добавить фразы. Подробнее – смотрите скрин.

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

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

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

  • Key Collector;
  • Rush-Analytics;
  • Just-Magic и другие.

Также имеется полностью бесплатный скрипт Devaka.ru. Кстати, обратите внимание, что часто приходится объеденять некоторые типы запросов.

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

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

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

  • высокочастотные;
  • низкочастотные;
  • среднечастотные;
  • и даже микро-низкочастотные.

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

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

Все перечисленные выше действия позволят вам сформировать четкую структуру, в которой будут иметься:

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

Как расширить семантическое ядро: альтернативный метод

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

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

  • Serpstat (ex. Prodvigator);
  • Ubersuggest;
  • Keyword Tool;
  • и прочие.

Ниже на скрине представлено, как пользоваться сервисом Продвигатор.

Что делать после прохождения нашей инструкции

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

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

Следующие шаги будут такими:

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

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

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

Чтобы не пропустить новые и полезные статьи, обязательно подпишитесь на нашу рассылку!

Вы еще не проходите тренинг, ? Запишитесь прямо сейчас и уже через 4 дня у вас будет свой сайт.

Если вы не сможете сделать его сами, мы сделаем его за вас!