Cara mudah memaksimalkan halaman pencarian WordPress

Hasil halaman pencarian di blog WordPress yang dibiarkan masuk (index,follow) oleh user agent (spider/robots) suatu mesin pencari/search engine, dapat menambah jumlah halaman yang terindex dan menambah pengunjung yang masuk suatu situs. Banyak cara yang digunakan untuk memaksimalkan search result dari halaman pencarian ini, salah satunya adalah metode auto generate content yang sudah dibahas pada postingan yang lalu.

Jika Anda mempunyai konten yang banyak atau Anda konsisten meng-update blog Anda, ada cara yang lebih mudah dalam memaksimalkan halaman pencariannya. Langkah awal yang Anda harus lakukan adalah instal plugin STT2, Relevanssi, dan plugin bad words search noindex. Dengan ketiga plugin tersebut sudah cukup untuk memaksimalkan trafik blog Anda. Kemudian setting masing-masing plugin tersebut sesuai dengan keinginan Anda. Kemudian tempatkan widget STT2 yang telah terinstal di samping halaman blog (sidebar), setting widget tersebut menuju ke halaman pencarian (defaultnya search).

Pastikan ke tiga plugin tersebut telah diatur dengan benar sebelum Anda melakukan update teratur, hal ini dilakukan untuk mendapatkan hasil yang maksimal untuk hasil halaman pencarian dari blog WordPress Anda dan indexing yang dihasilkan oleh search engine lebih bagus juga. Cara setting yang optimal untuk ketiga plugin tersebut akan saya bahas pada tutorial berikutnya.


 Google

Cara merubah search base permalink WordPress dengan mudah

Jika Anda pengguna WordPress versi lama 3.4.1 ke bawah, cara merubah search base permalink WordPress default dapat dengan mudah dilakukan, tanpa harus melakukan oprek atau edit kode search di core WordPress-nya. Cara merubah permalink search WordPress dengan gampang diterapkan langsung di file functions.php theme WP Anda dengan menyisipkan kode di bawah ini.
Kode Search Base URL WordPress

Contoh url search wp

  • www.domain.com/artikel/blog-wordpress

    function change_url_search_base_wp() {
    global $wp_rewrite;
    $wp_rewrite->search_structure = $wp_rewrite->front.'/artikel/%search%';
    return $wp_rewrite;
    }
    add_action('init', 'change_url_search_base_wp');
    
  • www.domain.com/arsip/blog-wordpress
    function change_url_search_base_wp() {
    global $wp_rewrite;
    $wp_rewrite->search_structure = $wp_rewrite->front.'/arsip/%search%';
    return $wp_rewrite;
    }
    add_action('init', 'change_url_search_base_wp');
    
  • www.domain.com/topic/blog-wordpress
    function change_url_search_base_wp() {
    global $wp_rewrite;
    $wp_rewrite->search_structure = $wp_rewrite->front.'/topic/%search%';
    return $wp_rewrite;
    }
    add_action('init', 'change_url_search_base_wp');
    

Kemudian masuk di menu SettingPermalinks di dashbord wp Anda, tekan tombol Save Changes. Pastikan juga bahwa perubahan search base permalink blog Anda tidak sama dengan struktur permalink dalam settingan tersebut agar tidak terjadi konflik nantinya.

Untuk mengubah search base permalink WordPress versi terbaru (3.4.2 atau 3.5.x), sampai saat ini Anda dapat melakukannya dengan mengikuti tutorial sebelumnya.


 Google

Modifikasi URL search WordPress

Cara modifikasi URL search WordPress sangat bervariasi, salah satu contohnya sudah ditutorialkan dalam postingan sebelumnya yaitu bagaimana membuat keyword menjadi direktori di struktur url search yang menggantikan direktori default (/search/) permalink di halaman pencarian wp.

