К постам Опубликовано: 2016-12-23

Регулярні вирази для SEO

Регулярні вирази є потужним інструментом в арсеналі seo-шника. Деякі фахівці, мимоволі зіштовхуються з регулярними виразами в .htaccess або Google Analytics, бояться цього незрозумілого мови, але як тільки починають розбиратися, входять у смак і усвідомлюють, як ці конструкції полегшують життя і стають потужним інструментом для роботи з текстовими даними. У цій статті простою мовою описані основи регулярних виразів і наведено приклади їх використання в SEO та аналітиці. Матеріал буде корисний всім, хто так чи інакше пов'язаний з обробкою даних в SEO.

Що таке регулярні вирази

Регулярний вираз (англ. Regular Expression або просто RegExp) це певна конструкція для пошуку входжень (чого б то не було) у текстовому рядку. За допомогою цього формального мови можна виокремлювати з тексту, наприклад, телефони, email-адреси, будь шматки тексту і так далі. Часто RegExp використовують програмісти при перевірці даних, що вводяться, або при написанні парсерів, але SEO-фахівцям доводиться стикатися з регулярками при роботі з Google Analytics, Яндекс.Метрикою, RewriteRule .htaccess або навіть у текстових редакторах для швидкого пошуку і заміни рядків.

Основи регулярних виразів

Розглянемо популярний приклад використання регулярних виразів для налаштування переадресації на сайті з версії "без www" на www-домен.

 

RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

Регулярні вирази тут виділені жирним. Що означають ці точки і інші знаки? Виглядає дуже заплутано. І щоб розібратися з цим, потрібно розуміти синтаксис RegExp.

«^» — карет, циркумфлекс або просто галочка. Початок рядка

Цей символ використовується для позначення початку рядка (якщо не використовується усередині конструкції «[ ]»). Наприклад, якщо ви хочете знайти всі ключові слова, які починаються на слово «купити», конструкція буде виглядати просто: ^купити. Без цього знаку будуть знайдені всі ключові слова, що містять слово «купити», не обов'язково на початку.

наприклад, ви можете використовувати це в розширених фільтрах Google Analytics.

Приклад використання регулярного виразу в Google Analytics

Ви можете заперечити: навіщо використовувати регулярки, там де можна обійтися без них? Фільтр Google Analytics є пункт «починається з». Я абсолютно згоден, і цей приклад навів лише для пояснення синтаксису, далі ми побачимо, що комбінація різних конструкцій вирішує завдання, які важко вирішити без використання регулярних виразів.

«$» — знак долара. Кінець рядка

На відміну від галочки, долар позначає кінець рядка. Вже зрозуміло, що конструкція москва$ знайде всі фрази, що закінчуються на слово «москва».

«.» — точка. Будь-який символ

Крапка позначає будь-який символ, але тільки один. Сама по собі точка використовується і зустрічається рідко, частіше разом з іншими конструкціями, наприклад, «.*».

«*» — знак множення, зірочка. Будь-яке число попередніх символів.

Зірочка означає будь-яке число символів (або групи символів), які записані перед цим знаком, у тому числі і відсутність цього символу.

Разом з попереднім символом «крапка» виходить зручна конструкція «.*», що означає будь-яку кількість будь-яких символів. Наприклад, вираз

 

RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

Вже стає більш зрозумілим, тут відбувається редирект будь сторінок на новий URL.

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

 

/companies/seo-studio?commented=1

Тут змінюється лише середня частина, а початок і кінець залишаються однаковими. Тому, знаючи вже перераховані елементи, можна скласти регулярний вираз і використовувати його в фільтрі:

 

^/companies/.*commented=1$

Отримаємо наступний звіт:

Вибірка певних сторінок в Google Analytics за допомогою Regular Expressions

Ще один корисний приклад використання цієї конструкції — закриття панелі управління WordPress .htaccess, відкриття її тільки для вашого IP-адреси:

 

Order Deny, Allow
Deny from All
Allow from 200.20.21.145

 

