Перейти к содержимому


META Description и META Keywords - чем автозаполнить?


  • Вы не можете ответить в тему
Сообщений в теме: 13

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 21 March 2012 - 08:32 PM

У меня на тестовом сайтике в товарах и категориях эти поля не заполнены вообще.
Т.к. я начал тестовые игры с Яндексом-Гуглем во всякие там индексации и прочие повышения тИЦ/PR, то интересуюсь, чем наиболее правильно АВТОЗАПОЛНИТЬ эти поля исходя из уже имеющейся информации о товаре? У каждого товара есть в базе развесистый пучок "характеристик товара" и вполне структурированное (HTML) описание.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 21 March 2012 - 09:57 PM

http://xpoint.ru/kno...abotaSTekstami/
AvtomaticheskoeOpredelenieKlyuchevyihSlov

но я бы все таки рекомендовал ручной режим,
если ключевики можно в принципе пробывать формировать автоматически, то описание должно иметь человеческий вид
  • 0
Изображение Изображение Изображение

#3 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 21 March 2012 - 10:08 PM

присоеденюсь к разработке, для меня как раз очень актуальна тема.
итак идеи
Начнем с meta description
1) спарсить из какого нибудь каталога, того же яндекс маркета (оч хорошая идея, там уже все сделано до нас )) )
пример http://market.yandex...19-2 RE&srnum=5
2) сформировать из описания, удаляя html теги и все спец символы
3) придумать какой то более интересный способ


ссылки по теме :
http://stxt.ru
  • 0
Изображение Изображение Изображение

#4 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 21 March 2012 - 10:42 PM

Подбор ключевых слов:

Принцип работы php скрипта, основной задачей которого является “на лету” подбирать к тексту ключевые слова (keywords), заключается в разбиении всего текста на слова и занесение их в массив. Из исходного текста сначала удаляются все знаки препинания, затем слова заносятся в массив и каждому слову присваивается число его повторений в тексте. После заполнения массива слова сортируются по количеству повторений, и в качестве результатов берется верхушка массива – 15-25 самых часто употребляемых слов.


class Counter
{
var $origin_arr;
var $modif_arr;
var $min_word_length = 3;

function explode_str_on_words($text)
{
$search = array ("'ё'",
"']*?>.*?'si", // Вырезается javascript
"'<[\/\!]*?[^<>]*?>'si", // Вырезаются html-тэги
"'([\r\n])[\s]+'", // Вырезается пустое пространство
"'&(quot|#34);'i", // Замещаются html-элементы
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e");
$replace = array ("е",
" ",
" ",
"\\1 ",
"\" ",
" ",
" ",
" ",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
$text = preg_replace ($search, $replace, $text);
$del_symbols = array(",", ".", ";", ":", "\"", "#", "\$", "%", "^",
"!", "@", "`", "~", "*", "-", "=", "+", "\\",
"|", "/", ">", "<", "(", ")", "&", "?", "?", "\t",
"\r", "\n", "{","}","[","]", "'", "“", "”", "•",
"как", "для", "что", "или", "это", "этих",
"всех", "вас", "они", "оно", "еще", "когда",
"где", "эта", "лишь", "уже", "вам", "нет",
"если", "надо", "все", "так", "его", "чем",
"при", "даже", "мне", "есть", "раз", "два",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
);
$text = str_replace($del_symbols, array(" "), $text);
$text = ereg_replace("( +)", " ", $text);
$this->origin_arr = explode(" ", trim($text));
return $this->origin_arr;
}

function count_words()
{
$tmp_arr = array();
foreach ($this->origin_arr as $val)
{
if (strlen($val)>=$this->min_word_length)
{
$val = strtolower($val);
if (array_key_exists($val, $tmp_arr))
{
$tmp_arr[$val]++;
}
else
{
$tmp_arr[$val] = 1;
}
}
}
arsort ($tmp_arr);
$this->modif_arr = $tmp_arr;
}

function get_keywords($text)
{
$this->explode_str_on_words($text);
$this->count_words();
$arr = array_slice($this->modif_arr, 0, 30);
$str = "";
foreach ($arr as $key=>$val)
{
$str .= $key . ", ";
}
return trim(substr($str, 0, strlen($str)-2));
}
}
?>


Пользоваться данным php классом очень просто, создаете экземпляр класса функцией new а потом вызываете внутреннюю функцию get_keywords(), класса Counter. Вот пример использования этого класса:

$word_counter = new Counter();
if (strlen($content)>50000)
{
$keywords = $word_counter->get_keywords(substr($content, 0, 50000));
}
else
{
$keywords = $word_counter->get_keywords($content);
}


В переменной $content должен содержатся основной текст страницы, для которой создаются ключевые слова. И еще, полученная строка содержит только ключевые слова, без мета тегов.
Скачать php класс для подбора ключевых слов в zip архиве

P.S. файл загрузить не получилось, поэтому привожу ссылку с сайта автора

http://wm-help.net/d...hp-keywords.zip
  • 0
Изображение Изображение Изображение

#5 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 22 March 2012 - 12:15 AM

интересные ссылки по теме
http://habrahabr.ru/post/119049/
http://habrahabr.ru/post/118609/
http://creature.nfos...te4/_shrink.php (!!! работает вроде так как надо)
http://en.wikipedia....c_summarization
http://company.yande...nologies/mystem (морфологический анализ от яндекс)
  • 0
Изображение Изображение Изображение

#6 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 22 March 2012 - 12:32 PM

1) спарсить из какого нибудь каталога, того же яндекс маркета (оч хорошая идея, там уже все сделано до нас )) )

