Библиотека программиста

24.10.2026 - PHP. Генерация meta name=keywords "на лету"

Создавая свой php движок для нового сайта, я, как и всегда не захотел выполнять нудную работу сам и поэтому такое задание как подбор ключевых слов к каждой странице сайта доверил php скрипту, который написал меньше чем за полчаса.

Конечно, многие могут сказать, что поисковики не учитывают мета теги keywords и description, и вовсе незачем голову морочить проблемой подбора ключевых слов, но учитывают или нет, это известно только администраторам поисковых машин. В частности, я недавно проводил эксперимент, в котором участвовало три пары сайтов, на каждой паре сайтов был один и тот же контент, но на одном из сайтов каждой пары были прописаны keywords и description. И что вы думаете, через месяц, все три сайта с keywords и description были выше в выдаче Яндекса, чем их двойники без этих мета тегов. (Примечание: сайты были оптимизированы под абсолютно не конкурентные запросы и не имели бэклинков).

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

А вот и сам исходный код этого php-скрипта для подбора ключевых слов:
PHP - Код

class Counter
{
    var 
$origin_arr;
    var 
$modif_arr;
    var 
$min_word_length = 3;
 
function 
explode_str_on_words($text)
{
    
$search = array ("'ё'",
                     
"'<script[^>]*.*?</script>'si",  // Вырезается javascript
                     
"'<[&#092;/&#092;!]*?[^<>]*'si",           // Вырезаются html-тэги
                     
"'([&#092;r&#092;n])[&#092;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",
                     
"'&#(&#092;d+);'e");
    
$replace = array ("е",
                      
" ",
                      
" ",
                      
"&#092;&#092;1 ",
                      
"&#092;" ",
                      " ",
                      " ",
                      " ",
                      " ",
                      chr(161),
                      chr(162),
                      chr(163),
                      chr(169),
                      "
chr(&#092;&#092;1)");
    
$text = preg_replace ($search, $replace, $text);
    
$del_symbols = array(",", ".", ";", ":", "&#092;"", "#", "&#092;$", "%", "^",
                         
"!", "@", "`", "~", "*", "-", "=", "+", "&#092;&#092;",
                         
"|", "/", ">", "<", "(", ")", "&", "?", "?", "&#092;t",
                         
"&#092;r", "&#092;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. Вот наглядный пример использования этого класса:

PHP - Код
$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 архиве вы можете здесь.
Опубликовано на сайте: http://www.coders-library.ru
Прямая ссылка: http://www.coders-library.ru/index.php?name=news&op=view&id=236