Марафон стандарт

10,262 просмотра

Регулярные выражения являются мощным инструментом в арсенале 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-адреса:

<FilesMatch ".*">
Order Deny, Allow
Deny from All
Allow from 200.20.21.145
</FilesMatch>

Где 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, который понимают большинство поисковых систем.

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

«[ ]» — квадратные скобки. Любой из перечисленных символов.

В квадратных скобках можно перечислить символы и один из них может встречаться в искомом тексте. Если первый символ в этой конструкции – «^» (шапочка/галочка), то массив работает наоборот – символ не должен совпадать с тем, что перечислены в скобках. Чтобы не перечислять некоторые популярные последовательности, например, весь алфавит или ряд цифр, можно использовать диапазон: 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?://([а-яa-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, а здесь можно скачать и распечатать хорошую памятку по регулярным выражениям, если вы решили к ним подойти более серьезно.

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

  • 0 Нет
  • 32 Да
  • Мне понравилось!

Если вам понравилась статья, вы можете подписаться на RSS или E-mail рассылку. Для получения обновлений по электронной почте, введите ваш e-mail адрес в эту форму (Доставка от FeedBurner):