Де 200.20.21.145 це, наприклад, ваш IP адреса.

«+» — плюсик. Будь-яке додатне число попередніх символів.

Від попереднього знака «*» плюсик відрізняється тим, що символ обов'язково повинен зустрітися хоча б один раз.

«?» — знак питання. Необов'язкова зустрічальність останнього символу

Питальний знак вказує на те, що останній символ або група можуть зустрічатися в тексті, а можуть бути відсутніми (тобто, їх зустрічальність не обов'язкова). Зручно, коли ви не знаєте, наприклад, що буде на кінці адреси слеш чи ні:

 

^/articles/?$

Чи наприклад, коли ви шукайте ключові слова і враховуєте певні помилки:

 

купити лест?готель

Даний вираз знайде всі ключові слова вашої аудиторії, де зустрічалися фрази «купити сходи» і «купити сходи.

«( )» — круглі дужки. Групування конструкцій.

Аналогічно застосуванню математики, круглі дужки в регулярних виразах використовуються для групування. І вже для групи символів або правил можна зазначати інші правила. Крім цього, знайдені відповідності в дужках повертаються в окремі змінні $1, $2, і т. д. в залежності від порядкового номера групи.

Наприклад, нам потрібно перенаправити всіх користувачів з підпапки «domain.com/blog/» на піддомен blog.domain.com:

 

RewriteRule ^blog/(.*)$ http://blog.domain.com/$1 [R=301,L]

Тут правило ^blog/(.*)$ означає, що адреса починається з blog/, далі може йти якась послідовність символів (наприклад, адресу якоїсь статті в блозі). Всю цю послідовність ми об'єднуємо в дужки і далі використовуємо змінну $1, щоб зробити посторінковий редирект на піддомен.

«|» — вертикальна лінія. Оператор «АБО».

Вертикальна лінія позначає оператор АБО, коли нам потрібно перерахувати в пошуку певні варіанти. Припустимо, ми шукаємо ключові слова, де зустрічається слово «купити» або «куплю»:

 

купити|куплю

Чи ж хочемо подивитися статистику по декількох розділів — статей (/articles/) і прес-релізів (/pr/):

 

^/(articles|pr)/

Або візьмемо інший приклад. Припустимо, ми хочемо закрити від індексації пошуковими системами розділи admin, login, register і деякі інші. Щоб не лізти в код сайту, можна зробити це кількома рядками коду .htaccess, використовуючи HTTP-заголовок X-Robots-Tag, який розуміє більшість пошукових систем.

 

^/(admin|staff|login|register).*$">
Header set X-Robots-Tag "noindex, nofollow"

«[ ]» — квадратні дужки. Будь-який з перелічених символів.

У квадратних дужках можна перерахувати символи і один з них може зустрічатися у вихідному тексті. Якщо перший символ в цій конструкції – «^» (шапочка/галочка), то масив працює навпаки – символ не повинен співпадати з тим, що подані в дужках. Щоб не перераховувати деякі популярні послідовності, наприклад, весь алфавіт або ряд цифр, можна використовувати діапазон: 0-9 означає діапазон від 0 до 9, a-c — діапазон символів від «a» до «с» .

Припустимо, мені цікаво, як люди знаходили мій сайт, коли шукали явні інструкції (статті починаються на «10 кращих...» або «15 найбільш...»).

 

^[0-9]+

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

Налаштування фільтру з використанням регулярного виразу для пошуку определенн их статей

І побачу такі питання, на які можна відповісти в одній із статей, якщо її ще не було на блозі.

Список отриманих статей/ключових слів

Всього знайдено 140 варіантів, серед яких є дуже цікаві, на кшталт «100 топ сайтів копірайтингу» або «5 завдань на співбесіді в яндекс» :) Зробимо це посиланням.

«{ }» — фігурні дужки. Повторення символу кілька разів.