О! Классная идея! Тем более, что на тестовом сайте у меня все товары - из парсера.
Надо написать утилитку... Хотя и странно, что сам парсер (8.0 который) этого не делает, а сует в кейвордс и дескрипшен просто название товара.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 22 March 2012 - 12:35 PM

http://creature.nfos...te4/_shrink.php (!!! работает вроде так как надо)

а вот тут просто не понял, что оно делает. Уж и ссылку ему пихал, и просто текст (кусок книги)...
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 22 March 2012 - 12:39 PM

а вот тут просто не понял, что оно делает. Уж и ссылку ему пихал, и просто текст (кусок книги)...

оно возвращает наиболее значимые предложения текста (количество предложений выбирается слева) тоесть по факту именно meta description, но это должен быть текст а не набор характеристик
  • 0
Изображение Изображение Изображение

#9 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 24 March 2012 - 12:05 AM

с яндекс маркетом все понятно и просто
выкладываю формат для парсинга
hxxp://market.yandex.ru/search.xml?text=название товара&cvredirect=1

вытягивается как fetch(wget) в sh скриптах так и curl в php
"cvredirect" -- напрявляет сразу к первому попавшемуся товару, а не выбрасывает на страницу со списком
  • 0
Изображение Изображение Изображение

#10 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 24 March 2012 - 12:41 AM

вытягивается как fetch(wget) в sh скриптах так и curl в php

ИМХО, для PHP проще file_get_contents("ссылка"), а там уж регекспами вылавливать , если в контенте нет фразы "Заданным условиям не соответствует ни один товар". А keywords генерить автоматически, т.к. в Яндексовых страничках их нет. Или брать из НЕ яндекс-маркетных страничек, найденных яндексом. Уж там-то точно должны быть :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#11 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 24 March 2012 - 12:50 AM

ile_get_contents("ссылка"), а там уж регекспами вылавливать

щас как раз набрасываю текст, и еще есть такая интересная функция как get_meta_tags
  • 0
Изображение Изображение Изображение

#12 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 24 March 2012 - 01:16 AM

готовый вариант парсинга по названию товара с яндекс маркета, с поддержкой редиректов (пример)


$search = "TeXet TB-431HD";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://market.yandex.ru/search.xml?text='.urlencode($search).'&cvredirect=1');
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Сколько сек. ждать ответ сервреа
$page = curl_redir_exec($ch);

curl_close($ch);

$tags = get_meta_tags($url);
echo $tags['keywords'];
echo $tags['description'];



function curl_redir_exec($ch)
{
static $curl_loops = 0;
static $curl_max_loops = 20;
if ($curl_loops >= $curl_max_loops)
{
$curl_loops = 0;
return false;
}
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
list($header, $data) = explode("\n\n", $data, 2);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($http_code == 301 || $http_code == 302)
{
$matches = array();
preg_match('/Location:(.*?)\n/', $header, $matches);
$url = @parse_url(trim(array_pop($matches)));
if (!$url)
{
$curl_loops = 0;
return $data;
}
$last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL));

