Короткие ссылки средствами modx
Запрос на помощь вылился в готовый результат.
Пример основной задачи — реализация сайта с кириллическим именем домена, и ссылками так же на кириллице. Типа: сайт.рф/каталог/ресурс
Выглядит красиво, доступно, запоминается, и говорят — полезно для СЕО. Но появилась проблемка, связанная с тем, что при попытке поделиться урлом, порой выводится неудобноваримая ссылка из кучи непонятных символов. Что нибудь типа такого:
Текущая задача — настроить короткие ссылки на латинице для каждого из ресурсов. При этом не использовать сторонние сервисы/сайты.
1. Нужен служебный домен на латинице, для примера site.ru
2. Нужен редирект на уровне веб-сервера со служебного домена на основной
Я реализовал для nginx таким образом (несмотря на то, что apache присутствует как бэкенд):
То есть создан отдельный раздел в конфиге, и запрос site.ru перенаправляет на домен сайт.рф
3. Настройка и вывод короткой ссылки на каждом ресурсе. Благодарность Максиму!
Создать плагин в modx со следующим содержанием
Плагин должен срабатывать на событие OnHandleRequest
В каждом ресурсе короткая ссылка выводится классическим способом:
В результате ссылка вида site.ru/9 перенаправит на ресурс с ссылкой вида сайт.рф/каталог/подкаталог/ресурс — в общем, на нужный ресурс с id 9.
Кстати говоря, короткие ссылки используются на многих сайтах с доменами на латинице. Это востребовано там, где много полезных материалов, длинные чпу, и есть потребность делиться ссылками, например через скайпы и телеграмы. Пример: russian.rt.com
Пример основной задачи — реализация сайта с кириллическим именем домена, и ссылками так же на кириллице. Типа: сайт.рф/каталог/ресурс
Выглядит красиво, доступно, запоминается, и говорят — полезно для СЕО. Но появилась проблемка, связанная с тем, что при попытке поделиться урлом, порой выводится неудобноваримая ссылка из кучи непонятных символов. Что нибудь типа такого:
...%D1%82%D1%83%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F/%D0%BF%D0%B5%...
Текущая задача — настроить короткие ссылки на латинице для каждого из ресурсов. При этом не использовать сторонние сервисы/сайты.
1. Нужен служебный домен на латинице, для примера site.ru
2. Нужен редирект на уровне веб-сервера со служебного домена на основной
Я реализовал для nginx таким образом (несмотря на то, что apache присутствует как бэкенд):
server {
server_name site.ru;
rewrite ^(.*) http://xn--80aswg.xn--p1ai$1 permanent;
}
То есть создан отдельный раздел в конфиге, и запрос site.ru перенаправляет на домен сайт.рф
3. Настройка и вывод короткой ссылки на каждом ресурсе. Благодарность Максиму!
Создать плагин в modx со следующим содержанием
$e = $modx->event;
if ($e->name == 'OnHandleRequest') {
if (is_numeric($_GET['q'])) {
$url = $modx->makeUrl($_GET['q'],'','','full');
if (!empty($url)) $modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
}
Плагин должен срабатывать на событие OnHandleRequest
В каждом ресурсе короткая ссылка выводится классическим способом:
http://site.ru/[[*id]]
В результате ссылка вида site.ru/9 перенаправит на ресурс с ссылкой вида сайт.рф/каталог/подкаталог/ресурс — в общем, на нужный ресурс с id 9.
Кстати говоря, короткие ссылки используются на многих сайтах с доменами на латинице. Это востребовано там, где много полезных материалов, длинные чпу, и есть потребность делиться ссылками, например через скайпы и телеграмы. Пример: russian.rt.com
Комментарии: 9
Вот так можно сделать ссылки типа sitename.ru/9:
$e = $modx->event;
if ($e->name == 'OnHandleRequest') {
if (is_numeric($_GET['q'])) {
$url = $modx->makeUrl($_GET['q'],'','','full');
if (!empty($url)) $modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
}
Отлично! Благодарю, всё летает!
У меня есть вот такой файлик, который позволяет большие числа переводить в 60-ричную систему для сокращения количества символов:
<?php
class SixtyCoder {
public $table = '0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ';
public function to60($number = 0) {
$number = (int) $number;
$output = '';
return $this->divide($number);
}
public function from60($letters = '0') {
$length = strlen($letters);
$number = 0;
for ($i = 0; $i < $length; $i++) {
$pos = strpos($this->table, $letters[$i]);
if ($pos === false) {
return 0;
}
$pow = $length - ($i+1);
$number = $number + $pos * pow (60, $pow);
}
return $number;
}
public function divide($number = 0, $letters = '') {
if ($number < 60) {
$letters = $this->getLetter($number) . $letters;
} else {
$rest = $number % 60;
$letters = $this->getLetter($rest) . $letters;
$number = ($number - $rest) / 60;
$letters = $this->divide($number, $letters);
}
return $letters;
}
public function getLetter($number) {
return substr($this->table, $number, 1);
}
}
$coder = new SixtyCoder();
$time = time();
echo 'Long: ' . $time;
$short = $coder->to60($time);
echo '
Short: ' . $short;
echo '
Long from short: ' . $coder->from60($short);
Благодарю!
Уверен пригодится
Уверен пригодится
С технической точки зрения может всё и в порядке, но для SEO это никуда не годится. Никогда не делайте так, если собираетесь продвигать сайт. Лучше некрасивая прямая ссылка, чем красивая ссылка с домена и адреса, который никогда не были в индексе и по сути никак не относятся к Вашему сайту.
Ведь 301й редирект это перенаправление со старого адреса страницы на новый. А Вы будете пытаться подсунуть поисковику редирект со страниц, которых никогда и не было. В лучшем случае, такие ссылки поисковые роботы не проиндексируют, в худшем — заподозрят вас в чёрном СЕО со всеми вытекающими последствиями.
Ведь 301й редирект это перенаправление со старого адреса страницы на новый. А Вы будете пытаться подсунуть поисковику редирект со страниц, которых никогда и не было. В лучшем случае, такие ссылки поисковые роботы не проиндексируют, в худшем — заподозрят вас в чёрном СЕО со всеми вытекающими последствиями.
Не хотелось бы разводить тут халивар на эту тему, поэтому, постараюсь покороче — мне кажется вы ошибаетесь…
Это ваши опасения или конкретный опыт? Что значит «заподозрят»? Что значит «никогда не было»? Ведь всё, что касается web когда-то отсутствовало, а потом появилось. А что значит «никак не относятся к Вашему сайту», если очень даже относятся — прямым редиректом?
301 редирект это 301 редирект, без разницы что было раньше а что позже. У того же Яндекса достаточно материалов о 301 редиректе, что бы опасаться последствий. Главное всё сделать правильно, а это на мой взгляд не сложно.
Допустим по всем соц-сетям появятся короткие ссылки имеющие отношение к боевому сайту. Что бы у робота исчезли все сомнения, достаточно в Robot.txt указать директиву host с указанием на главный домен.
Я никогда не пользовался биржами ссылок, но есть некоторое представление об их работе. Сильно сомневаюсь в ваших опасениях, имея перед глазами эти представления. Если бы вы были правы, короткие ссылки бы никто не использовал (тем более с использованием сторонних сервисов), или были бы тонны макулатуры на этот счёт, о которых бы мы знали.
Для многострадального СЕО на мой взгляд пока может быть только одна проблема, в данном случае — если бы короткие ссылки дублировали основные ссылки. Но так как будет редирект — всё в порядке!
Это ваши опасения или конкретный опыт? Что значит «заподозрят»? Что значит «никогда не было»? Ведь всё, что касается web когда-то отсутствовало, а потом появилось. А что значит «никак не относятся к Вашему сайту», если очень даже относятся — прямым редиректом?
301 редирект это 301 редирект, без разницы что было раньше а что позже. У того же Яндекса достаточно материалов о 301 редиректе, что бы опасаться последствий. Главное всё сделать правильно, а это на мой взгляд не сложно.
Допустим по всем соц-сетям появятся короткие ссылки имеющие отношение к боевому сайту. Что бы у робота исчезли все сомнения, достаточно в Robot.txt указать директиву host с указанием на главный домен.
Я никогда не пользовался биржами ссылок, но есть некоторое представление об их работе. Сильно сомневаюсь в ваших опасениях, имея перед глазами эти представления. Если бы вы были правы, короткие ссылки бы никто не использовал (тем более с использованием сторонних сервисов), или были бы тонны макулатуры на этот счёт, о которых бы мы знали.
Для многострадального СЕО на мой взгляд пока может быть только одна проблема, в данном случае — если бы короткие ссылки дублировали основные ссылки. Но так как будет редирект — всё в порядке!
мне кажется вы ошибаетесь
Я работаю в крупнейшей SEO компании России, поэтому Вам кажется. Знал что нельзя на таких сайтах поднимать эту тему. На этом и закончим, удачи.
goo.gl/ — укорачивать от Гугла
clck.ru/ — укорачиватель от Яндекса
Вот эти сервисы точно не имеют никакого отношения к любому моему сайту.
Ещё немного правильных терминов от Яндекса
«301 — постоянное перенаправление;»
«a.ru/index1.html -> b.ru/index2.html — межхостовое перенаправление»
yandex.ru/support/webmaster/robot-workings/managing-redirects.xml
И вообще — в данном случае произойдёт склейка доменов, и вес домена для коротких ссылок будет положительно влиять на вес основного домена. И короткие ссылки как раз нужны для того, что бы пользователи ими более активно делились. И это не единственный их плюс.
Короче — коротко не получилось у меня)
clck.ru/ — укорачиватель от Яндекса
Вот эти сервисы точно не имеют никакого отношения к любому моему сайту.
Ещё немного правильных терминов от Яндекса
«301 — постоянное перенаправление;»
«a.ru/index1.html -> b.ru/index2.html — межхостовое перенаправление»
yandex.ru/support/webmaster/robot-workings/managing-redirects.xml
И вообще — в данном случае произойдёт склейка доменов, и вес домена для коротких ссылок будет положительно влиять на вес основного домена. И короткие ссылки как раз нужны для того, что бы пользователи ими более активно делились. И это не единственный их плюс.
Короче — коротко не получилось у меня)
что-то мне подсказывает, что лучше для SEO стоит воспользоваться API(api_key) Гугла (или Яндекса, кому что нравиться) для формирования и подстановки этих ссылок :)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.