Привіт, друзі. Хочу представити вашій увазі другу частину з циклу статей про засеошивание движка Datalife Engine. І сьогодні ми поговоримо про дуже пікантний момент — дублювання контенту, пов’язане з відображенням однієї і тієї ж сторінки за різними адресами url.

Давайте згадаємо одне з основних правил оптимізації сайту — сторінка повинна бути доступна тільки по одному url! На жаль, при розробці движка DLE, програмісти не сильно переймалися цим моментом і забили, а може не подумали, чи просто сподівалися, що ніхто не стане балуватися з адресами, а всі користувачі мережі, поширюючи наш контент через залишення зовнішніх посилань на форумах або соцмережах, будуть дотримуватися структуру нашого сайту і правильність адрес. Ага, як би не так…

А адже одного разу порушена посилання може призвести до розмноження таких «неправильних» посилань, які спричинять за собою появу «неправильних» сторінок, що однозначно згубно позначиться на нашому сайті!

І мета сьогоднішнього посту — запобігти появі таких «неправильних» сторінок, а так же позбутися від уже з’явилися. І найголовніше — треба зробити так, щоб «неправильні» посилання вели на потрібні (тобто «правильні») сторінки.

Пост оновлено 5 травня 2014 року:
Оновлені вносяться зміни в движок, додана підтримка нових версій движка.
Актуально для таких версій DLE: 7.x, 8.x, 9.x, 10.x!

Інші частини SEO-керівництва:
Частина 1, Оптимізація заголовків Title — http://alaev.info/blog/post/2373
Частина 3, Особливості внутрішньої оптимізації движка — http://alaev.info/blog/post/3294
Частина 4, Виправлення версії DLE 9.3, 9.4, 9.5, 9.6 — http://alaev.info/blog/post/3513

Для початку нам необхідно оцінити розмах трагедії, зрозуміти які і в якій кількості можуть з’явитися дублі.

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

