Регулярні висловлювання – це корисний інструмент, який спрощує життя багатьом SEO-спеціалістам. Іноді можна зіткнутися з регулярними виразами в .htaccess або Google Analytics, і спочатку все здається дуже незрозумілим і заплутаним, але як тільки починають розбиратися, смакують і усвідомлюють, як ці конструкції полегшують життя і стають потужним інструментом для роботи з текстовими даними.
У цьому блозі ми простою мовою пояснимо, що таке Regex або регулярні вирази, наведемо приклади та покажемо, як застосувати на практиці. Матеріал буде корисний усім, хто так чи інакше пов'язаний з обробкою даних у 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.
«^» — карет, циркумфлекс чи просто галочка. Початок рядка
Цей символ використовується для позначення початку рядка (якщо не використовується всередині конструкції "[]"). Наприклад, ви хочете знайти повідомлення email, рядок теми якого починається зі слова "купити", конструкція виглядатиме просто: ^купити. Без цього знака будуть знайдені всі ключові слова, що містять слово "купити", не обов'язково спочатку.
Наприклад, ви можете використовувати це у розширених фільтрах Google Analytics.
Ви можете заперечити: навіщо використовувати регулярні вирази, де можна обійтися без них? У фільтрах Google Analytics є пункт "починається з". Ми абсолютно згодні, і цей приклад навели лише для пояснення синтаксису, далі побачимо, що комбінація різних конструкцій виконує завдання, які важко розв’язати без використання регулярних виразів.
«$» — знак долара. Кінець рядка
На відміну від галочки, долар позначає кінець рядка. Вже зрозуміло, що конструкція Київ знайде всі фрази, що закінчуються на слово «київ».
«.» — крапка. Будь-який символ
Крапка позначає будь-який символ, але лише один. Сама по собі точка використовується і трапляються рідко, найчастіше разом з іншими конструкціями, наприклад, ". *".
«*» — знак множення, зірочка. Будь-яке число попередніх символів
Зірочка позначає будь-яку кількість символів (або групи символів), які записані перед цим знаком, у тому числі відсутність цього символу. Разом із попереднім символом «точка» виходить зручна конструкція «.*», що означає будь-яку кількість будь-яких символів. Наприклад, вираз
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
Вже стає зрозумілішим, тут відбувається редирект будь-якої зі сторінок на новий URL.
«+» — Плюс. Будь-яке додатне число попередніх символів.
Від попереднього знака "*" плюс відрізняється тим, що символ обов'язково має трапитися хоча б один раз.
«?» — знак питання. Необов'язкова зустрічність останнього символу
Знак питання вказує на те, що останній символ або група можуть траплятися в тексті, а можливо ні (тобто їх зустрічальність не обов'язкова).
Зручно, коли ви не знаєте, наприклад, чи буде на кінці адреси скісна риска чи ні:
^/articles/?$
Або, наприклад, коли ви шукаєте ключові слова і враховуєте певні помилки:
купити сх?оди
Цей вираз знайде всі ключові слова вашої аудиторії, де трапляються фрази «купити сходи» та «купити сходи».
«( )» — круглі скобки. Угруповання конструкцій.
Аналогічно до застосування в математиці, круглі дужки в регулярних виразах використовуються для угруповання. І вже для групи символів чи правил можна вказувати інші правила.
Наприклад, нам потрібно перенаправити всіх користувачів з підпапки «domain.com/blog/» на піддомен blog.domain.com:
RewriteRule ^blog/(.*)$ http://blog.domain.com/$1 [R=301,L]
Тут правило ^blog/(.*)$ означає, що адреса починається з blog/, далі може йти якась послідовність символів (наприклад, адреса якоїсь статті у блозі).
«|» — вертикальна лінія. Оператор "АБО".
Вертикальна лінія позначає оператор АБО, коли нам потрібно перерахувати у пошуку певні варіанти. Допустимо, ми шукаємо ключові слова, де трапляється слово «купити» або «куплю»:
купити|куплю
Або ж хочемо подивитися статистику за декількома розділами — статтями (/articles/) та пресреліз (/pr/):
^/(articles|pr)/
Або візьмемо інший приклад. Допустимо, ми хочемо закрити від індексації пошуковими системами розділи admin, login, register та деякі інші.
Щоб не лізти в код сайту, можна зробити це декількома рядками коду в .htaccess, використовуючи HTTP-заголовок X-Robots-Tag, який найчастіше розуміють пошукові системи.
Header set X-Robots-Tag "noindex, nofollow"
Найвідоміші та широко використовувані пошукові системи (Google, Yandex, Bing, DuckDuckGo)найчастіше розуміють директиви, що забороняють. Але в різних країнах іноді використовують локальні пошукові системи, які можуть не сприймати, наприклад інформацію про індексування через HTTP-заголовки.
Перед тим як оптимізувати сайт під той чи інший регіон, варто дізнатися, які системи використовують місцеві жителі та вивчити особливості роботи з ними.
«[ ]» — квадратні дужки. Будь-який із перелічених символів.
У квадратних дужках можна перерахувати символи та один з них може траплятися в тексті. Якщо перший символ у цій конструкції – «^» (шапочка/галочка), то масив працює навпаки – символ не має сходитися з тим, що перераховані у дужках.
Щоб не перераховувати деякі популярні послідовності, наприклад весь алфавіт або ряд цифр, можна використовувати діапазон: 0-9 означає діапазон від 0 до 9, a-c — діапазон символів від «a» до «с» .
Припустимо, мені цікаво, як люди знаходили сайт, коли шукали явні інструкції (статті починаються на «10 найкращих…» або «15 самих…»).
^[0-9]+
Тут ми побачимо, що багато хто запитував 301 редирект, але це не те, що ми шукали, тому в розширеному фільтрі ми виключимо все, що містить 301.
"{ }" - фігурні дужки. Повторення символу кілька разів.
Фігурні дужки використовуються для вказівки, скільки разів має символ або група символів. Якщо вказано два числа в дужках, через кому, це буде інтервалом «від і до».
Наприклад, щоб знайти в тексті поштовий індекс, довжина якого становить 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 ми налаштували одну з цілей використання внутрішнього пошуку.
Людина використовує пошук, якщо бачу в URL конструкцію «/?q=».
У налаштуваннях це виглядає так: "/\?q\=".
Є інші символи для оперування регулярними виразами, повний список ви знайдете в Вікіпедії. Але перерахованого вище має вистачити для основних завдань SEO-фахівця.
Де SEO-фахівець може використати RegEx?
Google Analytics
Google Analytics вважається одним з основних інструментів SEO.
Google Аналітика підтримує регулярні висловлювання, що дає змогу створювати більш гнучкі визначення для фільтрів, цілей, сегментів, аудиторій, груп контенту, груп каналів тощо.
Дуже часто аналіз поведінки та шляхи користувачів на сайті допомагає знайти нові та ефективні методи SEO-просування сайту. RegEx можна використовувати для сегментування найпопулярніших сторінок та подальшого аналізу популярності груп сторінок.
Наприклад, використання RegEx для сегментації сторінок дає змогу аналізувати трафік та відмови на основі типів контенту у найбільшому масштабі, ніж під час використанні традиційних операторів.
Google Search Console
Визначення інтенту користувача - важливе завдання SEO-фахівця, і регулярні висловлювання допомагають сегментувати задані за основним наміром користувачів, тобто визначити причину, з якої щось шукає. Це найважливіший компонент будь-якої стратегії цифрового маркетингу.
RegEx найчастіше використовується для брендового та небрендового аналізу. Використовуючи RegEx для вказівки шаблонів та зіставлення, це можна сегментувати в пару кліків.
Більше лайфхаків GSC ви знайдете в цій статті:
Google Search Console: як додати сайт та лайфхаки для SEO - блог Idea Digital Agency
Шаблони RegEx можна використовувати для сегментації аудиторії на основі того, що вони думали та що шукали, коли знайшли ваш сайт.
Також шаблони можна використовувати для розбивки URL-адрес з допомогою фільтрів RegEx, щоб ви могли зрозуміти, куди йде трафік і що рухається. Намір, з яким клієнти знаходять сайт, відповідає тому, яку сторінку вони потрапляють.
Ранжування
RegEx можна використовувати для сегментації ранжування на основі типів сторінок для URL із найвищим рейтингом для ключового слова.
Використання тих же шаблонів RegEx що і в GSC можливе для аналізу ранжування за сегментами ключових слів, наприклад, як пошукова видача показує ранжування для брендових та небрендових ключових слів.
Аудит сайту у краулері
RegEx можна використовувати для створення шаблонів, які допомагають зіставити рядок чи текст. Під час аудиту сайту, його можна використовувати для:
Сегментації просканованих сторінок на основі шаблонів URL для керування аналізом сканування для великої групи сторінок на корпоративному сайті.
Пошук тексту з сайтів під час сканування.
Аналіз логів
Регулярні висловлювання також допомагають аналізувати файли сканування вашого сайту пошуковими роботами. Файли логів зазвичай розбиваються та аналізуються на основі User Agent для різних роботів пошукових систем.
Оскільки log файли для великих сайтів можуть містити велику кількість сторінок, використання шаблонів RegEx для сегментації просканованих URL-адрес спрощує загальний аналіз, і дає змогу виконувати фільтрацію на основі складних критеріїв.
Приклади використання Regex в інструментах SEO-спеціаліста
Приклад використання регулярних виразів у Search Console
Наприклад, ми шукаємо всі згадки про коронавірус в запитах:
(?i)([ck]ovid|корон[ао]\s?вірус)
Заданий запит знайде усі збіги без урахування регістру таких фраз kovid, covid, коронавірус, коронірус, корона вірус, короно вірус.
Або ми шукаємо, за якими запитами користувачі знаходять заклад зі сфери гастрономії під назвою fairy house:
(?i)(кафе|ресторан|бар)\s(f[ae]ir[yi]|фе[ий]ри|сказочный)\s?(h[ao]u[sz]e*|хау[зс]|дом)
З допомогою цього запиту ми знайдемо купу варіацій назви від бару fairy house або кафе фейріхаус до ресторану казковий будинок з урахуванням різних можливих помилок користувача.
Перебір символів у дужках [ ] йде алфавітом. У прикладі вище [ЗС] коректно працюватиме, а ось [СЗ] буде відбирати тільки варіанти з літерою "с".
Приклад використання в Google Analytics
Наприклад, якщо потрібно виключити статистику про відвідування сайту вашими співробітниками, ви можете налаштувати для представлення фільтр з регулярним виразом, в якому будуть визначені всі IP-адреси компанії. Допустимо, це діапазон 198.51.100.1 – 198.51.100.25. Щоб не вводити кожну з 25 IP-адрес, створюйте регулярний вираз виду 198\.51\.100\.\d*, що відповідає всьому діапазону.
Якщо вам потрібен фільтр, що включає задані по кампанії тільки з двох міст, ви можете створити регулярний вираз вигляду Дніпро (Київ) (Дніпро або Київ).
Закриття панелі управління WordPress у .htaccess, відкриття її тільки для вашої IP-адреси
Order Deny, Allow
Deny from All
Allow from 200.20.21.145
Де 200.20.21.145 це, наприклад, ваша IP адреса.
Виділяємо небрендовий пошуковий трафік
Допустимо, у вас є інтернет-магазин, який називається "goodshop.ru". З допомогою Google Analytics ви хотіли б відокремити пошуковий трафік за запитами, які не містять назви вашого магазину, від брендового пошукового трафіку.
Відстеження динаміки змін не брендованого трафіку - один зі способів оцінювання ефективності заходів із SEO-оптимізації сайту. Для вирішення цього завдання можна створити в Google Analytics персональний звіт із призначеним фільтром, який відсіюватиме брендові запити. Різних варіантів написання назви вашого магазину може бути дуже багато (не забудьте про помилки та неправильну розкладку клавіатури). Використання регулярного виразу позбавить необхідності плодити поля фільтра для кожного з варіантів.
Регулярний вираз
goodshop|гудшоп|good shop|гуд шоп|good-shop|пщщвырщз
Спецсимволи, що використовуються:
| - символ діє за принципом логічного оператора АБО
Формуючи цей регулярний вираз, ми просто перераховуємо всі основні можливі варіанти запитів, що стосуються назви вашого магазину, для винятку їхнього зі звіту. І не забудьте встановити тип відповідності на "Регулярний вираз" під час налаштуваннях фільтра.
Вибираємо певну категорію сторінок на сайті
Іноді щодо статистики за взаємодією відвідувачів зі змістом сайту необхідно виділити певну групу сторінок щодо аналізу. Наприклад, порівняти за показниками залучення сторінки з певного розділу каталогу. Нехай у нас є сайт із продажу різних електронних гаджетів. На сайті є розділ мобільних телефонів з трирівневою ієрархією:
1-ий рівень - головна сторінка підкаталогу мобільних телефонів:
/catalog/mobile/
2-ий рівень — зібрані мобільні телефони певних брендів:
/catalog/mobile/apple
/catalog/mobile/samsung
/catalog/mobile/htc
3-ий рівень - безпосередньо картки товарів:
/catalog/mobile/apple/iphone5
/catalog/mobile/samsung/galaxys3
/catalog/mobile/htc/desirev
Нам необхідно у звіті за змістом Google Analytics виділити лише сторінки карток товарів.
Регулярний вираз
/catalog/mobile/.+/.+
Спецсимволи, що використовуються:
. — позначає будь-який символ: розділовий знак, букву, цифру.
+ - означає кількість повторень попереднього символу: 1 раз і більше.
В такому випадку, поєднання спец.символів .+ позначає будь-який рядок, що складається хоча б з одного символу довільного. Маючи чітку структуру сайту, ми знаємо, що картка URI товару складається з чотирьох фрагментів, розділених слешем.
Чітко поставити в регулярному вираженні нам необхідно лише перші два з них, тому що нам необхідні сторінки лише з розділу мобільних телефонів.
А проте ми знаємо, що у картці товару мобільного телефону обов'язково присутні ще дві частини: бренд та модель. Їхнього ми задаємо з допомогою використання двох комбінацій .+, розділених слешем.
Так ми визначили шаблон адреси сторінки картки товару, який копіюємо в поле фільтра звіту.
Відстежуємо виконання цільових дій на сайті
Іноді регулярні вирази можуть стати в пригоді під час налаштуванні цілей у Google Analytics. Візьмемо як приклад сайт школи іноземних мов, яка пропонує своїм слухачам курси з чотирьох іноземних мов. На сайті є форма заявки, яку відвідувачі можуть надсилати із зазначенням іноземної мови для вивчення.
Водночас відвідувачі можуть вибирати понад однієї мови як бажаної для вивчення. Керівництво проєкт поставило собі завдання дізнатися, як часто відвідувачі обирають понад однієї мови. Відповідно, необхідно настроїти ціль у Google Analytics. Після надсилання заявки відображається сторінка з одним із таких URI.
/order?lang=eng
/order?lang=eng&esp
/order?lang=eng&esp&ita
/order?lang=eng&esp&ita&fra
Очевидно, що в налаштуваннях мети необхідно вказати регулярний вираз, який буде відповідати трьом останнім URI.
Регулярний вираз
/order\?lang=.{3}&
Спецсимволи, що використовуються:
{ } — у фігурних дужках можна вказати кількість повторень попереднього символу. Відповідно, комбінація символів .{3} означає послідовність будь-яких трьох символів. У нашому випадку, три символи – це позначення мови. Не забуваймо екранувати знак питання, який також є спецсимволом регулярних виразів.
У такий спосіб, регулярне вираження буде відповідати всім URI, в яких після знака йдуть три символи з таким знаком амперсанда. Задані сторінки та відображаються в тих випадках, коли у відправленій формі вказано понад однієї мови. Що потрібно було відстежити.
Як перевірити, що регулярний вираз складено правильно
Щоб уникнути помилок під час використанні регулярних виразів, можна перед використанням протестувати їх, застосувавши розширений фільтр у будь-яких звітах аналітики.
А також можна перевірити регулярні вирази на тестовій вибірці з допомогою спеціальних інструментів. Рекомендуємо використовувати сайт Regex Pal або розширення для браузера RegExp Tester.
Для тих хто тільки починає освоювати регулярні висловлювання, а також досвідчених фахівців, які хочуть перевірити свої навички використання RegEx конструкцій, дуже рекомендуємо відвідати цей сайт. Тут ви можете попрактикуватися у складанні регулярних виразів в ігровій формі.