Re: Pan SEO - расширение для оптимизации форума PunBB
No, it is free extension.
How much is the paid version?
You are not logged in. Please login or register.
No, it is free extension.
How much is the paid version?
PunBB, No, tell us what you're hiding …
Добрый день. Возникла проблема. После включения в настройках файла sitemap, сам файл не создаётся. В чем может быть проблема?
Заранее спасибо
@Nakamoto, попробуй руками пустой создать. В директории форума естественно и права 644 сделай.
$matches[2]
sitemap.xml - такой файл.
@kirpich, пробовал, не пишет ничего внутрь(
проверяем права на корневую директорию public_html или home, обычно 700 достаточно
@PunBB, все нормально) права стояли, попробовал после галочки и сохранения написать сообщение) sitemap сгенерировался)
Здравствуйте! Можно в ручную добавлять метатеги к темам?
Только описание для разделов и главной страницы.
Было какое то другое расширение для вставки ключевиков, но на самом деле это уже давно не актуально. Поисковики и сами неплохо находят ключевые слова на страницах форума
$matches[2]
Посмотрите на оффоруме pun_tags, но оно для 1.4.2, не уверен пойдет ли на 1.4.4
Поисковики и сами неплохо находят ключевые слова на страницах форума
Яшенька просит description и даже ругается когда их нет
@kirpich, я подразумевал вставку для метатегов KEYWORDS, это уже давно не актуально. Для DESCRIPTION есть расширение Topic Description, ищите на гитхабе, может еще осталось. Но опять же, я не уверен, что то расширение вставляет описание темы в сам метатег DESCRIPTION.
$matches[2]
Вот, нашел на гитхабе версию для 1.4.2, но смотря на код в манифесте, так и не обнаружил реализацию метатегов.
Нужно будет добавлять в manifest.xml хук с запросом в бд описания темы находя ее по ID топика.
@PunBB, да вроде тут кто-то на форуме выкладывал готовое решение, я проверял-работает. Генерит из первых строк темы
$matches[2]
Вот нашел у себя в будуаре
Манифест
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">
<!--
/**
*
* @copyright Copyright (C) 2009 PunBB
* @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
* @package vb_description
*/
-->
<extension engine="1.0">
<id>vb_description</id>
<title>Description Generator</title>
<version>1.0.1</version>
<description>Auto create description tag from the content in the topic.</description>
<author>Vb</author>
<minversion>1.4.2</minversion>
<maxtestedon>1.4.2</maxtestedon>
<install>
</install>
<uninstall>
</uninstall>
<hooks>
<hook id="hd_head"><![CDATA[
//include functions file
require_once $ext_info['path'].'/functions.php';
if (FORUM_PAGE === 'viewtopic') {
if (defined('FORUM_ALLOW_INDEX')){
$string = preparing(get_first_post($cur_topic['first_post_id'],325));
if (mb_strlen($string) > 75){
$forum_head['descriptions'] = '<meta name="description" content="'.$string.'" />';
}
}}
]]></hook>
</hooks>
</extension>
functions.php
<?php
/**
*
* @copyright Copyright (C) 2009 PunBB
* @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
* @package vb_description
*/
/**
* Получение текста первого поста по номеру топика.
* @param Intager $topicId - номер топика.
*/
function get_first_post($topicId) {
global $forum_db;
$que = array(
'SELECT' => 'p.message',
'FROM' => 'posts AS p',
'WHERE' => 'p.id='.$topicId,
'LIMIT' =>0, 1
);
$sult = $forum_db->query_build($que) or error(__FILE__, __LINE__);
$re = $forum_db->fetch_assoc($sult);
return ($re['message']);
}
/**
*Приведение к человекочитаемому виду переданного текста.
* @param String $str - передаваемый текст.
*/
function FormatDescription ($str) {
$str = trim(strip_tags(str_replace(array('[',']'), array('<','>'), $str)));
$rules = array(
'/(«|»|„|“|”|"|“|”)/iu' => '"', //Не наши кавычки убираем
'/(–|−|–|−|—|—|—)/iu' => '-', //Не наши тире убираем
'/([,.;:?!]*)\s*[\r\n]+/' => '.$1',//если в конце строки знака нет, считаем ее концом предложения, ставим точку.
'/(.)$/' => '$1.',// Точка в конце
'/([,.;:?!-])+/iu' => '$1', //знаки не должны повторяться
'/\s*[-]\s+|\s+[-]\s*/iu' => ' — ', //дефис обрамленный пробелами - длинное тире
'/\s+([,.;:?!\-\)\}\]])/iu' => '$1', //перед знаком не должно быть пробела
'/([-\(\{\[])\s+/iu' => '$1', //после знака не должно быть пробела
'/([,.;:?!\)\}\]])/iu' => '$1 ', //после знака должен быть пробел
'/\"\s*([^"]+)\s*\"/iu'=> ' «$1» ', //Расставляем Ёлки
'/»\s([,.;:?!-])/iu'=> '»$1', //после кавычки нет пробела, только если там знак
'/(\s|\t)+|\"/iu' => ' ',//Два и более пробелов = один пробел.
'/^\s+|\s+$/iu' => '',// Убираем пробел с хвоста и с головы и оставшиеся кавычки
'/\s+([0-9]{2})[\s:.,!?-]+([0-9]{2})(\s+|[.?!,:]|$)/iu' => ' $1:$2$3', // время две группы по две цифры
'/([a-z0-9а-я])\.\s(ru|com|рф|net|org|info[^a-zа-я])/iu' => '$1.$2', // адреса
'/\s*([,.;:?!\-\)\}\]])/iu' => '$1', //еще раз перед знаком не должно быть пробела
);
return (preg_replace (array_keys($rules), $rules, $str));
}
/**
*Подготовка текста для метатега Description.
* @param String $str - обрабатываемый текст.
* @param Intager $limit - Номинальая длина тега.
*/
function preparing($str, $limit = 300) {
$str = trim(mb_substr($str, 0, intval($limit*1.5)));
$str = FormatDescription($str);
$pos = mb_strrpos($str, '. '); // определяем позиция последнего пробела
$str = trim(mb_substr($str, 0, $pos +1)); // обрезаем переменную по определенно выше позиции, плюс точка.
return ($str);
}
?>
Как скачать?
Как скачать?
Спасибо.
Здравствуйте. Я установил модуль Pan Seo и в настройках отметил пункт Create file sitemap.xml. Но что-то не могу ее найти. Прописываю в адресной строке http://mysite.ru/sitemap.xml и получаю сообщение: The requested URL was not found on this server. Подскажите, пожалуйста, где находится карта сайта? И еще такой вопрос, сейчас просматривал папку Pan Seo и нашел там файл 404.php. Это уже готовая страница ошибок? Она работает? Или нужно как-то дополнительно подключать?
Если не создается файл , то возможно на сервере нет соответствующих прав на запись. Трясите хостера, пусть настраивает, он за это денежку получает.
А где он должен создаваться, в корневой папке? Может потому что категории пока еще не создавал, его нет? Несколько статей только у меня на форуме. Или это не имеет значения? И по 404.php, подскажите, пожалуйста.
Включите опцию в расширении seo.
Затем создайте новую тему и файл sitemap.xml должен появиться в корне сайта.
404 страница - тоже включите опцию и если файл 404.php не создан в корневой директории то скопируйте его туда. Затем пройдите по ложному адресу, чтобы протестить...
Скопировал 404.php в корневую папку и в модуле прописал адрес: http://mysite.ru/404.php. Но страница не открывается. Просто пишет: The requested URL was not found on this server. Адрес неправильно прописал?
Сделайте необходимые изменения в htaccess файле согласно инструкции
https://punbb.softplaza.net/t-183.html
@eduard-kuznetsov, просто сделай руками пустой файл sitemap.xml в корне форума, должно сработать.
Продолжаю проверку-установку-тестирование замечательных расширений разработки от многоуважаемого админа PanBB (олды поймут)
Ставлю на версию 1.4.2 поставилось хорошо и вот что по работе данного расширения:
1. С включенной опцией "Meta tag canonical Enable meta tag canonical." в коде форума не появляется долгожданного кода:
<link rel="canonical" там появляются <link rel="prev" "first" и так далее. Возможно это делается 301 редиректом, когда
с / и без теперь шлёт и открывает страницы исключительно со слешем в конце.
каноникал с меня требует Яндекс.Вебмастер, присылая письма:
Страница дублирует уже представленную в поиске страницу https://site/topic/70142. Укажите роботу предпочтительный адрес с помощью 301 редиректа или атрибута rel="canonical" Хотя вот перешёл сегодня по ссылке Яндекса про каноникал, а ничего там про использование этого тега нету. Статья на Яндекс про canonical вот такая верная https://yandex.ru/support/webmaster/rob … nical.html Яндекс тоже может очепятаться)
2. Теперь при включенном расширении, страницы например с описанием запрета регистрации на форуме (временно закрыта регистрация) кидает на 404 страницу.
Такое же выдает, если ищешь темы или сообщения от пользователя на форуме и их у него 0. НО САМОЕ НЕ ПРИЯТНОЕ теперь когда хочешь найти других участников с таким же IP запрос вида https://site/get_host/6736575/ так же кидает на 404 страницу. Во всех случаях, не важно есть совпадения или нет. Вот попробовал напрямую запрос сделать вида https://site/admin/users.php?show_users=188.XX.XX.XX то и при включенном расширении информацию показывается. Давно лишний клик этот get_host делает. Да он там может показать какой провайдер, но список участников писавших с этого адреса ищет по запросу выше.
При чём в Настройках её просто нету, а она автоматом защита и только с отключением расширения перестает кидать на 404.php
Поправить бы, вариант простой это только для гостей врубать эту умную опцию (боты под гостями на форуме, но никак с отключенной регистрацией не решает проблему. Там писать должно - Временно регистрация на форуме закрыта)
3. Если включить Sitemap у меня тем в разы больше, чем рекомендованных не более 50 тыс тем, то форум начинает сильно задумываться при отправке постов, вместо обычных 0,3-0,5 с на размещение, время отправки поста занимает секунд 5-6. Так что имейте ввиду, если включаю эту опцию проверьте у себя становится ли такая задержка при размещении или редактировании постов на форуме.
4. (Page 1)It removes the TITLE - Page 1. Опция ясная, но разве не проще убрать сразу со всех. Если я правильно понимаю, то при использовании rel="canonical" все страницы темы становится одной темой и уже не важно, какой там тайтл, да и вообще его видят только поисковые роботы. То есть указываешь Например <link rel="canonical" href="https://site/topic/94965/" /> и такой линк на всех страницах этой темы. Таких как https://site/topic/94965/page/52/ и https://site/topic/94965/page/10/ и так далее. По логике Яндекса он склеивает все посты в одну тему и этот массив информации как одну большую статью видит. Что думаю очень хорошо, уже давно не занимаюсь SEO, но как помню Яндекс ОЧЕНЬ-ОЧЕНЬ любил массивные стартовые страницы и сейчас, если посмотреть в выдаче много сайтов со страницы статьями, да сверху делают навигацию "якорями" на нужные абзацы, чтобы пользователю не потерялся при прочтении и навигацию имел до массива информации. Но такая длинная страница имеет больший вес, а уж с форумом, где сообщения может быть очень коротким и содержать условно "+" или смайлик он и так выкенет эту страницу как "не значимую для поиска".
$matches[2] Был не прав. Посмотрел популярные форумы РуНета у них все же canonical задаётся у каждой страницы свой, а не везде задаётся первая страницы. Видимо Яндекс не умеет так склеивать еще информацию.
Вот такие мысли и практический опыт работы с данным расширением.
Благодарю, что хватило терпения дочитать до конца.
Возможно есть ошибки в хуке hd_head.php:
<?php
if (!defined('FORUM')) die();
if (FORUM_PAGE == 'index')
{
if (!empty($forum_config['o_pan_seo_meta_title']))
$forum_head['title'] = '<title>'.forum_htmlencode($forum_config['o_pan_seo_meta_title']).'</title>';
if (!empty($forum_config['o_pan_seo_meta_description']))
{
$o_pan_seo_meta_description = str_replace("\n", ' ', $forum_config['o_pan_seo_meta_description']);
$forum_head['descriptions'] = '<meta name="description" content="'.forum_htmlencode($o_pan_seo_meta_description).'" />'."\n";
}
}
else if (FORUM_PAGE == 'viewforum')
{
if ($forum_config['o_pan_seo_meta_title_forum'] == '1')
$forum_head['title'] = '<title>'.forum_htmlencode($cur_forum['forum_name']).'</title>';
if ($forum_config['o_pan_seo_meta_desc_forum'] == '1')
{
$o_pan_seo_meta_desc_forum = strip_tags($cur_forum['forum_desc']);
$o_pan_seo_meta_desc_forum_count = iconv_strlen($o_pan_seo_meta_desc_forum, 'UTF-8');
if ($o_pan_seo_meta_desc_forum_count < 400)
$forum_head['descriptions'] = '<meta name="description" content="'.forum_htmlencode($o_pan_seo_meta_desc_forum.' '.$cur_forum['forum_name']).'" />'."\n";
else
$forum_head['descriptions'] = '<meta name="description" content="'.forum_htmlencode($o_pan_seo_meta_desc_forum).'" />'."\n";
}
}
else if (FORUM_PAGE == 'viewtopic')
{
if ($forum_config['o_pan_seo_meta_title_topic'] == '1')
$forum_head['title'] = '<title>'.forum_htmlencode($cur_topic['subject']).'</title>';
if ($forum_config['o_pan_seo_meta_desc_topic'] == '1')
{
if (!defined('FORUM_ALLOW_INDEX'))
$forum_head['robots'] = '<meta name="ROBOTS" content="NOINDEX, FOLLOW" />'."\n";
else
$forum_head['descriptions'] = '<meta name="description" content="'.forum_htmlencode($pan_seo_post_info['meta_desc_topic']).'" />'."\n";
}
}
//Added META tag rel="canonical"
if ($forum_config['o_pan_seo_meta_canonical'] == '1')
{
if (FORUM_PAGE == 'viewtopic' && $pid > 0)
{
$link_canonical = forum_link($forum_url['topic'], array($id, sef_friendly($cur_topic['subject'])));
$forum_head['canonical'] = '<link rel="canonical" href="'.$link_canonical.'" />'."\n";
}
}
//Added META author
if (!empty($forum_config['o_pan_seo_meta_author']))
{
$forum_head['author'] = '<link rel="author" type="text/html" href="'.$forum_config['o_pan_seo_meta_author'].'" title="'.$forum_config['o_pan_seo_meta_author'].'" />'."\n";
if (!empty($forum_config['o_pan_seo_meta_publisher']))
{
$forum_head['publisher'] = '<link rel="publisher" href="'.$forum_config['o_pan_seo_meta_publisher'].'" />'."\n";
}
}
$matches[2]
Потому что мы просто обязаны определять в какой из страниц собираемся запускать код, например:
if (FORUM_PAGE == 'viewtopic'){
//Код выполнится только на странице топика..
}
$matches[2]
Вот с этой областью может быть проблема, хотя не знаю как это может отразиться, но все же вот он код:
//Added META author
if (!empty($forum_config['o_pan_seo_meta_author']))
{
$forum_head['author'] = '<link rel="author" type="text/html" href="'.$forum_config['o_pan_seo_meta_author'].'" title="'.$forum_config['o_pan_seo_meta_author'].'" />'."\n";
if (!empty($forum_config['o_pan_seo_meta_publisher']))
{
$forum_head['publisher'] = '<link rel="publisher" href="'.$forum_config['o_pan_seo_meta_publisher'].'" />'."\n";
}
}
Было бы наверное правильно показывать этот код только на индексируемых страницах например так:
if (defined('FORUM_ALLOW_INDEX')){
//Added META author
if (!empty($forum_config['o_pan_seo_meta_author']))
{
$forum_head['author'] = '<link rel="author" type="text/html" href="'.$forum_config['o_pan_seo_meta_author'].'" title="'.$forum_config['o_pan_seo_meta_author'].'" />'."\n";
if (!empty($forum_config['o_pan_seo_meta_publisher']))
{
$forum_head['publisher'] = '<link rel="publisher" href="'.$forum_config['o_pan_seo_meta_publisher'].'" />'."\n";
}
}
}
Почему кросслинки делаются только в комментариях? В стартовых постах нет. Хотя я думаю логично было наоборот.
Можно это исправить как то?
Здравствуйте. Поставил этот модуль.
Когда нахожусь под админом, то вижу, что появилась ссылка "SEO".
При нажатии на нее появляется сообщение об ошибке:
Sorry! The page could not be loaded.
Page Not found (Error 404):
The requested page extensions/pan_seo/options.php could not be found.
Я посмотрел, что у папки pan_seo права стоят 0700.
Этого достаточно? Может надо 0777? Как правильно?
Спасибо.
права не при чем. Смотрите логи PHP, о чем говорят ошибки. 404 - нет такой страницы,либо не правильный путь к файлу, либо его вообще нет
Почему кросслинки делаются только в комментариях? В стартовых постах нет. Хотя я думаю логично было наоборот.
Можно это исправить как то?
Приходит мужик к врачу:
— Доктор, меня все игнорируют!
— Следующий...
Почему кросслинки делаются только в комментариях?
Есть скрины? О чем идет речь?
@PunBB,
права не при чем. Смотрите логи PHP, о чем говорят ошибки. 404 - нет такой страницы,либо не правильный путь к файлу, либо его вообще нет
Вы ошибаетесь. Мы поставили права 755 для папки этого расширения и SEO заработал.
Два раза проверяли на версиях движка 1.4.4 и 1.4.5.
Вот, кстати, нашли про эту проблему: https://punbb.softplaza.net/post3900.html#p3900
Проблемы с sitemap.xml нет (версия 1.4.5). Он генерится в папку форума, но не сразу, а где-то через 5 минут (может при создании новой темы или еще при каких-то действиях. ХЗ. Сразу не было, а через 5 минут появился.)
@Avistar, ага, дошло... так почему вы считаете, что кросслинки должны быть в первом посте?
@belelectroteam, у вас не открывалась страница настроек. Я просто пытаюсь понять как это связано с правами
так почему вы считаете, что кросслинки должны быть в первом посте?
Там текста больше.
Лучше бы конечно что бы можно самому создать кросслинк. Например есть в тексте слово PHP и оно автоматически делало ссылку на нужный раздел.
а можно скинуть сюда версию для 1.4.2?
Generated in 0.084 seconds (78% PHP - 22% DB) with 25 queries