if (!$url['scheme'])
$url['scheme'] = $last_url['scheme'];
if (!$url['host'])
$url['host'] = $last_url['host'];
if (!$url['path'])
$url['path'] = $last_url['path'];
$new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:'');
#echo $new_url.' --- '.$http_code.'
';
curl_setopt($ch, CURLOPT_URL, $new_url);
global $url;
$url = $new_url;
return curl_redir_exec($ch);
}
else
{
$curl_loops = 0;
return $data;
}
}

?>

  • 0
Изображение Изображение Изображение

#13 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 24 March 2012 - 10:19 PM

А зачем так сложно? Почему не просто

$tags = get_meta_tags('http://market.yandex.ru/search.xml?text='.urlencode($search).'&cvredirect=1');

Только из-за возможных редиректов или есть еще какая-то причина? Я так и сделал, по простому, но у меня по каждому товару на Яндекс-Маркете точно есть родная (!) ссылка без каких-либо редиректов, т.к. с яндекса эти товары и спарсены. Наверное, надо будет просто вставить такой блочок в парсер 8.0, чтобы он писал в соответствующие поля CSV-файла спарсенное (раз уж оно там заведомо есть), а не название товара. Пока сделал маленьким самостоятельным PHP-файликом, который шарится по базе товаров ShopCMS и для всех товаров создает keywords из названий категорий, подкатегорий, синонимов подкатегорий (из моего ЧПУ) и названия товара. Ну а decription - с Яндекса. Только паузу пришлось вставить, а то Яндекс банит.

#!/usr/bin/php
require_once "core/config/connect.inc.php";
require_once "core/includes/database/".DBMS.".php";

db_connect(DB_HOST,DB_USER,DB_PASS) or die (db_error());
db_select_db(DB_NAME) or die (db_error());

$data = mysql_query("SELECT c2.name AS cat1, c1.name AS cat2, cr2.rewrite AS cat1m, cr1.rewrite AS cat2m, p.name, p.productID
FROM ".DB_PRFX."products p
LEFT JOIN ".DB_PRFX."categories c1 USING (categoryID)
LEFT JOIN ".DB_PRFX."categories c2 ON c1.parent=c2.categoryID AND c2.categoryID <> 1
LEFT JOIN ".DB_PRFX."cpu_rewrite cr1 ON cr1.categoryID = c1.categoryID
LEFT JOIN ".DB_PRFX."cpu_rewrite cr2 ON cr2.categoryID = c2.categoryID") or die(mysql_error());
while ($row = mysql_fetch_assoc($data))
{
$search = iconv('CP1251','UTF-8',$row['name']);
$tags = get_meta_tags('http://market.yandex.ru/search.xml?text='.urlencode($search).'&cvredirect=1');
$keywords = $row['cat2'];
if ($row['cat1']) $keywords = $row['cat1']." ".$keywords;
if ($row['cat1m']) $keywords .= " ".$row['cat1m'];
if ($row['cat2m']) $keywords .= " ".$row['cat2m'];
$keywords .= " ".$row['name'];
$keywords = str_replace(",","",$keywords);
echo "Search: ".$search."\n";
echo "Keywords: ".iconv('CP1251','UTF-8',$keywords)."\n";
if (isset($tags['description']))
{
$description = str_replace('Все характеристики, сравнение цен, отзывы покупателей на Яндекс.Маркете.','',$tags['description']);
$description = iconv('UTF-8','CP1251',$description);
echo "Description: ".iconv('CP1251','UTF-8',$description)."\n";
mysql_query("UPDATE ".DB_PRFX."products SET meta_description='".$description."',meta_keywords='".$keywords."' WHERE productID=".$row['productID']) or die(mysql_error());
}
echo "---------------------------------------------\n";
sleep(7);
}
db_disconnect();
?>


интересные ссылки по теме
http://habrahabr.ru/post/119049/

Ссылка интересная, но пока не почитаешь комментарии. Человек разработал серьезный алгоритм и тут же сам признается, что не читал ни фундаментальной теории, ни даже описания прикладных методов. Возможно, конечно, что он гений, но что-то мало верится. Скорее всего, обычный очередной изобретатель колеса.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#14 eugene_wb

    Продвинутый пользователь

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 24 March 2012 - 10:26 PM

Только из-за возможных редиректов или есть еще какая-то причина?

да, и у меня оно не работало, потому что я протупил )) у меня было сначало написано tags['Description']
но зато теперь есть пример правильного curl с прыжками по редиректам.
  • 0
Изображение Изображение Изображение