Можливий дубль 301 Головна сторінка
Головна сторінка http://site.ru)
http://www.site.ru -> http://site.ru
http://site.ru/index.php -> http://site.ru
http://site.ru/page/1/ -> http://site.ru
Сторінка категорії (http://site.ru/category/)
http://site.ru/category -> http://site.ru/category/
http://site.ru/category/page/1/ -> http://site.ru/category/
Сторінка субкатегорії, якщо є вкладеність (http://site.ru/cat/subcat/)
http://site.ru/cat/subcat -> http://site.ru/cat/subcat/
http://site.ru/cat/subcat/page/1/ -> http://site.ru/cat/subcat/
http://site.ru/subcat/ -> http://site.ru/cat/subcat/
http://site.ru/subcat -> http://site.ru/cat/subcat/
http://site.ru/subcat/page/1/ -> http://site.ru/cat/subcat/
Сторінка материнської категорії, якщо є вкладеність (http://site.ru/cat/)
http://site.ru/cat -> http://site.ru/cat/
http://site.ru/cat/page/1/ -> http://site.ru/cat/
http://site.ru/subcat/cat/ -> http://site.ru/cat/
http://site.ru/subcat/cat -> http://site.ru/cat/
http://site.ru/subcat/cat/page/1/ -> http://site.ru/cat/
Сторінка повній новині, яка нехай належить категорії truecat (http://site.ru/truecat/123-news-name.html)
http://site.ru/truecat/123-bla-bla-bla-name.html -> http://site.ru/truecat/123-news-name.html
http://site.ru/123-news-name.html -> http://site.ru/truecat/123-news-name.html
http://site.ru/fakecat/123-news-name.html -> http://site.ru/truecat/123-news-name.html
http://site.ru/truecat/page,1,1,123-news-name.html -> http://site.ru/truecat/123-news-name.html

Як бачите, дублів дофіга і більше! І чим складніша структура сайту, тим більше вірогідність появи несподіванок. Так чи інакше, але прочитавши цей пост до кінця, ви зможете вирішити всі ці проблеми, а внутрішні дублі контенту вас ніколи більше не потривожать.
Тут дуже важливий момент про слово «ніколи» — мається на увазі, що після оновлення до нової версії движка, ви перевірите свій сайт на наявність проблем і при необхідності внесете всі правки!

Ще одне дуже важливе відступ! Перед внесенням правок перевірте версію встановленого у вас движка. Розробники з недавнього часу все-таки почали звертати увагу на наведені проблеми, а тому поступово їх виправляють. Так що деякі моменти вже вирішені в останніх версіях, і я про це пам’ятаю, і перед кожною правкою я буду акцентувати вашу увагу на те, для якої версії це актуально, а який ні.

На момент написання посту остання версія движка DLE 9.5. Важливо знати, що починаючи з версії 9.3 розробники вирішили деякі проблеми – позбавилися від можливого дублювання, пов’язаного з переглядом повній новини та деяких проблем з категоріями. У будь-якому випадку, я рекомендую всім і завжди оновлюватися до останньої версії.

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

Склейка дзеркал — вибираємо головне дзеркало www.site.ru або site.ru

Актуальність: Всі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Які проблеми вирішуємо:

  • Повне дублювання сайту за адресами http://site.ru і http://www.site.ru

Розкрити список правок

Відкриваємо файл .htaccess, який знаходиться в корені сайту (це там, де лежить основний index.php)

ЗНАХОДИМО:

RewriteEngine On

RewriteEngine On

НИЖЧЕ ДОДАЄМО:

(якщо в якості основного дзеркала вибрано http://site.ru)

### START Визначаємо головне дзеркало як site.ru (site.ru замінити на свій домен, наприклад alaev.info)
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
### END Визначаємо головне дзеркало

### START Визначаємо головне дзеркало як site.ru (site.ru замінити на свій домен, наприклад alaev.info)
RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
### END Визначаємо головне дзеркало

(якщо в якості основного дзеркала вибрано http://www.site.ru)

### START Визначаємо головне дзеркало як www.site.ru (www.site.ru замінити на свій домен, наприклад www.alaev.info)
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
### END Визначаємо головне дзеркало

### START Визначаємо головне дзеркало як www.site.ru (www.site.ru замінити на свій домен, наприклад www.alaev.info)
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
### END Визначаємо головне дзеркало

Сховати список правок

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

Прибираємо index.php і index.html адреси головної сторінки

Актуальність: Всі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Які проблеми вирішуємо:

  • Дублювання головної сторінки за адресами http://site.ru, http://site.ru/index.php і http://site.ru/index.html

Розкрити список правок

Відкриваємо файл .htaccess, який знаходиться в корені сайту (це там, де лежить основний index.php)

В КІНЦІ ДОДАЄМО:

### Редиректи з index.php або index.html на сайт
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html)\ HTTP/
RewriteRule .* / [R=301,L]

### Редиректи з index.php або index.html на сайт
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html)\ HTTP/
RewriteRule .* / [R=301,L]

Сховати список правок

Тепер не буде виникати найпоширенішого дубля головної сторінки, а так само дублів категорій та інших розділів.

Склеюємо адреси сторінок /page/1/ з основними адресами для головної сторінки категорій

Актуальність: Всі версії DLE. Перевірено на 7.x, 8.x, 9.x, 10.x.

Які проблеми вирішуємо:

  • Дублювання головної сторінки сайту за адресами http://site.ru/page/1/ і http://site.ru/
  • Дублювання основної (першої) сторінки категорії за адресами http://site.ru/category/page/1/ і http://site.ru/category/

Розкрити список правок

Відкриваємо файл .htaccess, який знаходиться в корені сайту (це там, де лежить основний index.php)

ЗНАХОДИМО:

### END Визначаємо головне дзеркало

### END Визначаємо головне дзеркало

НИЖЧЕ ДОДАЄМО:

### START Редирект з першої сторінки на основну
RewriteBase /
RewriteRule ^(.*)page/1(/|)$ $1 [R=301,L]
### END Редирект з першої сторінки на основну

### START Редирект з першої сторінки на основну
RewriteBase /
RewriteRule ^(.*)page/1(/|)$ $1 [R=301,L]
### END Редирект з першої сторінки на основну

Для підстраховки або якщо варіант з .htaccess не спрацював. Відкриваємо файл /engine/engine.php

ЗНАХОДИМО:

if (($subaction == “showfull” or $subaction == “addcomment”) and ((! isset ( $category ) or $category == “”))) {

if (($subaction == “showfull” or $subaction == “addcomment”) and ((! isset ( $category ) or $category == “”))) {

ВИЩЕ ДОДАЄМО:

if ( (intval($_GET[‘cstart’]) == 1) && (strpos($_SERVER[‘REQUEST_URI’], ‘/page/1’) !== false) ) {
$first_page_url = str_replace ( “/page/1”, “”, $_SERVER[‘REQUEST_URI’] );
header(“HTTP/1.0 301 Moved Permanently”);
header(“Location: $first_page_url);
die(“Redirect”);
}

if ( (intval($_GET[‘cstart’]) == 1) && (strpos($_SERVER[‘REQUEST_URI’], ‘/page/1’) !== false ) {
$first_page_url = str_replace ( “/page/1”, “”, $_SERVER[‘REQUEST_URI’] );
header(“HTTP/1.0 301 Moved Permanently”);
header(“Location: $first_page_url”);
die(“Redirect”);
}

Сховати список правок

Тепер при введенні неправильного адреси з /page/1/ на кінці, буде здійснюватися редірект на основну сторінку.

Усуваємо плутанину з категоріями їх вкладеністю і слешем / на кінці

Актуальність: Тільки версії DLE 8.2-9.2. Для DLE 9.3 і вище необхідно ОБОВ’ЯЗКОВО у налаштуваннях движка активувати опцію «Обробляти невірні URL ЧПК».

Які проблеми вирішуємо:

  • Дублювання сторінок категорій за адресами без слеша і зі слешем на кінці
  • Дублювання сторінок пагинации за адресами без слеша і зі слешем на кінці
  • Дублювання сторінок категорій і підкатегорій при порушенні ієрархії(вкладеності)

Розкрити список правок

Відкриваємо файл /engine/engine.php (дивимося в районі 170-180 рядка)

ЗНАХОДИМО:

if ($do == “cat” and $category != and $subaction == ) {

if ($do == “cat” and $category != “and $subaction == “) {

НИЖЧЕ ДОДАЄМО:

//рішення проблеми з категоріями, редирект на вірний урл, додавання слеша в кінець
if( $config[‘allow_alt_url’] == “yes” AND $category_id AND $view_template != “rss”) {
$re_cat = get_url( $category_id );
if ($re_cat != $_GET[‘category’] OR substr ( $_SERVER[‘REQUEST_URI’], 1, 1 ) != ‘/’ ) {
$re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
$re_url = reset ( $re_url );
header(“HTTP/1.0 301 Moved Permanently”);
header(“Location: {$re_url}{$re_cat}/”);
die(“Redirect”);
}
}
//рішення проблеми з категоріями, редирект на вірний урл, додавання слеша в кінець

//рішення проблеми з категоріями, редирект на вірний урл, додавання слеша в кінець
if( $config[‘allow_alt_url’] == “yes” AND $category_id AND $view_template != “rss”) {
$re_cat = get_url( $category_id );
if ($re_cat != $_GET[‘category’] OR substr ( $_SERVER[‘REQUEST_URI’], – 1, 1 ) != ‘/’ ) {
$re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
$re_url = reset ( $re_url );
header(“HTTP/1.0 301 Moved Permanently”);
header(“Location: {$re_url}{$re_cat}/”);
die(“Redirect”);
}
}
//рішення проблеми з категоріями, редирект на вірний урл, додавання слеша в кінець

Сховати список правок

Тепер не буде ніякої плутанини в до ах адрес категорій і підкатегорій. Для всіх неправильних варіантів буде здійснюватися 301-редирект на основну правильну сторінку.

Усуваємо проблему з дублюванням повної новини за різними адресами

Актуальність: Тільки версії DLE 8.2-9.2. Для DLE 9.3 і вище читайте виправлення помилок нових версій DLE 9.3, 9.4, 9.5, 9.6.

Які проблеми вирішуємо:

  • Дублювання новин, розбитих на сторінки, коли існували дві однакові сторінки за адресами site.ru/page,1,123-news_name.html і site.ru/123-news_name.html
  • Дублювання новин з коментарями, розбитими на сторінки, коли існували дві однакові сторінки за адресами site.ru/page,1,1,123-news_name.html і site.ru/123-news_name.html
  • Дублювання новини, коли здійснювався перехід на неіснуючу сторінку коментарів
  • Дублювання новини за помилку в назві новини, наприклад, site.ru/123-bla_bla_news_name.html — спрацює редирект на правельный адреса site.ru/123-news_name.html

Розкрити список правок

Відкриваємо файл /engine/modules/show.full.php

ЗНАХОДИМО:

} else {
$full_link = $config[‘http_home_url’] . “index.php?newsid=” . $row[‘id’];
$print_link = $config[‘http_home_url’] . “engine/print.php?newsid=” . $row[‘id’];
$short_link = “”;
}

} else {
$full_link = $config[‘http_home_url’] . “index.php?newsid=” . $row[‘id’];
$print_link = $config[‘http_home_url’] . “engine/print.php?newsid=” . $row[‘id’];
$short_link = “”;
}

ВИЩЕ ДОДАЄМО:

//обробка неправильного alt-name та 301 редирект
$true_link = $config[‘http_home_url’] . substr ($_SERVER[‘REQUEST_URI’], 1);
if ($row[‘allow_comm’]) { //якщо можна коменти
$conf_comm_by_page = intval( $config[‘comm_nummers’] ); // ком на стор з налаштувань
$news_comm_num = $row[‘comm_num’]; // загальна кількість комм
$comm_page_count = @ceil( $news_comm_num / $conf_comm_by_page );
if ( ($comm_page_count >= 2) && (intval($_REQUEST[‘cstart’]) >= 2) ) $full_link = $link_page . intval($_REQUEST[‘cstart’]) . “,” . $news_name . “.html”;
}
if ($news_page >= 2) $full_link = $link_page . $news_name . “.html”;
if ($true_link != $full_link) {
header(‘HTTP/1.1 301 Moved Permanently’);
header (‘Location: ‘ . $full_link);
die();
}
//обробка неправильного alt-name та 301 редирект

//обробка неправильного alt-name та 301 редирект
$true_link = $config[‘http_home_url’] . substr ($_SERVER[‘REQUEST_URI’], 1);
if ($row[‘allow_comm’]) { //якщо можна коменти
$conf_comm_by_page = intval( $config[‘comm_nummers’] ); // ком на стор з налаштувань
$news_comm_num = $row[‘comm_num’]; // загальна кількість комм
$comm_page_count = @ceil( $news_comm_num / $conf_comm_by_page );
if ( ($comm_page_count >= 2) && (intval($_REQUEST[‘cstart’]) >= 2) ) $full_link = $link_page . intval($_REQUEST[‘cstart’]) . “,” . $news_name . “.html”;
}
if ($news_page >= 2) $full_link = $link_page . $news_name . “.html”;
if ($true_link != $full_link) {
header(‘HTTP/1.1 301 Moved Permanently’);
header (‘Location:’ . $full_link);
die();
}
//обробка неправильного alt-name та 301 редирект

Сховати список правок

Отже, тепер при будь-яких помилках введення до а новини сайту буде здійснюватися редирект на вірну адресу — головним ідентифікатором у цьому випадку працює id новини.

Ось і все, друзі! Всі проблеми, що здавалися такими масштабними зважилися не такими вже й великими правками файлів движка. Тепер можете перевірити будь-які проблемні адреси із зазначених мною на початку посту — все буде оброблятися так, як ми цього хочемо, а правильніше сказати, все буде оброблятися так як це полюблять пошуковики, тепер у нас ніколи не трапиться дублів!

Прибираємо слеш в кінці url — редирект зі сторінки зі слешем в кінці на сторінку без слеша

А тепер самий спірний пункт сьогоднішнього керівництва – розбираємося з дублями пов’язаними з наявністю слеша / в кінці адрес категорій і сторінок пагинации.

УВАГА!!! Правки, наведені нижче, застосовні ТІЛЬКИ ДЛЯ ВЕРСІЙ DLE 8.x 9.0 і 9.2. Якщо ви спробуєте застосувати правки для будь-яких інших версій, це повністю виведе з ладу ваш сайт!

Все, що написано нижче, призначене для тих, хто пішов минулого редакції мого керівництва і прибрав слеші в кінці, щоб позбутися від дублів.
Цей же мануал призначений для тих, кому просто не подобається слеш в кінці. Такі ж бувають, так?

У будь-якому разі, якщо ви зібралися прибрати слеш, треба буде зробити все, що описано вище (крім пункту «Усуваємо плутанину з категоріями їх вкладеністю і слешем / на кінці»), а так само внести ще декілька змін.

Обробляємо категорії:

Розкрити список правок

Відкриваємо файл /engine/engine.php і знаходимо:

if ($do == “cat” and $category != and $subaction == ) {

if ($do == “cat” and $category != “and $subaction == “) {

НИЖЧЕ додаємо:

//рішення проблеми з категоріями, редирект на вірний урл, видалення слеша в кінець
if( $config[‘allow_alt_url’] == “yes” AND $category_id AND $view_template != “rss”) {
$re_cat = get_url( $category_id );
if ($re_cat != $_GET[‘category’] OR substr ( $_SERVER[‘REQUEST_URI’], 1, 1 ) == ‘/’ ) {
$re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
$re_url = reset ( $re_url );
header(“HTTP/1.0 301 Moved Permanently”);
header(“Location: {$re_url}{$re_cat});
die(“Redirect”);
}
}
//рішення проблеми з категоріями, редирект на вірний урл, видалення слеша в кінець

//рішення проблеми з категоріями, редирект на вірний урл, видалення слеша в кінець
if( $config[‘allow_alt_url’] == “yes” AND $category_id AND $view_template != “rss”) {
$re_cat = get_url( $category_id );
if ($re_cat != $_GET[‘category’] OR substr ( $_SERVER[‘REQUEST_URI’], – 1, 1 ) == ‘/’ ) {
$re_url = explode ( “index.php”, strtolower ( $_SERVER[‘PHP_SELF’] ) );
$re_url = reset ( $re_url );
header(“HTTP/1.0 301 Moved Permanently”);
header(“Location: {$re_url}{$re_cat}”);
die(“Redirect”);
}
}
//рішення проблеми з категоріями, редирект на вірний урл, видалення слеша в кінець

Сховати список правок

Тепер зробимо перевірку всіх адрес на наявність слеша в кінці, і якщо він є — робимо 301 редирект на сторінку без слеша.

Розкрити список правок

Відкриваємо наш улюблений .htaccess і знаходимо:

### END Визначаємо головне дзеркало

### END Визначаємо головне дзеркало

НИЖЧЕ додаємо:

### START Прибираємо слеш в кінці
RewriteRule ^(.+)/$ $1 [R=301,L]
### END Прибираємо слеш в кінці

### START Прибираємо слеш в кінці
RewriteRule ^(.+)/$ $1 [R=301,L]
### END Прибираємо слеш в кінці

Сховати список правок

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

Прибираємо слеші з URL категорій, що генеруються движком:

Розкрити список правок

Відкриваємо файл /engine/modules/functions.php і шукаємо Функцію function get_categories ($id)

Знаходимо рядок:

if( $config[‘allow_alt_url’] == “yes” ) $list = \”. $config[‘http_home_url’] . get_url( $id ) . “/\”>{$cat_info[$id][‘name’]}”;

if( $config[‘allow_alt_url’] == “yes” ) $list = “{$cat_info[$id][‘name’]}”;

Замінюємо на:

if( $config[‘allow_alt_url’] == “yes” ) $list = \”. $config[‘http_home_url’] . get_url( $id ) . \”>{$cat_info[$id][‘name’]}”;

if( $config[‘allow_alt_url’] == “yes” ) $list = “{$cat_info[$id][‘name’]}”;

Знаходимо рядок:

if( $config[‘allow_alt_url’] == “yes” ) $list = \”. $config[‘http_home_url’] . get_url( $parent_id ) . “/\”>{$cat_info
[$parent_id][‘name’]}”
. ” » “ . $list;

if( $config[‘allow_alt_url’] == “yes” ) $list = “{$cat_info
[$parent_id][‘name’]}” . “» ” . $list;

Замінюємо на:

if( $config[‘allow_alt_url’] == “yes” ) $list = \”. $config[‘http_home_url’] . get_url( $parent_id ) . \”>{$cat_info
[$parent_id][‘name’]}”
. ” » “ . $list;

if( $config[‘allow_alt_url’] == “yes” ) $list = “{$cat_info
[$parent_id][‘name’]}” . “» ” . $list;

Приховати цей список правок і розкрити наступний

Прибираємо слеші з URL пагинации, що генеруються движком:

Розкрити список правок

Відкриваємо файл: /engine/modules/show.short.php

Знаходимо рядок:

$prev_page = $url_page . “/”;

$prev_page = $url_page . “/”;

Замінюємо на:

$prev_page = $url_page . “”;

$prev_page = $url_page . “”;

Знаходимо рядок:

$prev_page = $url_page . “/page/” . $prev . “/”;

$prev_page = $url_page . “/page/” . $prev . “/”;

Замінюємо на:

$prev_page = $url_page . “/page/” . $prev . “”;

$prev_page = $url_page . “/page/” . $prev . “”;

Знаходимо:

$pages .= \”. $url_page . “/\”>$j;

$pages .= “$j “;

Замінюємо:

$pages .= \”. $url_page . \”>$j;

$pages .= “$j “;

Знаходимо:

$pages .= \”. $url_page . “/page/” . $j . “/\”>$j;

$pages .= “$j “;

Замінюємо:

$pages .= \”. $url_page . “/page/” . $j . \”>$j;

$pages .= “$j “;

Знаходимо:

if( $config[‘allow_alt_url’] == “yes” ) $pages .= \”. $url_page . “/\”>1
\”nav_ext\”>{$lang[‘nav_trennen’]}
;

if( $config[‘allow_alt_url’] == “yes” ) $pages .= “1
{$lang[‘nav_trennen’]} “;

Замінюємо:

if( $config[‘allow_alt_url’] == “yes” ) $pages .= \”. $url_page . \”>1
\”nav_ext\”>{$lang[‘nav_trennen’]}
;

if( $config[‘allow_alt_url’] == “yes” ) $pages .= “1
{$lang[‘nav_trennen’]} “;

Знаходимо:

$pages .= \”. $url_page . “/\”>$j;

$pages .= “$j “;

Замінюємо:

$pages .= \”. $url_page . \”>$j;

$pages .= “$j “;

Знаходимо:

$pages .= \”. $url_page . “/page/” . $j . “/\”>$j;

$pages .= “$j “;

Замінюємо:

$pages .= \”. $url_page . “/page/” . $j . \”>$j;

$pages .= “$j “;

Знаходимо:

if( $config[‘allow_alt_url’] == “yes” ) $pages .= $nav_prefix . \”. $url_page .
“/page/{$enpages_count}/\”>{$enpages_count};

if( $config[‘allow_alt_url’] == “yes” ) $pages .= $nav_prefix . “{$enpages_count}”;

Замінюємо:

if( $config[‘allow_alt_url’] == “yes” ) $pages .= $nav_prefix . \”. $url_page .
“/page/{$enpages_count}\”>{$enpages_count};

if( $config[‘allow_alt_url’] == “yes” ) $pages .= $nav_prefix . “{$enpages_count}”;

Знаходимо:

$next = $url_page . ‘/page/’ . $next_page . ‘/’;

$next = $url_page . ‘/page/’ . $next_page . ‘/’;

Замінюємо:

$next = $url_page . ‘/page/’ . $next_page . ;

$next = $url_page . ‘/page/’ . $next_page . “;

Приховати цей список правок і розкрити наступний

Прибираємо слеші з URL профілів користувачів, що генеруються движком:

Розкрити список правок

Відкриваємо файл: /engine/modules/profile.php

Знаходимо рядок:

if( $config[‘allow_alt_url’] == “yes” ) $link_profile = $config[‘http_home_url’] . “user/” . urlencode( $row[‘name’] ) . “/”;

if( $config[‘allow_alt_url’] == “yes” ) $link_profile = $config[‘http_home_url’] . “user/” . urlencode( $row[‘name’] ) . “/”;

Замінюємо на:

if( $config[‘allow_alt_url’] == “yes” ) $link_profile = $config[‘http_home_url’] . “user/” . urlencode( $row[‘name’] );

if( $config[‘allow_alt_url’] == “yes” ) $link_profile = $config[‘http_home_url’] . “user/” . urlencode( $row[‘name’] );

Приховати цей список правок і розкрити наступний

Прибираємо слеші з URL тегів, що генеруються движком:

Розкрити список правок

Відкриваємо файл: /engine/modules/show.short.php

Знаходимо:

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = \”. $config[‘http_home_url’] . “tags/” . urlencode(
$value ) . “/\”>” . $value . “”;

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = “” . $value . “”;

Замінюємо:

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = \”. $config[‘http_home_url’] . “tags/” . urlencode(
$value ) . \”>” . $value . “”;

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = “” . $value . “”;

Відкриваємо файл: /engine/modules/tagscloud.php

Знаходимо:

$tags[] = \”.$config[‘http_home_url’].“tags/”.urlencode($value[‘tag’]).“/\” class=\”{$value[‘size’]}\” title=\”.$lang
[‘tags_count’].” “.$value[‘count’].\”>”.$value[‘tag’].“”;

$tags[] = “”.$value[‘tag’].””;

Замінюємо:

$tags[] = \”.$config[‘http_home_url’].“tags/”.urlencode($value[‘tag’]).\” class=\”{$value[‘size’]}\” title=\”.$lang
[‘tags_count’].” “.$value[‘count’].\”>”.$value[‘tag’].“”;

$tags[] = “”.$value[‘tag’].””;

Знаходимо:

$tpl->result[‘tags_cloud’] .=

\”“.$config[‘http_home_url’].“tags/\”>”.$lang[‘all_tags’].“”;

$tpl->result[‘tags_cloud’] .= “

“.$lang[‘all_tags’].””;

Замінюємо:

$tpl->result[‘tags_cloud’] .=

\”“.$config[‘http_home_url’].“tags\”>”.$lang[‘all_tags’].“”;

$tpl->result[‘tags_cloud’] .= “

“.$lang[‘all_tags’].””;

Знаходимо:

$tags[] = \”.$config[‘http_home_url’].“tags/”.urlencode($value[‘tag’]).“/\” class=\”{$value[‘size’]}\” title=\”.
$lang[‘tags_count’].” “.$value[‘count’].\”>”.$value[‘tag’].“”;

$tags[] = “”.$value[‘tag’].””;

Замінюємо:

$tags[] = \”.$config[‘http_home_url’].“tags/”.urlencode($value[‘tag’]).\” class=\”{$value[‘size’]}\” title=\”.
$lang[‘tags_count’].” “.$value[‘count’].\”>”.$value[‘tag’].“”;

$tags[] = “”.$value[‘tag’].””;

Відкриваємо файл: /engine/modules/show.custom.php

Знаходимо:

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = \”. $config[‘http_home_url’] . “tags/” . urlencode( $value ) .
“/\”>” . $value . “”;

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = “” . $value . “”;

Замінюємо:

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = \”. $config[‘http_home_url’] . “tags/” . urlencode( $value ) .
\”>” . $value . “”;

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = “” . $value . “”;

Відкриваємо файл: /engine/modules/show.full.php

Знаходимо:

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = \”. $config[‘http_home_url’] . “tags/” . urlencode(
$value ) . “/\”>” . $value . “”;

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = “” . $value . “”;

Замінюємо:

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = \”. $config[‘http_home_url’] . “tags/” . urlencode(
$value ) . \”>” . $value . “”;

if( $config[‘allow_alt_url’] == “yes” ) $tags[] = “” . $value . “”;

Відкриваємо файл: /engine/engine.php

Знаходимо:

if ($config[‘allow_alt_url’] == “yes”) $s_navigation .= ” » \”. $config[‘http_home_url’] . “tags/\”>” . $lang
[‘tag_cloud’] . ” » “ . $tag;

if ($config[‘allow_alt_url’] == “yes”) $s_navigation .= “» ” . $lang
[‘tag_cloud’] . “» ” . $tag;

Замінюємо:

if ($config[‘allow_alt_url’] == “yes”) $s_navigation .= ” » \”. $config[‘http_home_url’] . “tags\”>” . $lang
[‘tag_cloud’] . ” » “ . $tag;

if ($config[‘allow_alt_url’] == “yes”) $s_navigation .= “» ” . $lang
[‘tag_cloud’] . “» ” . $tag;

В черговий раз відкриваємо .htaccess

Знаходимо:

# висновок окремому тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([09]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]

# висновок окремому тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]

Замінюємо:

# висновок окремому тегу
RewriteRule ^tags$ index.php?do=tags [L]
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([09]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]

# висновок окремому тегу
RewriteRule ^tags$ index.php?do=tags [L]
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]

Приховати цей список правок

Ну ось і все! Велику роботу ми з вами виконали, однак. Але воно того варте.

Я ще раз хочу звернути увагу на всі зміни пов’язані з убиранием слеша на кінці.

  • Якщо ви продаєте посилання з сайту, я не рекомендую робити зміни, так як всі продані посилання зі сторінок категорій/теги/пагинации відпадуть. Так як все ж сторінки зі слешем та без нього – різні сторінки.
  • Якщо ви одного разу зробите ці зміни, то в майбутньому вам доведеться весь час робити при оновленні движка. Так як в противному випадку знову будуть з’являтися сторінки з слешем на кінці.
  • Насправді, як би це все страшно не звучало і не виглядало – це нормально і не шкідливо.
  • Якщо ви не користуєтеся тегами, то ви можете позбавити себе від великого обсягу роботи, пов’язаної з їх переробкою. В такому разі, все, що нижче заголовка «Прибираємо слеші з тегів генеруються рушієм», можна ігнорувати.
  • Вступ всіх змін вимагає часу. Це пов’язано з переіндексацією сайту пошуковими системами. Так що терпіння, друзі, тільки терпіння. Для великих сайтів терпіння вимірюється 1-2 місяцями.
  • Будь ласка, зверніть увагу! Пост періодично оновлюється, так що деякі коментарі можуть ввести вас в оману. З обережністю ставитеся до стороннім варіантів правок, описаним в коментарях.

    З повагою, Олександр Алаєв