Фігурні дужки використовуються для вказівки, скільки саме раз повинен зустрічатися символ або група символів. Якщо вказано два числа в дужках, через кому, то це буде інтервалом «від і до».

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

 

14[0-9]{4}

Тут ми вказали 14, а далі послідовність чисел, що повторюється 4 рази, разом загальна довжина буде 6. Більш складний приклад:

 

www\.domain\.[a-z]{2,6}

Знайде всі доменні зони, основного домену, включаючи www.domain.ru і www.domain.travel.

Ще більш складний приклад — нам потрібна статистика по 2, 3 і 4-словникам окремо. Для цього в Google Analytics у звіті за ключовими словами використовуємо фільтр:

 

^[^\s]+(\s[^\s]+){2}$

Конструкція «\s означає пропуск (space), саме їм поділяються слова. Тут [^\s]+ вказує, що фраза повинна починатися з будь-якої кількості непробелов, далі йде пробіл і ще раз якесь слово. Останні два правила «пробіл + слово» можуть зустрічатися саме 2 рази (конструкція «( ){2}»). Так ми отримуємо список всіх трехсловников і статистику за ним.

Відображення тільки трехсловных запитів в Google Analytics

«\» — зворотний слеш. Екранування службових символів.

синтаксис регулярних виразів використовуються крапки, знаки запитання і інші, які також можуть бути цікаві для пошуку. У цьому випадку допомагає символ зворотного слешу. Наприклад, для пошуку точки, ми экранируем її — «\.», те ж саме з іншими символами.

Наприклад, Google Analytics у мене налаштована одна з цілей — використання внутрішнього пошуку. Людина використовує пошук, якщо я бачу в URL конструкцію «/?q=». У мене в налаштуваннях це виглядає так: «/\?q\=».

Використання регулярних виразів в налаштуванні цілей

Як ви помітили, в деяких прикладах вище я також використовував знак екранування.

Існують і інші символи для оперування регулярними виразами, повний список ви знайдете у Вікіпедії. Але перерахованого вище повинно вистачити для основних задач SEO-спеціаліста.

Ще кілька прикладів

— Пошук записів з посиланнями.

Мова SQL теж передбачає пошук по відповідності регулярному виразу. Наприклад, у вас є форум, і необхідно знайти всі пости, де зустрічається посилання. SQL-запит при цьому може виглядати наступним чином:

 

SELECT * FROM `posts` 
WHERE `content` RLIKE 'https?://([а-яа-z0-9\-]+\.)+[a-z]{2,7}'

— Заміна всіх абсолютних посилань в БД при переїзді сайту на інший домен

 

UPDATE `articles` SET 
`content`=REPLACE(`content`, 'old-domain.crimea.ua', 'new-domain.ru') 
WHERE `content` RLIKE 'old-domain\.com'

— Редирект в .htaccess з HTML-версії сайту на PHP

 

RedirectMatch /(.*)\.html$ /$1.php

— Редирект зі сторінки /index.php на кореневу «/» для позбавлення від дублів

 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://site.com.ua/ [R=301,L]

— Наявність UTM-мітки в URL

 

(?:\?|&)utm=([^&$]+)

— Додавання сегмента в Google Analytics для відстеження органічного трафіку

(клацніть для збільшення зображення)
Створення сегмента для відстеження органічного трафіку

— Виняток офісного трафіку з статистики Google Analytics

Налаштування фільтру для виключення впливу айпі офісу на статистику

— Блокування доступу до сканування сайту роботами Ahrefs і Open Site Explorer.

 

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^rogerbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^AhrefsBot
RewriteRule .* - [F]

Вище наведено достатньо не складні, але часто використовуються приклади, і тут зовсім не порушена Яндекс.Метрика, де також можна використовувати регулярні вирази. Для тестування своїх конструкцій і тренувань з RegExp можна використовувати зручний сервіс http://www.rubular.com, тут можна скачати і роздрукувати гарну пам'ятку з регулярними виразами, якщо ви вирішили до них підійти більш серйозно.