Tutorial Jevuska ini sekaligus juga sebagai tips tambahan dalam melakukan modifikasi di halaman pencarian WordPress. Cara sederhana membuat modifikasi URL search WordPress lainnya adalah sebagai berikut:

  1. Tetap masih menggunakan WordPress versi 3.4.1 (Download di http://wordpress.org/download/release-archive/) atau mungkin versi dibawahnya lagi.
  2. Menambahkan kode rewrite global struktur permalink di dalam file functions.php theme WP Anda. Untuk membuat url search WP seperti:
    • a. http://www.yourdomain.com/search-blog-wp

      function change_url_search_base_wp() {
      global $wp_rewrite;
      $wp_rewrite->search_structure = $wp_rewrite->front.'/search-%search%';
      return $wp_rewrite;
      }
      add_action('init', 'change_url_search_base_wp');
      
    • b. http://www.yourdomain.com/artikel-blog-wp/
      function change_url_search_base_wp() {
      global $wp_rewrite;
      $wp_rewrite->search_structure = $wp_rewrite->front.'/artikel-%search%/';
      return $wp_rewrite;
      }
      add_action('init', 'change_url_search_base_wp');
      
    • c. http://www.yourdomain.com/topic-blog-wp.html
      function change_url_search_base_wp() {
      global $wp_rewrite;
      $wp_rewrite->search_structure = $wp_rewrite->front.'/topic-%search%.html';
      return $wp_rewrite;
      }
      add_action('init', 'change_url_search_base_wp');
      
    • d. http://www.yourdomain.com/search+blog+wp.html
      function change_url_search_base_wp() {
      global $wp_rewrite;
      $wp_rewrite->search_structure = $wp_rewrite->front.'/topic+%search%.html';
      return $wp_rewrite;
      }
      add_action('init', 'change_url_search_base_wp');
      

    Contoh-contoh kode di atas pada dasarnya mengganti tanda garis miring (/) serta kata “search” pada direktori url search menjadi tanda plus (+) atau minus (-) dari bentuk default struktur url search WP (http://domain.com/search/blog-wp).

  3. Menyelipkan kode (untuk membuat title search lebih friendly) di baris 2178 file wp-includes/query.php di bawah kode if ( !empty($q['s']) ) {.
    //added by JEVUSKA
    $tambahan = array('+','-');
    $tambahan2 = array('.html');
    $q['s'] = str_replace ( $tambahan,' ',$q['s']);
    $q['s'] = str_replace ( $tambahan2,'',$q['s']);
    
  4. Point terakhir (jangan sampai lupa langkah ini), lakukan Save Changes pada Setting/Permalinks di dalam dashboard WP Anda. Selesai.

Yang perlu diingat lagi adalah, jangan sampai ada permalink yang sama dengan struktur url search blog WordPress Anda, baik itu permalink postingan, tag, archive, dan lainnya. Jadi buatlah struktur url searh ini menjadi seunik mungkin dalam blog Anda.


 Google

Kata kunci pertama sebagai direktori url search WordPress

Masih berkutat dengan halaman search WordPress? bagaimana membuat kata kunci pertama sebagai direktori url search di halaman pencarian? contohnya seperti url search berikut ini:

  • http://localhost.com/search/blog+wp (Default)

Diubah menjadi

  • http://localhost.com/blog/blog-wp.html
  • http://localhost.com/hello/hello-world.html

Struktur url search ini sangat dinamik karena akan membuat banyak bentuk direktori sesuai dengan kata kunci pertama yang tersedia. Cara membuatnya sebagai berikut (Pakai WordPress Versi 3.4.1):

  1. Tambahkan kode rewrite global struktur permalink berikut di bagian paling atas dalam file functions.php theme WP Anda
    function change_url_search_base_wp() {
    global $wp_rewrite;
    $wp_rewrite->search_structure = $wp_rewrite->front.'/%search%.html';
    return $wp_rewrite;
    }
    add_action('init', 'change_url_search_base_wp');
    
  2. Selipkan kode berikut di baris 2178 file wp-includes/query.php (WordPress versi 3.4.1), tepat setelah kode if ( !empty($q['s']) ) {.
    //added by JEVUSKA
    $tambahan = array('+','-');
    $tambahan2 = array('.html');
    $q['s'] = str_replace ( $tambahan,' ',$q['s']);
    $q['s'] = str_replace ( $tambahan2,'',$q['s']);
    $q['s'] = strstr ( $q['s'],'/'); 
    $q['s'] = preg_replace('/&.+?;/', '', $q['s']);
    $q['s'] = preg_replace('/\s+/', ' ', $q['s']);
    $q['s'] = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', ' ', $q['s']);
    $q['s'] = preg_replace('|-+|', ' ', $q['s']);
    $q['s'] = preg_replace('/&#?[a-z0-9]+;/i','',$q['s']);
    $q['s'] = preg_replace('/[^%A-Za-z0-9 _-]/', '', $q['s']);
    $q['s'] = explode(" ",trim($q['s']));
    $q['s'] = array_unique($q['s']);
    $q['s'] = implode(" ",$q['s']);
    

Langkah terakhir adalah masuk ke dashboard WP Anda Setting/Permalinks Save Changes. Sekarang cobalah mengetikkan url search seperti contoh di atas. Pastikan struktur url halaman lainnya di dalam blog Anda tidak sama dengan struktur url search yang dibentuk untuk menghindari bentrok antar permalink.

Kode PHP mendapatkan kata pertama dari kalimat/keywords

Berikut ini adalah beberapa contoh function untuk mendapatkan kata pertama dari suatu kalimat atau kata kunci.

<?php
$katakunci = 'Hello world blog';
result = explode(' ',trim($katakunci));
echo result[0]; // output-nya hello
?>

atau

<?php
$katakunci = 'Hello world blog';
echo strtok($katakunci, " "); // output-nya hello
?>

 Google

Filter/block kata di search WordPress (Plugin Bad Words)

Jika Anda mempunyai blog WordPress dan ingin filter/block beberapa kata yang tidak diinginkan (bad words) dalam kotak pencarian WordPress (halaman search WordPress), ada beberapa cara yang bisa Anda lakukan. Yang pertama adalah rewrite halaman search yang mengandung kata kunci bad words menjadi halaman 404 (error page) dan kedua adalah membuat halaman search dengan kata kunci bad words menjadi halaman yang mengandung meta robots noindex.

Cara membuat filter/blokir bad words

Membuat Regex Bad Words

Ada 2 tipe regex untuk melakukan filter/block terhadap bad words.

#(.*?)(bing|google|youtube|facebook)(.*?)#
Contoh: kalimat yang mengandung kata bing, kambing, bingung, atau bingkisan akan cocok dengan kata bing.

/\b(bing|google|youtube|facebook)\b/
Regex ini hanya mencocokkan kata-kata yang telah ditentukan. Contoh: jika Anda telah menentukan kata bing maka hanya kalimat yang mangandung kata bing semata-mata yang cocok.

Jadi, di antara kedua tipe regex di atas, Anda tinggal pilih tipe regex mana yang diinginkan. Kemudian buatlah sebuah file PHP misalnya block_bad_words.php dan isi dengan kode regex di atas seperti berikut:

<?php
$block_bad_words="/\b(bing|google|youtube|facebook)\b/";
?>

Kode diatas untuk tipe regex yang kedua. Simpan file block_bad_words.php di directory theme WP Anda, sama dengan file-file theme yang Anda pakai. Anda dapat menambahkan sebanyak mungkin kata-kata yang diselingi dengan tanda “|” (tidak pakai kutip) sesuai dengan kode di atas, jangan ada spasi atau special character dan semua kata harus dalam bentuk lowercase (huruf kecil).

Block Bad Words di halaman pencarian WordPress (Search WP) menjadi halaman 404 error

Metode ini akan me-rewrite halaman search yang mengandung kata yang Anda blokir menjadi halaman 404 theme WordPress. Tempatkan kode berikut di dalam file search.php theme WP Anda. Simpan pada bagian paling atas!.

<?php
include 'block_bad_words.php';
if (preg_match($block_bad_words,strtolower($s))) {
  global $wp_query;
  $wp_query->set_404();
  status_header( 404 );
  get_template_part( 404 ); exit();
  }
?>

Filter/blokir bad words di halaman search WordPress menjadi halaman noindex

Jika Anda menginginkan search engine tidak meng-index halaman dengan kata kunci bad words, tempatkan kode plugin function berikut di dalam file functions.php theme WP Anda.

<?php
function noindex_bad_words() {
  if (is_search()){
  include 'block_bad_words.php';
    if (preg_match($block_bad_words,strtolower(get_search_query()))) {
      echo '<meta name="robots" content="noindex,follow" />';
      }
      else
      {
      echo '<meta name="robots" content="index,follow" />';
      }
   }
}
add_action('wp_head', 'noindex_bad_words');
?>

Kode ini akan menempatkan meta robots noindex secara otomatis di head html halaman pencarian dengan kata kunci yang mengandung bad words. Sedangkan halaman search yang tidak mengandung kata kunci bad words akan tampil meta robots index. Jadi pastikan terlebih dahulu halaman search WordPres Anda tidak mengandung meta robots sebelumnya, supaya tidak duplikat meta atau saling tumpang tindih.

Tutorial ini sekaligus menjawab pertanyaan-pertanyaan dari teman-teman yang bermain dengan auto generated content yang memanfaatkan halaman search WordPress. Metode regex dan function preg match PHP di atas juga dapat Anda manfaatkan untuk melakukan filter terhadap konten yang di-generate.

Kode regex mana yang Anda mau pakai? metode blokir mana yang Anda inginkan? mau menggabungkan keduanya? Semua terserah Anda. Jika ingin menggabungkan keduanya Anda harus membuat dua file block_bad_words.php dengan nama yang berbeda dan memanggilnya masing-masing dengan kedua kode filter yang berbeda pula.

Plugin Bad Words Search Noindex

Khusus untuk bad keywords noindex, Anda bisa pakai plugin Bad Words Search Noindex berikut, tambahkan kata bad words-nya dan simpan dengan nama file bad-words-search-noindex.php. Letakkan file ini di directory plugin WordPress Anda dan aktifkan melalui dashboard Anda. Anda juga bisa mengubah bentuk regex dalam plugin ini sesuai dengan penjelasan sebelumnya.

<?php
/**
 * @package bad-words-search-noindex
 */
/*
Plugin Name: Bad Words Search Noindex
Plugin URI: http://www.jevuska.com/2013/05/29/filter-block-kata-di-search-wordpress-plugin-bad-words
Description: Create meta robots noindex follow for bad keywords in search result WordPress blog.
Version: 1.0.0
Author: Jevuska
Author URI: http://www.jevuska.com/
*/
function noindex_bad_words() {
  if (is_search()){
   //add more keywords in regex code
   $block_bad_words="/\b(bing|google|youtube|yahoo|facebook)\b/";
    if (preg_match($block_bad_words,strtolower(get_search_query()))) {
      echo '<meta name="robots" content="noindex,follow" />';
      }
      else
      {
      echo '<meta name="robots" content="index,follow" />';
      }
   }
}
add_action('wp_head', 'noindex_bad_words');
?>

 Google

Membuat canonical link di halaman pencarian WordPress

Halaman canonical apa sih om Jev?
Gini loh sob, halaman canonical itu adalah halaman yang dipilih dari beberapa halaman web yang memberikan konten sangat serupa. Konten yang serupa sangat tidak disukai mesin pencari. Yang sudah biasa bermain-main dengan webmaster tool tentu tau, halaman apa saja yang memberikan konten sama, baik itu karena adanya duplicate title ataupun duplicate description. Nah dengan membuat halaman canonical, kamu sudah memberitahu kepada mesin pencari bahwa dari semua halaman dengan isi yang sama, maka halaman inilah yang paling berguna, dan mesin pencari akan memprioritaskan halaman tersebut dalam hasil pencarian.

Bagaimana cara membuat canonical link di search page WordPress
Beberapa plugin WordPress seperti All in One SEO Pack atau Platinum SEO, sudah menerapkan metode ini. Halaman canonical yang terbentuk berasal dari diterapkannya elemen dengan atribut rel = “canonical” di bagian untuk halaman yang bukan canonical (lihat source page blog kamu). Om Jev memfokuskan halaman pencarian WP ini karena beberapa plugin tersebut belum memberikan link canonical untuk search page WordPress. Yah..disamping alasan itu, ada beberapa teman-teman blogger yang bermasalah dengan halaman pencarian blognya. Om kasih satu contoh kasus dari pengunjung blog ini, namanya Tukang Ngoceh (kerjaannya pasti ngoceh mulu nih di blognya Om Jev :) :

pages with duplicate title tags di tempat saya buanyak mas hehe… Gimana ya saya membuat robots.txt nya?
hxxp://domain.com/wow/Tukang-Es-cendol (ada huruf besarnya)
hxxp://domain.com/wow/tukang-es-cendol
hxxp://domain.com/wow/tukang-es-cendol.html
hxxp://domai.com/wow/Tukang-Es-cendol.html (ada huruf besarnya)
Semuanya kayak gitu mas, terdeteksi sebagai duplicate content buanget. Tolong ya mas:
1. Gimana robots.txt nya mas, terutama yang ada huruf besarnya tuh. Permalink yang saya pake yang .html
2. Kalau terdeteksi gitu, cara ngapusnya gimana mas? Soalnya itu kan AGC. Apa hapus cache nya aja atau gimana ya mas? Soalnya saya cari-cari di webmaster tools gag ada menunya buat ngapus yang duplicate gitu.

Dari kasus ini, permalink-permalink tersebut membentuk halaman yang serupa, dari situ kita harus menentukan permalink mana yang akan dijadikan halaman canonical. Saya pribadi lebih memilih link yang semuanya membentuk lowercase, nah untuk contoh kasus ini, Om jev memilih permalink hxxp://domain.com/wow/tukang-es-cendol.html sebagai halaman canonical.

Sekarang kita tinggal memasang kode berikut dalam file header.php di antara kode <head> … </head>

<?php function fix_permalink($s){
$s = strtolower($s);
$s = preg_replace('/&.+?;/', '', $s); 
$s = preg_replace('/\s+/', '-', $s); //ganti tanda minus (-) dengan tanda plus (+) kalo permalink kamu pake tanda plus
$s = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '-', $s); //ganti tanda minus (-) dengan tanda plus (+) kalo permalink kamu pake tanda plus
$s = preg_replace('|-+|', '-', $s); //ganti tanda minus (-) dengan tanda plus (+) kalo permalink kamu pake tanda plus
$s = preg_replace('/&#?[a-z0-9]+;/i','',$s); 
$s = preg_replace('/[^%A-Za-z0-9 _-]/', '-', $s); //ganti tanda minus (-) dengan tanda plus (+) kalo permalink kamu pake tanda plus
$s = trim($s, '-'); //ganti tanda minus (-) dengan tanda plus (+) kalo permalink kamu pake tanda plus
return $s;
}
if (is_search()) { 
echo '<link rel="canonical" href="http://'.$_SERVER["HTTP_HOST"].'/wow/'.fix_permalink($s).'.html" />'; //ganti kata "wow" dan ".html" sesuai dengan permalink search kamu
} 
?>

Sekarang kamu tinggal ngecek halaman non-canonical (halaman yang duplikat/bukan prioritas) di browser (dalam hal ini Mozilla Firefox), apakah ada simbol “C” warna biru?, jika ada maka simbol canonical itu akan menunjukkan yang mana url halaman canonical. Jika dilihat di source page (Ctrl+u) akan terbentuk kode seperti ini di bagian <head>.

<link rel=”canonical” href=”hxxp://domain.com/wow/tukang-es-cendol.html” />
(ini contoh loh yah)

Jadi, gitu aja deh sob solusi dari Om Jev untuk tips menghindari duplikat konten dengan menerapkan canonical link. Bagi yang bermasalah (fans blog AGC nih biasanya) dengan permalink tanda plus (+) atau ekstensinya, kamu tinggal ikuti saja petunjuk yang dalam kode tersebut.
Selama mencoba Sob! :)

Update 20 Desember 2010
- Dengan metode ini, semua halaman pagination di search page wp di arahkan ke halaman canonical.

Menghilangkan tanda plus minus di title halaman search WP 3 & 4

Bagi yang suka utak atik halaman pencarian WordPress, ada yang perlu diluruskan lagi nih, terutama masalah tanda plus atau minus di title halaman search WordPress versi 3 ke atas. Sebenarnya Om Jev sudah kasih solusinya dalam tutorial sebelumnya mengenai bagaimana cara mengatasi special character plus (+) atau minus (-) di title halaman search WP tersebut.

Atasi special character di title halaman pencarian WordPress

Solusi menghilangkan tanda Plus atau Minus di Title Search WP 3.0 +
Masuk aja di core WP langsung. Rootnya /domainfolder/wp-includes/query.php dan tambahkan kode berikut pada:
- line 1725 untuk wp versi 2.9.2 ke atas,
- line 1842 untuk wp versi 3.0 ke atas file query.php :

$tambahan = array('+','-'); // karakter plus minus dihilangkan
$tambahan2 = array('.html'); // karakter html dihilangkan kalo permalinknya pake html
$q['s'] = str_replace ( $tambahan,' ',$q['s']); // karakter diganti spasi
$q['s'] = str_replace ( $tambahan2,'',$q['s']);

Jadinya seperti ini:

// If a search pattern is specified, load the posts that match
if ( !empty($q['s']) ) {
$tambahan = array('+','-'); // karakter plus minus dihilangkan
$tambahan2 = array('.html'); // karakter html dihilangkan
$q['s'] = str_replace ( $tambahan,' ',$q['s']); // karakter diganti spasi
$q['s'] = str_replace ( $tambahan2,'',$q['s']);
// added slashes screw with quote grouping when done early, so done later

Selamat mencoba dah :)

Please Note
- Jangan lupa untuk menerapkan robots.txt untuk menghindari duplicate title untuk halaman pencarian blog kamu.
- Om Jev cuma bisa pake cara ini, kalo ada yang minta cara lain, duh… sori Om nggak tau….minta share-nya dunkz kalo ada yang tau :)

UPDATE 13-09-2014
Cara menghilangkan tanda plus atau minus di title atau hasil eksekusi kata kunci (query) di halaman search WordPress 3.x+ dan 4.0 (terbaru September 2014).
Jadi tanpa harus oprek file core WordPress di query.php, tambahkan kode berikut di functions.php:

function bikin_flush_rewrite_rules(){
   global $wp_rewrite;
   $wp_rewrite->flush_rules();
}
add_action('parse_request', 'bikin_filter_search_query');
function bikin_filter_search_query(){
	global $wp;
	if (!empty($wp->query_vars['s'])){
                $tambahan = array('+','-'); // karakter plus minus dihilangkan
                $tambahan2 = array('.html'); // karakter html dihilangkan kalo permalinknya pake html
                $wp->set_query_var('s', str_replace($tambahan,' ',$wp->query_vars['s']));
                $wp->set_query_var('s', str_replace($tambahan2,'',$wp->query_vars['s']));
	}	
}

Kode di atas sumbernya dari plugin STT2, sudah ditesting dan tidak bentrok.


 Google