Created (c) by Princexells Seyka (Princelling Saki)

Formulir Kontak Manual

Formulir Kontak

Para blogger tentu sudah tidak asing lagi dengan yang namanya “Formulir Kontak”. Formulir kontak berguna sebagai media interaksi pengunjung agar terhubung langsung ke email pengelola blog. Formulir ini berbeda dengan meninggalkan komentar & memiliki skala yang lebih luas, contoh: memberikan saran berkenaan dengan blog atau permintaan posting, bertanya tentang suatu topik posting ketika komentar pada posting tersebut telah ditutup, dan sebagainya

Banyak layanan pihak ketiga yang menyediakan fasilitas ini, antara lain: EmailMeForm, Kontactr, Foxyform & FreeContactForm. Nah, sekarang bagaimana jika kita ingin membuat formulir kontak sendiri? Salah satu alternatifnya adalah dengan menggunakan PHP (Hypertext Preprocessor), seperti yang akan Optimasi Blog deskripsikan berikut.

Web Hosting

Langkah awal, kita harus memiliki hosting. Mungkin salah satu situs web yang menyediakannya secara gratis adalah 000webhost.com (jika tidak berkeberatan, taut tersebut merupakan afiliasi Optimasi Blog di 000webhost) atau dapat menggunakan hosting lain. Kemudian buat satu subdomain gratis yang disediakan oleh layanan tersebut. Silakan buka akun email sesuai dengan email yang didaftarkan pada 000webhost untuk melihat konfirmasi akun. Jika sudah, kembali ke 000webhost & beranjak ke Cpanel. Klik icon “File Manager” dan masukkan kata sandi sesuai dengan waktu pendaftaran atau ganti kata sandi berbeda (baru) dengan melakukan akses ke “View FTP Detail”. Sekarang kita berada dalam File Manager, buka berkas public_html. Hapus file “default.php”, kemudian buat file baru bernama “index.php” yang berisi Silence is golden.

<?php
// Silence is golden.
?>
File ManagerMembuat File Baru

Nah, sekarang subdomain gratis telah dapat kita pergunakan untuk menyimpan berbagai berkas. Selanjutnya masih di dalam berkas public_html, kita membuat file PHP yang nantinya akan dimunculkan sebagai formulir isian kontak.

<?php
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
ob_start("ob_gzhandler");
}
else {
ob_start();
}
?>

<?php error_reporting( 0 );?>
<?php
//Memperbaiki kesalahan pemberitahuan pada debug
$nameError = '';
$emailError = '';
$commentError = '';
//Mengecek apakah isi form sudah dikirim
if(isset($_POST['submitted'])) {
//Mengecek apakah chaptcha rahasia terisi
if(trim($_POST['checking']) !== '') {
$captchaError = true;
} else {
//Mengecek apakah kolom nama sudah diisi
if(trim($_POST['contactName']) === '') {
$nameError = 'Silakan isi nama Anda terlebih dahulu'; //Pesan error jika kolom nama kosong
$hasError = true;
} else {
$name = trim($_POST['contactName']);
}
//Mengecek apakah kolom alamat email sudah diisi dan valid
if(trim($_POST['email']) === '') {
$emailError = 'Anda lupa untuk memasukkan alamat email';//Pesan error jika kolom email kosong
$hasError = true;
} else if (!preg_match("/^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+)*)+\\.[a-z]{2,}$/i", trim($_POST['email']))) {
$emailError = 'Alamat email yang Anda masukkan tidak valid';//Pesan error jika alamat email tidak valid
$hasError = true;
} else {
$email = trim($_POST['email']);
}
//Mengecek apakah kolom isi pesan sudah disi
if(trim($_POST['comments']) === '') {
$commentError = 'Apakah Anda ingin mengirim pesan kosong? Silakan isi pesan Anda';//Pesan error jika kolom pesan masih kosong
$hasError = true;
} else {
if(function_exists('stripslashes')) {
$comments = stripslashes(trim($_POST['comments']));
} else {
$comments = trim($_POST['comments']);
}
}
//Mengirimkan pesan, jika semua kolom telah diisi dengan valid
if(!isset($hasError)) {
$emailTo = 'email@example.com';//Alamat email tujuan, ganti dengan email anda
$subject = 'Pesan via formulir kontak dari '.$name;//Judul pesan yang masuk ke email kita dari form kontak
$sendCopy = trim($_POST['sendCopy']);//Opsi untuk mengirimkan salinan pesan kepada pengirim
$body = "Nama: $name \n\nEmail: $email \n\nIsi Pesan: $comments";//Isi Email
$headers = 'From: Optimasi Blog <'.$emailTo.'>' . "\r\n" . 'Reply-To: ' . $email;//Header email
mail($emailTo, $subject, $body, $headers);
if($sendCopy == true) {
$subject = 'Pesan Anda dari nama blog Anda';//Judul pesan salinan kepada pengirim apabila checkbox kirim salinan dicentang
$headers = 'From: admin blog <email@example.com>';//Header email pesan salinan, silakan diedit nama dan alamat emailnya
mail($email, $subject, $body, $headers);
}
$emailSent = true;
}
}
} ?>
<!DOCTYPE html>
<html>
<head>
<title>Formulir Kontak</title>
<link rel="stylesheet" href="/css/style.css.php"/>
</head>
<body>
<?php if(isset($emailSent) && $emailSent == true) { ?>
<h3>Terima kasih, <?=$name;?></h3>
<p>Pesan Anda telah dikirim, kami akan segera membalas secepat mungkin.</p>
<?php } else { ?>
<?php if(isset($hasError) || isset($captchaError)) { ?>
<p class="error">Maaf, tampaknya ada masalah dalam pengiriman pesan Anda, silakan coba lagi :)<p>
<?php } ?>
<form action="contact-form.php" id="contactForm" method="post">
<p class="contact-form-author">
<label for="contactName">Nama <small>*</small></label>
<input type="text" name="contactName" id="contactName" value="<?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?>" size="30" tabindex="1" class="requiredField" />
<?php if($nameError != '') { ?>
<span class="error"><?=$nameError;?></span>
<?php } ?>
</p>
<p class="contact-form-email">
<label for="email">Email <small>*</small></label>
<input type="text" name="email" id="email" value="<?php if(isset($_POST['email'])) echo $_POST['email'];?>" size="30" tabindex="2" class="requiredField email" />
<?php if($emailError != '') { ?>
<span class="error"><?=$emailError;?></span>
<?php } ?>
</p>
<p class="contact-form-message">
<label for="commentsText">Pesan <small>*</small></label>
<textarea name="comments" id="commentsText" cols="45" rows="8" tabindex="3" class="requiredField"><?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?></textarea>
<?php if($commentError != '') { ?>
<span class="error"><?=$commentError;?></span>
<?php } ?>
</p>
<p class="inline">
<input type="checkbox" name="sendCopy" id="sendCopy" tabindex="4" value="true"<?php if(isset($_POST['sendCopy']) && $_POST['sendCopy'] == true) echo ' checked="checked"'; ?> /><label for="sendCopy">Kirim salinan pesan ini ke email Anda.</label>
</p>
<p class="screenReader">
<label for="checking" class="screenReader">Biarkan seperti ini!</label><input type="text" name="checking" id="checking" size="10" tabindex="5" class="screenReader" value="<?php if(isset($_POST['checking'])) echo $_POST['checking'];?>" />
</p><!--Chaptca rahasia-->
<p class="contact-form-submitted">
<input name="submitted" type="submit" id="submitted" tabindex="6" value="Kirim Pesan" />
</p>
</form><!-- #contactForm -->
<?php } ?>
</body>
</html>

Untuk kode yang berwarna merah merupakan kompres file dengan menggunakan gzip & warna biru diisi dengan email serta nama blog, sesuaikan dengan keterangan yang diberi warna hijau. Beri nama file di atas menjadi “contact-form.php” (tanpa tanda petik). Adapun <link rel="stylesheet" href="/css/style.css.php"/> akan kita buat terpisah dari file induk (contact-form.php)

Penamaan File

Buat direktori baru dengan nama “css” (tanpa tanda petik). Masuk ke dalam direktori css, kemudian tambahkan file baru dengan nama “style.css” (tanpa tanda petik) yang isinya lebih kurang sebagai berikut.

<?php header("Content-type: text/css"); ?>
body,
input,
textarea {
color: #444;
font: 93.75%/1.6em Georgia, serif;
}
body {
background: #fff;
margin: 0;
padding: 0;
text-align: left;
width: 100%;
}
body:before, body:after {
content: "";
display: table;
}
body:after {
clear: both;
}
p {
font-size: 1em;
line-height: 1.6em;
margin-bottom: .8em;
margin-top: 0;
}
small,
.error {
color: #f00;
font-size: .8em;
line-height: 2em;
}
h3 {
font-size: 1.3333em;
line-height: 1.2em;
margin-bottom: .6em;
}
input,
textarea {
font-size: 1em; /* Corrects font size not being inherited in all browsers */
margin: 0; /* Addresses margins set differently in IE6/7, F3/4, S5, Chrome */
vertical-align: baseline; /* Improves appearance and consistency in all browsers */
*vertical-align: middle; /* Improves appearance and consistency in all browsers */
}
input {
line-height: normal; /* Addresses FF3/4 setting line-height using !important in the UA stylesheet */
*overflow: visible; /* Corrects inner spacing displayed oddly in IE6/7 */
}
input::-moz-focus-inner { /* Corrects inner padding and border displayed oddly in FF3/4 www.sitepen.com/blog/2008/05/14/the-devils-in-the-details-fixing-dojos-toolbar-buttons/ */
border: 0;
padding: 0;
}
input[type=text],
input[type=email],
textarea {
color: #666;
border: 1px solid #ddd;
border-radius: 3px;
}
input[type=text]:focus,
input[type=email]:focus,
textarea:focus {
color: #111;
}
input[type=text],
input[type=email] {
padding: 6px;
width: 50%;
}
input[type=text]#checking {
width: 10%;
}
input[type="checkbox"] {
box-sizing: border-box; /* Addresses box sizing set to content-box in IE8/9 */
margin-right: 6px;
padding: 0; /* Addresses excess padding in IE8/9 */
}
label.screenReader {
margin-right: 6px;
}
input[type="submit"] {
border: 1px solid #ddd;
border-color: #ccc #ccc #bbb #ccc;
border-radius: 3px;
background: #fafafa; /* Old browsers */
background: -moz-linear-gradient(top, #fafafa 60%, #e6e6e6 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(60%,#fafafa), color-stop(100%,#e6e6e6)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #fafafa 60%,#e6e6e6 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #fafafa 60%,#e6e6e6 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #fafafa 60%,#e6e6e6 100%); /* IE10+ */
background: linear-gradient(top, #fafafa 60%,#e6e6e6 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fafafa', endColorstr='#e6e6e6',GradientType=0 ); /* IE6-9 */
box-shadow: inset 0 2px 1px #fff;
color: rgba(0,0,0,.8);
cursor: pointer; /* Improves usability and consistency of cursor style between image-type 'input' and others */
-webkit-appearance: button; /* Corrects inability to style clickable 'input' types in iOS */
font: 1em/1.6em Georgia, serif;
padding: .4em .8em;
text-shadow: 0 1px 0 rgba(255,255,255,.5);
}
input[type="submit"]:hover {
background: #f5f5f5; /* Old browsers */
background: -moz-linear-gradient(top, #f5f5f5 60%, #dcdcdc 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(60%,#f5f5f5), color-stop(100%,#dcdcdc)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #f5f5f5 60%,#dcdcdc 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #f5f5f5 60%,#dcdcdc 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #f5f5f5 60%,#dcdcdc 100%); /* IE10+ */
background: linear-gradient(top, #f5f5f5 60%,#dcdcdc 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#dcdcdc',GradientType=0 ); /* IE6-9 */
border-color: #bbb #bbb #aaa #bbb;
}
input[type="submit"]:focus,
input[type="submit"]:active {
border-color: #aaa #bbb #bbb #bbb;
box-shadow: inset 0 2px 3px rgba(0,0,0,.15);
box-shadow: inset 0 2px 2px rgba(0,0,0,.15);
}
textarea,
.contact-form-author input[type="text"],
.contact-form-email input[type="text"] {
display: block;
}
textarea {
overflow: auto; /* Removes default vertical scrollbar in IE6/7/8/9 */
padding: 6px 0 6px 6px;
resize: vertical;
vertical-align: top; /* Improves readability and alignment in all browsers */
width: 95%;
}
@media screen and (max-width:800px) {
body {
font-size: .8667em;
}
}
@media screen and (max-width:320px) {
body {
font-size: .8em;
}
}
@media screen and (max-width:240px) {
body {
font-size: .7333em;
}
}

Silakan Anda kustomisasi pengkodean CSS (Cascading Style Sheets) di atas, sehingga sesuai dengan keinginan dan/atau template Anda. Jangan lupa membuat satu file baru (dalam folder css) lagi untuk mengompresi CSS tersebut & beri nama “style.css.php” (tanpa tanda petik).

<?php
ob_start("ob_gzhandler");
ob_start("compress");
// required header info and character set
header("Content-type: text/css; charset: UTF-8");
// duration of cached content (Cache for 1 weeks)
$offset = 60 * 60 * 24 * 7;
$ts = gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
// cache control to process
header ('Cache-Control: max-age=' . $offset . ', must-revalidate');
//set etag-header
header('ETag: "'.md5($ts).'"');
// expiration header format
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s",time() + $offset) . " GMT";
// send cache expiration header to browser
header($ExpStr);
// initialize compress function for white-space removal
ob_start("compress");
// Begin function compress
function compress($buffer) {
// remove comments
$buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
// remove tabs, spaces, new lines, etc.
$buffer = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $buffer);
// remove unnecessary spaces
$buffer = str_replace('{ ', '{', $buffer);
$buffer = str_replace(' }', '}', $buffer);
$buffer = str_replace('; ', ';', $buffer);
$buffer = str_replace(', ', ',', $buffer);
$buffer = str_replace(' {', '{', $buffer);
$buffer = str_replace('} ', '}', $buffer);
$buffer = str_replace(': ', ':', $buffer);
$buffer = str_replace(' ,', ',', $buffer);
$buffer = str_replace(' ;', ';', $buffer);
return $buffer;}
require_once('style.css');
ob_end_flush();
?>
Direktori css
Dua file dalam direktori css, yakni style.css dan style.css.php dengan pemanggilan <link rel="stylesheet" href="/css/style.css.php"/> pada file contact-form.php

Sekarang formulir kontak telah siap dimanfaatkan serta diletakkan pada blog, biasanya dalam halaman kontak. Sebelumnya — mungkin ini sifatnya opsional (tambahan) — menambah beberapa pengaturan pada .htaccess agar lebih maksimal. Baris pertama umumnya telah otomatis ditambahkan, tinggal melakukan konfigurasi untuk baris-baris selanjutnya. Taut kredit khusus untuk Mutohar Alwi dalam posting Cara Setting Expired Header.

# Do not remove this line, otherwise mod_rewrite rules will stop working
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# Prevents directory listing
IndexIgnore *

# Strong HTACCESS Protection
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</Files>

<ifModule mod_headers.c>
Header set Connection keep-alive
</ifModule>

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

# BEGIN Browser Cache
<IfModule mod_mime.c>
AddType text/css .css
AddType application/x-javascript .js
AddType text/html .html .htm
AddType text/richtext .rtf .rtx
AddType image/svg+xml .svg .svgz
AddType text/plain .txt
AddType text/xsd .xsd
AddType text/xsl .xsl
AddType text/xml .xml
AddType video/asf .asf .asx .wax .wmv .wmx
AddType video/avi .avi
AddType image/bmp .bmp
AddType application/java .class
AddType video/divx .divx
AddType application/msword .doc .docx
AddType application/x-msdownload .exe
AddType image/gif .gif
AddType application/x-gzip .gz .gzip
AddType image/x-icon .ico
AddType image/jpeg .jpg .jpeg .jpe
AddType application/vnd.ms-access .mdb
AddType audio/midi .mid .midi
AddType video/quicktime .mov .qt
AddType audio/mpeg .mp3 .m4a
AddType video/mp4 .mp4 .m4v
AddType video/mpeg .mpeg .mpg .mpe
AddType application/vnd.ms-project .mpp
AddType application/vnd.oasis.opendocument.database .odb
AddType application/vnd.oasis.opendocument.chart .odc
AddType application/vnd.oasis.opendocument.formula .odf
AddType application/vnd.oasis.opendocument.graphics .odg
AddType application/vnd.oasis.opendocument.presentation .odp
AddType application/vnd.oasis.opendocument.spreadsheet .ods
AddType application/vnd.oasis.opendocument.text .odt
AddType audio/ogg .ogg
AddType application/pdf .pdf
AddType image/png .png
AddType application/vnd.ms-powerpoint .pot .pps .ppt .pptx
AddType audio/x-realaudio .ra .ram
AddType application/x-shockwave-flash .swf
AddType application/x-tar .tar
AddType image/tiff .tif .tiff
AddType audio/wav .wav
AddType audio/wma .wma
AddType application/vnd.ms-write .wri
AddType application/vnd.ms-excel .xla .xls .xlsx .xlt .xlw
AddType application/zip .zip
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css A604800
ExpiresByType application/x-javascript A31536000
ExpiresByType text/html A3600
ExpiresByType text/richtext A3600
ExpiresByType image/svg+xml A3600
ExpiresByType text/plain A3600
ExpiresByType text/xsd A3600
ExpiresByType text/xsl A3600
ExpiresByType text/xml A3600
ExpiresByType video/asf A31536000
ExpiresByType video/avi A31536000
ExpiresByType image/bmp A31536000
ExpiresByType application/java A31536000
ExpiresByType video/divx A31536000
ExpiresByType application/msword A31536000
ExpiresByType application/x-msdownload A31536000
ExpiresByType image/gif A31536000
ExpiresByType application/x-gzip A31536000
ExpiresByType image/x-icon A31536000
ExpiresByType image/jpeg A31536000
ExpiresByType application/vnd.ms-access A31536000
ExpiresByType audio/midi A31536000
ExpiresByType video/quicktime A31536000
ExpiresByType audio/mpeg A31536000
ExpiresByType video/mp4 A31536000
ExpiresByType video/mpeg A31536000
ExpiresByType application/vnd.ms-project A31536000
ExpiresByType application/vnd.oasis.opendocument.database A31536000
ExpiresByType application/vnd.oasis.opendocument.chart A31536000
ExpiresByType application/vnd.oasis.opendocument.formula A31536000
ExpiresByType application/vnd.oasis.opendocument.graphics A31536000
ExpiresByType application/vnd.oasis.opendocument.presentation A31536000
ExpiresByType application/vnd.oasis.opendocument.spreadsheet A31536000
ExpiresByType application/vnd.oasis.opendocument.text A31536000
ExpiresByType audio/ogg A31536000
ExpiresByType application/pdf A31536000
ExpiresByType image/png A31536000
ExpiresByType application/vnd.ms-powerpoint A31536000
ExpiresByType audio/x-realaudio A31536000
ExpiresByType application/x-shockwave-flash A31536000
ExpiresByType application/x-tar A31536000
ExpiresByType image/tiff A31536000
ExpiresByType audio/wav A31536000
ExpiresByType audio/wma A31536000
ExpiresByType application/vnd.ms-write A31536000
ExpiresByType application/vnd.ms-excel A31536000
ExpiresByType application/zip A31536000
</IfModule>
<IfModule mod_deflate.c>
<IfModule mod_setenvif.c>
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
</IfModule>
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
</IfModule>
AddOutputFilterByType DEFLATE text/css application/x-javascript text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon
</IfModule>
<FilesMatch "\.(css|js)$">
<IfModule mod_headers.c>
Header set Pragma "public"
Header set Cache-Control "public, must-revalidate, proxy-revalidate"
</IfModule>
FileETag MTime Size
<IfModule mod_headers.c>
Header set X-Powered-By "Alwi"
</IfModule>
</FilesMatch>
<FilesMatch "\.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml)$">
<IfModule mod_headers.c>
Header set Pragma "public"
Header set Cache-Control "public, must-revalidate, proxy-revalidate"
</IfModule>
FileETag MTime Size
<IfModule mod_headers.c>
Header set X-Powered-By "Alwi"
</IfModule>
</FilesMatch>
<FilesMatch "\.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip)$">
<IfModule mod_headers.c>
Header set Pragma "public"
Header set Cache-Control "public, must-revalidate, proxy-revalidate"
</IfModule>
FileETag MTime Size
<IfModule mod_headers.c>
Header set X-Powered-By "Alwi"
</IfModule>
</FilesMatch>
# END Browser Cache
Isi public_html
Isi keseluruhan public_html (subdomain) yang terdiri dari satu folder css dan tiga buah file (.htaccess, index.php, dan contact-form.php).

Implementasi Formulir Kontak dalam Blog

Setelah melakukan beberapa langkah-langkah di atas pada hosting kita untuk mendukung fasilitas kontak. Sekarang bagaimana cara melakukan konfigurasi formulir kontak tersebut dalam blog? Cukup ringkas, buat halaman statis baru (contoh: h**p://namablog.blogspot.com/p/kontak.html) dengan beberapa kalimat sebagai pembuka. Kemudian tambahkan markah berikut di bawah kalimat pembuka.

<object type="text/html" data="h**p://namasubdomain/contact-form.php"></object>

Perhatikan namasubdomain (warna merah) harus sesuai dengan yang kita daftarkan, contoh: optimasi.netai.net, optimasi.site90.com, dan sebagainya. Kemudian tambahkan CSS berikut pada template untuk mengatur markah object & letakkan di bawah ]]></b:skin>.

<b:if cond='data:blog.url == "h**p://namablog.blogspot.com/p/kontak.html"'>
<style>
object {
overflow: hidden;
height:630px;
width:100%;
}
</style>
</b:if>

Kemungkinan yang banyak diutak-atik adalah CSS object pada properti height agar formulir kontak tampil penuh, ketika memunculkan pesan error pada saat mengklik tombol “Kirim Pesan”. Taut demonstrasi dapat dilihat pada halaman Kontak Optimasi Blog. Berikut beberapa penampakkan hasil uji coba formulir komentar pada akun email pengelola blog.

Kotak Masuk EmailIsi EmailDetail Email

Bosan membacanya? Oleh karena terlalu panjang, meskipun sebenarnya dapat dikustomisasi lebih singkat. Posting membuat formulir kontak ini merupakan bahan dokumentasi penulis serta sedikit menambah wawasan kita tentang ‘dunia’ hosting & bagaimana melakukan optimalisasi terhadap sejumlah file didalamnya. Tidak menutup kemungkinan terdapat kekeliruan dalam penyampaian atau pengkodean di atas, sehingga dibutuhkan kritik serta saran agar dapat memperbaiki posting ini.

Bahan Bacaan: How to create a built-in contact form for your WordPress theme oleh Jean-Baptiste Jung

Description: Formulir Kontak Manual Rating: 5.0 Reviewer: Unknown ItemReviewed: Formulir Kontak Manual

Navigasi Breadcrumbs dengan Microdata

Anda mungkin pernah membaca posting Menambah Lokasi Link Post (Breadcrumbs Trail) oleh Hoctro. Posting ini juga berhubungan dengan hal tersebut, namun di-aransemen dengan beberapa hack agar muncul di beberapa halaman & ditambahkan format microdata data-vocabulary. Penggunaan data-vocabulary dimaksudkan agar breadcrumbs mampu berdiri sendiri, sehingga akan harmonis dengan format microdata http://schema.org/Blog. Lebih lanjut mengenai breadcrumbs yang didukung beberapa format dapat kita telaah pada Rich snippets — Breadcrumbs.

<b:includable id='breadcrumb' var='posts'>
<b:if cond='data:blog.homepageUrl != data:blog.url'>
<b:if cond='data:blog.pageType == "static_page"'>
<!-- breadcrumb for the static page -->
<div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'><a expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Beranda</span></a> / <span itemprop='title'><data:blog.pageName/></span></div>
<b:else/>
<b:if cond='data:blog.pageType == "item"'>
<!-- breadcrumb for the post page -->
<b:loop values='data:posts' var='post'>
<b:if cond='data:post.labels'>
<div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'><a expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Beranda</span></a>
<b:loop values='data:post.labels' var='label'>
<b:if cond='data:label.isLast == "true"'>
/ <a expr:href='data:label.url' itemprop='url'><span itemprop='title'><data:label.name/></span></a>
</b:if>
</b:loop>
/ <span itemprop='title'><data:post.title/></span></div>
<b:else/>
<div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'><a expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Beranda</span></a> / <span itemprop='title'>Tanpa Label</span> / <span itemprop='title'><data:post.title/></span></div>
</b:if>
</b:loop>
<b:else/>
<b:if cond='data:blog.pageType == "archive"'>
<!-- breadcrumb for the label archive page -->
<div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/breadcrumb'><a expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Beranda</span></a> / <span itemprop='title'>Arsip <data:blog.pageName/></span></div>
<b:else/>
<b:if cond='data:blog.pageType == "index"'>
<!-- breadcrumb for non home page (2nd, search, label page) -->
<b:if cond='data:blog.pageName == ""'>
<div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'><a expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Beranda</span></a> / <span itemprop='title'>Penelusuran Arsip Posting</span></div>
<b:else/>
<div class='breadcrumbs' itemscope='itemscope' itemtype='http://data-vocabulary.org/Breadcrumb'><a expr:href='data:blog.homepageUrl' itemprop='url'><span itemprop='title'>Beranda</span></a> / <span itemprop='title'><data:blog.pageName/></span></div>
</b:if>
</b:if>
</b:if>
</b:if>
</b:if>
</b:if>
</b:includable>

Untuk pengkodean berwarna merah, dapat diganti sesuai keinginan Anda dengan menyesuaikan pula di halaman apa ia ditampilkan. Sedangkan warna biru (“/”) merupakan pemisah (separator) antar title. Letakkan pengkodean pada “Edit HTML”, jangan lupa centang Expand Widget Templates. Kemudian cari kode berikut & taruh di atasnya.

<b:includable id='main' var='top'>

Kita telah menambahkan widget breadcrumbs (kalau boleh dikatakan demikian), tinggal cara memanggil serta meletakkan kode pemanggilan tersebut. Perlu diperhatikan, kemungkinan pengkodean tiap template dapat berbeda-beda. Cara memanggilnya adalah melalui markah berikut.

<b:include data='posts' name='breadcrumb'/>

Letakkan kode pemanggilan itu di atas <b:include data='top' name='status-message'/>, seperti yang dapat kita amati di bawah ini.

<!-- posts -->
<div class='blog-posts hfeed'>

<b:include data='posts' name='breadcrumb'/>
<b:include data='top' name='status-message'/>

Sedangkan untuk melakukan beberapa kustomisasi, tambahkan selector .breadcrumbs pada CSS template atau letakkan saja di atas ]]></b:skin>. Contoh:

.breadcrumbs {
font: .875em/1.7143em monospace;
margin: 0 0 1.7143em;
}

Penambahan breadcrumbs di atas, khusus dilakukan pada Blogger™ & pengkodeannya tidak mutlak demikian. Artinya kita masih dapat merubah atau melakukan modifikasi sesuai dengan pengkodean template yang digunakan.

Bahan Bacaan: Breadcrumb for Blogger format RDF (Resource Description Framework) — Blogger Plugins.

Description: Navigasi Breadcrumbs dengan Microdata Rating: 5.0 Reviewer: Unknown ItemReviewed: Navigasi Breadcrumbs dengan Microdata

Memperbaiki Struktur Blog

Struktur blog bukan hanya berkenaan dengan pengkodean template, namun harus dipandang sebagai keseluruhan sistem yang terintegrasi di dalam blog itu sendiri, seperti pengaturan, semantik, dan sebagainya. Ketika kita terfokus bahwa struktur blog merupakan sebuah pengkodean semata, maka jangan heran jika upaya keras yang kita lakukan hanya berkisar antara utak-atik untuk mendapatkan peringkat utama dalam hasil organik (baca kembali posting tentang pemahaman yang saklak tentang SEO).

Apakah Optimasi Blog mengada-ada, dengan selalu menghubungkan sesuatu dengan SEO? Saya tidak mengada-ada & ini mempunyai dasar sesuai dengan panduan umum Search Engine Optimization (SEO), dimana struktur blog adalah salah satu item yang mesti diperhatikan. Item dasar telah diterbitkan sebelumnya pada posting judul dan deskripsi dalam blog.

Untuk URL (Uniform Resource Locator) saya rasa semua blogger sudah mengenal & paham. Jika judul posting dikustomisasi dengan baik, maka alamat posting (permalink) yang terbentuk akan baik pula. Hindari bagi sejumlah permalink yang memasukkan kata kunci berulang-ulang (ditandai dengan URL berwarna merah) dan sama serta serupa pada sub domain atau root direktori yang berbeda (warna hijau).

h**p://namablog.blogspot.com/2012/11/seo-blog-seo-blog-seo-blog.html
h**p://namablog.blogspot.com/p/struktur-blog.html
h**p://namablog.blogspot.com/2012/11/struktur-blog.html

Membuat sebuah blog mudah untuk dinavigasi bukan berarti blog harus tampil minimalis. Selama pengguna & mesin penelusur dapat membaca dengan baik, maka blog tersebut dapat dikategorikan mudah untuk dinavigasi. Pemanfaatan beberapa elemen untuk membuat menu utama dan pengarsipan mempunyai nilai tersendiri untuk membantu pengguna menjelajahi konten. Bredcrumbs pun tidak jarang sebagai tolak ukur kemudahan bagi pengguna untuk menavigasi isi suatu halaman, terutama pada halaman yang kompleks. Mudah dinavigasi juga bermakna bahwa tautan-tautan — menu utama, arsip, bredcrumbs— tersebut aksesibel jika diklik (clickable). Ia akan mengarahkan pada halaman yang sesuai & tepat. Bagaimana jika alamat taut yang diklik tersebut tidak ada atau telah dihapus? Tempatnya adalah di halaman tidak ditemukan atau istilah kerennya “error404”.

Keberadaan peta situs (sitemap) sederhana yang merujuk ke semua halaman atau halaman yang penting (jika kita memiliki ratusan bahkan ribuan) di dalam blog dapat berguna. Hal ini akan sangat membantu pelacakan agar mesin penelusur menemukan halaman yang relevan. Silakan baca kembali posting tentang cara submit sitemap.

h**p://namablog.blogspot.com/sitemap.xml

Berikan kemudahan bagi pengguna untuk memindai & menjelajahi blog kita, jangan abaikan apa yang menjadi kebutuhan mereka. Sedangkan mesin pencari telah mendapat bagian tertentu — apa yang harus dan tidak boleh diindeks — dengan bantuan peta situs (sitemap).

Description: Memperbaiki Struktur Blog Rating: 5.0 Reviewer: Unknown ItemReviewed: Memperbaiki Struktur Blog

Widget Posting dan Komentar Terbaru yang Sederhana

Mungkin Anda pernah membaca artikel sebelumnya tentang Trik Blogger | Memasang Posting Terbaru (Recent Posts) & Trik Blogger | Memasang Komentar Terbaru (Recent Comments). Keduanya tidak menggunakan struktur kode daftar urut (unordered list atau ordered list), namun menggunakan horizontal rule (<hr>) sebagai pemisah antar item atau hanya berupa break (<br>).

Sebenarnya membuat gadget atau widget posting atau komentar terbaru adalah sangat mudah, yaitu dengan memanfaatkan feed default bagi pengguna Blogger™.

h**p://namablog.blogspot.com/feeds/posts/default
h**p://namablog.blogspot.com/feeds/comments/default

Cara menambahkan kedua feed di atas dilakukan melalui kustomisasi Tata Letak (Layout) pada dashboard akun Blogger™ Anda.

Menambah Gadget/Widget

Kemudian pada jendela pop-up yang terbuka, pilih gadget “Feed”.

Gadget/Widget Feed

Masukkan URL feed default Blogger™ Anda, seperti yang telah diperlihatkan di atas (satu gadget berarti satu URL)& jangan lupa diganti nama blog yang berwarna merah dengan Blog Anda. Eksekusi dengan mengklik tombol “Continue”.

Konfigurasi Feed

Selanjutnya akan ditunjukkan beberapa pengaturan yang dapat Anda kustomisasi pada gadget atau widget feed yang baru dibuat tersebut. Akhiri dengan mengklik tombol “Save”.

Konfigurasi Feed Lanjutan

Mungkin yang kurang nyaman dilihat hanya pada gadget atau widget komentar terbaru (recent comments), karena isi komentar — jumlahnya dapat diatur pada saat konfigurasi feed — akan ditampilkan pula. Alternatifnya kita dapat mengganti dengan memilih gadget “HTML/JavaScript”, kemudian masukkan script berikut, sehingga komentar terbaru akan menampilkan nama komentator & judul posting.

<script type='text/javascript'>
//<![CDATA[
function showrecentcomments(r){document.write('<ul>');for(var g=0;g<a_rc;g++){var c=r.feed.entry[g];var p;if(g==r.feed.entry.length){break}for(var f=0;f<c.link.length;f++){if(c.link[f].rel=="alternate"){p=c.link[f].href;break}}p=p.replace("#","#");var m=p.split("#");m=m[0];var e=m.split("/");e=e[5];e=e.split(".html");e=e[0];var b=e.replace(/-/g," ");b=b.link(m);var o=c.published.$t;var l=o.substring(0,4);var d=o.substring(5,7);var a=o.substring(8,10);var n=new Array();n[1]="Jan";n[2]="Feb";n[3]="Mar";n[4]="Apr";n[5]="May";n[6]="Jun";n[7]="Jul";n[8]="Aug";n[9]="Sep";n[10]="Oct";n[11]="Nov";n[12]="Dec";if("content" in c){var j=c.content.$t}else{if("summary" in c){var j=c.summary.$t}else{var j=""}}var q=/<\S[^>]*>/g;j=j.replace(q,"");document.write('<li>');if(m_rc==true){document.write("On "+n[parseInt(d,10)]+" "+a+" ")}document.write('<a href="'+p+'">'+c.author[0].name.$t+"</a>");if(n_rc==true){document.write(" on "+b)}if(o_rc==0){document.write("</li>")}else{document.write(": ");if(j.length<o_rc){document.write("<i>&#8220;");document.write(j);document.write("&#8221;</i></li>")}else{document.write("<i>&#8220;");j=j.substring(0,o_rc);var h=j.lastIndexOf(" ");j=j.substring(0,h);document.write(j+"&hellip;&#8221;</i></li>");document.write("")}}}};
//]]>
</script>
<script style=text/javascript >var a_rc=5;var m_rc=false;var n_rc=true;var o_rc=0;</script><script src='h**p://namablog.blogspot.com/feeds/comments/default?alt=json-in-script&amp;callback=showrecentcomments'></script>

Catatan:
Widget komentar terbaru akan ditampilkan dalam daftar urut (<ul>). Teks “On” menunjukkan pemisah antara nama komentator & dengan judul posting. Angka 5 menunjukkan jumlah komentar & angka 0 merupakan isi komentar serta jangan lupa mengganti nama blog dengan blog Anda.

Untuk demonstrasi dapat dilihat pada sidebar atau footer Optimasi Blog — Komentar Terakhir & Posting Terakhir.

Description: Widget Posting dan Komentar Terbaru yang Sederhana Rating: 5.0 Reviewer: Unknown ItemReviewed: Widget Posting dan Komentar Terbaru yang Sederhana

Optimalisasi Fungsi Peramban dalam Blogging

Jenis Peramban

Peramban merupakan perangkat lunak yang berfungsi menampilkan & melakukan interaksi dengan dokumen-dokumen yang disediakan oleh server web. Jenisnya pun bermacam-macam, antara lain Internet Explorer (IE), Firefox, Chrome, Opera dan lain-lain. Di antara beberapa peramban yang telah disebutkan tersebut, mungkin dapat kita kerucutkan menjadi dua yang paling sering digunakan, yakni Firefox & Chrome. Nah, posting ini akan sedikit menjelaskan tentang optimalisasi fungsi peramban melalui “Inspect Elements’ dan sejumlah ekstensi (add-ons) yang perlu diunduh untuk menunjang aktivitas blogging.

Inspect Elements

Fungsi ini dapat kita manfaatkan, ketika melakukan klik kanan pada sebuah halaman web agar mengetahui struktur pengkodean, namun jangan disalahgunakan untuk meniru secara menyeluruh format template. Oleh karena sebuah desain situs web atau blog mempunyai hak cipta bagi perancangnya, mungkin sebuah pengecualian jika kita meletakkan taut situs perancang & meminta izin, apakah kita boleh menggunakan desain tersebut.

Kembali pada fungsi “Inspect Elements”, ketika diklik akan muncul — di bagian bawah peramban — tab yang biasanya memiliki dua kolom, sebelah kiri adalah HTML (HyperText Markup Language) dan kanan adalah CSS (Cascading Style Sheets). Meskipun ia mampu menampilkan lebih dari sekedar HTML dan CSS, apabila ditelusuri lebih mendalam.

Bagi Anda yang suka utak-atik template, “Inspect Elements” sangat berguna untuk mengatur — menambah, mengurangi, atau memperbaiki pengkodean — tampilan sebuah situs web atau blog melalui CSS (sebelah kanan). Kemudian kode itu kita salin dan tempel pada “Notepad” atau perangkat lunak teks editor kesayangan Anda. Seiring dengan perubahan pengkodean, maka tampilan situs web atau blog pada layar peramban akan berubah pula sesuai dengan kustomisasi kode. Syaratnya halaman yang diperiksa dan dikustomisasi tersebut tidak direfresh.

Inspect Element Firefox
Fungsi “Inspect Element” pada peramban Firefox.
Inspect Element Chrome
Fungsi “Inspect Element” pada peramban Chrome.

Catatan: Untuk memeriksa elemen tertentu, Anda dapat memanfaatkan “Select elements” (dilingkari dengan warna merah), kemudian pilih elemen dengan melakukan klik kiri pada tetikus.

Ekstensi (add-ons)

Firebug — untuk mengetahui struktur pengkodean suatu situs web atau blog, jika Anda terbiasa untuk menggunakannya dibanding dengan default pada tiap-tiap peramban (Firefox dan Chrome).

Color Tools — untuk mengetahui pewarnaan yang ditampilkan pada layar peramban, kebanyakkan pengguna menggunakan ekstensi “ColorZilla” (Firefox dan Chrome). Namun untuk firefox, saya lebih memilih “Rainbow Color Tools”.

Font Style — untuk mengetahui pengaturan font & line-height, sehingga diharapkan mampu menjaga irama vertikal suatu teks, walaupun ditampilkan dalam ukuran yang berbeda (Firefox dan Chrome).

Screen Capture — untuk mengambil gambar (screenshot) pada suatu halaman yang ditampilkan oleh peramban dengan ekstensi “Awesome Screenshot” (Firefox dan Chrome). Namun pada Chrome, saya lebih memilih ekstensi “Screen Capture”.

HTML5 Outliner — untuk mengetahui struktur garis bentuk HTML5 pada suatu situs web atau blog yang biasanya diperlihatkan oleh baris judul pada masing-masing elemen (Firefox dan Chrome).

HTML Microdata — untuk mengecek struktur microdata yang terdapat dalam suatu situs web atau blog. Sementara saya hanya menggunakan “Semantic Inspector” khusus pada Chrome.

Users Online — ekstensi ini dapat digunakan setelah terlebih dulu memasang script dari http://whos.amung.us, kemudian masukkan 8 – 12 karakter sitekey sesuai kode script yang dipasang dalam situs web atau blog. Umumnya penggunaan ekstensi ini adalah pada script whos.amung.us yang disembunyikan atau tidak menampilkan widget status online (Firefox dan Chrome).

Web Developer — untuk menambah sekumpulan alat yang dapat dimanfaatkan sebagai analisis rinci pada situs web atau blog. Biasanya saya menggunakannya untuk men-disable all style dalam CSS (Firefox dan Chrome).

Fungsi & ekstensi (add-ons) yang telah disebutkan di atas, hanya sebagian kecil yang mungkin dapat digunakan dalam aktivitas blogging. Tinggal sejauh mana upaya kita agar penggunaannya dapat optimal, terutama bagi peramban kesayangan. Hal ini diharapkan agar blogging bukan hanya dipandang sebuah aktivitas menulis atau menerbitkan posting semata, namun akan lebih memiliki nilai jika kita mampu belajar memahami & menyelami markah yang terkandung didalamnya. Expert? Tidak juga.

Description: Optimalisasi Fungsi Peramban dalam Blogging Rating: 5.0 Reviewer: Unknown ItemReviewed: Optimalisasi Fungsi Peramban dalam Blogging

Judul dan Deskripsi dalam Blog

Kita pasti sering menggunakan mesin penelusur untuk mencari sesuatu yang dibutuhkan. Khusus untuk informasi posting, biasanya hasil pencarian akan menunjukkan judul, URL (Uniform Resource Locator), dan deskripsi. Opsional, jika kata kunci yang diketik oleh pengguna mempunyai kesesuaian yang sangat nyata dengan judul & deskripsi blog serta posting didalamnya, maka pada baris bagian bawah akan muncul rekomendasi beberapa tautan yang mengarah pada alamat blog tersebut atau lebih dikenal dengan sebutan sitelink.

Dari paragraf di atas, judul & deskripsi dalam blog merupakan unsur dasar dalam SEO yang meliputi dua elemen penting, yakni blog dan halaman blog. Setiap Judul haruslah unik dan akurat. Unik karena format struktur yang tidak mempunyai persamaan identik dengan judul lain dan akurat karena menggambarkan isi konten atau posting dalam sebuah blog. Sedangkan deskripsi merupakan ringkasan yang dapat didefinisikan untuk setiap halaman, mungkin berisi satu atau dua kalimat atau paragraf pendek.

Judul

Judul akan ditampilkan dalam hasil pencarian & ketika membuka halaman pada hasil penelusuran, maka judul akan tampil pada tab peramban. Begitu pula ketika pengguna mengetikkan kata kunci lebih spesifik, maka hasil pencarian akan menampilkan sesuai dengan kata kunci tersebut. Biasanya judul diindasikan dengan menggunakan title tag yang berada antara <head> … </head>, seperti yang telah diulas dalam Tips Search Engine Optimization (SEO) pada Blogger.com.

<title>
<b:if cond='data:blog.homepageUrl == data:blog.url'>
<data:blog.title/>
<b:else/>
<data:blog.pageName/> | <data:blog.title/>
</b:if>
</title>

Berikut beberapa hal yang perlu kita lakukan dalam membuat judul:

  • Memilih judul yang secara efektif mengkomunikasikan topik dari konten halaman. Ini akan membantu mesin penelusur untuk menemukan obyek yang tepat, ketika pengguna mengetikkan kata kunci tertentu. Hindari penggunaan judul yang tidak ada hubungannnya dengan isi blog & menggunakan judul secara tersamar, seperti: “Tanpa Judul”, “Halaman Baru”.
  • Menggunakan judul yang unik di setiap halaman. Setiap halaman blog idealnya harus memiliki tag judul yang unik, sehingga mesin penelusur mengetahui bagaimana halaman tersebut berbeda dari yang lain.
  • Menggunakan judul yang singkat tapi deskriptif. Judul semestinya dapat dipersingkat & informatif, karena judul yang panjang mungkin tidak akan banyak membantu pengguna. Apalagi ketika sebuah judul dimasukkan kata-kata kunci yang tidak dibutuhkan serta berlebihan.

Deskripsi

Deskripsi dalam blog diwujudkan dalam description meta tags, dimana khusus untuk Blogger™ default akan berada pada markah <b:include data='blog' name='all-head-content'/>. Bagaimana jika tidak ada, mungkin karena modifikasi atau kustomisasi tiap template, maka kita dapat menambahkan secara manual.

<b:if cond='data:blog.metaDescription != &quot;&quot;'>
<meta expr:content='data:blog.metaDescription' name='description'/>
</b:if>

Deskripsi blog dapat kita kostumisasi melalui pengaturan pada dashboard Blogger™, seperti yang telah ditulis dalam posting Kustomisasi Setelan pada Preferensi Penelusuran. Sedangkan untuk halaman posting & statis, berada pada menu pengaturan sebelah kanan editor posting.

Deskripsi Halaman Posting atau Statis

Meta tag deskripsi berguna sebagai ringkasan dari keseluruhan isi blog dan “mungkin” mesin penelusur akan menampilkan deskripsi tersebut — jika benar-benar relevan — sesuai & cocok dengan permintaan pengguna. Berikut beberapa hal yang perlu kita lakukan dalam membuat deskripsi:

  • Tulis desktipsi yang menginformasikan & demi kepentingan pengguna jika mereka melihat deskripsi tersebut sebagai potongan dalam hasil pencarian. Hindari menulis meta tag deskripsi yang tidak ada hubungannya dengan isi dari halaman, menggunakan deskripsi yang umum seperti “Ini adalah halaman web” atau “Halaman tentang blog”, mengisi deskripsi hanya dengan kata kunci, serta menyalin & menyisipkan seluruh isi dokumen ke dalam meta tag deskripsi.
  • Menggunakan deskripsi yang unik untuk setiap halaman, sehingga membantu mesin penelusur & pengguna untuk menemukan ringkasan yang jelas tentang apa isi halaman blog tersebut. Oleh karena halaman sebuah blog adalah unik, maka hindari penggunaan deskripsi tunggal untuk setiap halaman.

Sumber: General guidelines Search Engine Optimization (SEO).

Description: Judul dan Deskripsi dalam Blog Rating: 5.0 Reviewer: Unknown ItemReviewed: Judul dan Deskripsi dalam Blog

Pemahaman yang saklak tentang SEO

Kita mempunyai suatu branding dan — tidak munafik — ingin dikenal. Bagaimana caranya agar dikenal? Yah, diberitahukan kepada orang-orang bahwa, ini adalah branding saya. Bagaimana orang itu tahu, kalau orang-orang sudah kenal dengan branding-nya — sebuah generalisasi sederhana — cari di mesin penelusur.

Umumnya SEO (Search Engine Optimization) merupakan usaha optimalisasi situs web atau blog agar mendapat perhatian dari mesin penelusur, sehingga ketika pengguna mengetikkan kata kunci tertentu, diharapkan halaman situs web atau blog tersebut akan muncul pada hasil pencarian. Apabila kita hanya terfokus pada frase kata mesin pencari, maka akan terjebak dengan pemikiran yang saklak tentang pemahaman makna sebenarnya yang terkandung dalam SEO itu sendiri. Sangat dimungkinkan timbul beberapa paradigma yang berpendapat bahwa SEO itu rumit, SEO itu perlu sekolah, & sebagainya. Kembali pada ilustrasi di atas, apakah hal tersebut akan menafikan proses SEO dalam aktivitas blogging Anda? Ya, tentu saja tidak. Terkecuali Anda adalah seseorang yang populer, memiliki banyak partner & follower atau hal-hal lain di luar kebiasaan.

Mungkin Anda adalah pembaca setia “Optimasi Blog”, kemudian pernah membaca beberapa posting tentang tips SEO. Mari kita kesampingkan dulu posting-posting itu & mulai dengan dua posting terakhir dengan label SEO, yakni Tips Search Engine Optimization (SEO) pada Blogger.com dan Tips SEO pada Blogger.com Bagian Kedua. Adakah hal-hal rumit tentang SEO? Apakah kita perlu menghitung jumlah kata dalam sebuah posting? Apakah satu atau lebih kata kunci harus ditekan secara berulang-ulang? Apakah dengan memberi tanda-tanda tertentu pada kata kunci akan meningkatkan peringkat pencarian?

Ketika kita mulai berpikir tentang pertanyaan-pertanyaan itu, maka kita pun akan terjatuh pada penilaian yang saklak akan makna sebenarnya dari SEO. Bukankah terdapat keterkaitan dengan “selalu dihubungkan dengan mesin pencari”? Antara keduanya memiliki keterkaitan yang jelas, namun dalam ruang lingkup yang berbeda. Daerah yang satu menggambarkan lingkup dalam sebuah branding, sedangkan yang lain diluar lingkup branding.

Ketika kita telah memutuskan tentang apa yang akan & patut dijadikan produk, sangat dimungkinkan pula kita telah menemukan merek yang tepat untuk produk tersebut. Jika dihubungkan dengan aktivitas blogging, produk yang dimaksud adalah berupa kumpulan catatan posting atau artikel. Selanjutnya, secara rutin posting — yang diterbitkan — diupayakan tidak terlepas dengan merek yang telah kita tetapkan. Satu keunikkan dari situs web atau blog telah muncul, yaitu merek & produk saling terkait. Ini adalah branding Anda.

Pengguna yang membutuhkan suatu informasi tertentu akan mencari pada mesin telusur dengan kata kunci yang ia butuhkan. Mungkin halaman situs web atau blog Anda akan muncul pada hasil pencarian & pengguna pun mengunjunginya. Ternyata halaman itu memang berisi informasi yang mereka butuhkan. Penyajian yang segar serta tersusun dengan bahasa yang baik, ia pun betah membacanya. Tidak menutup kemungkinan, pengguna akan membaca posting lain karena informasi yang dibutuhkannya memiliki keterkaitan.

Simpulan

Secara sadar atau tidak sadar, dimulai dari rancangan sebuah situs web atau blog sampai dengan pembaharuan posting yang sesuai serta terkait dengan tema, kita telah masuk ke dalam SEO. Oleh karena ia bukan hasil dari pemikiran yang saklak, harus mesin pencari atau sejumlah usaha keras utak-atik untuk mendapatkan peringkat dalam hasil organik. Tetapi lebih kepada target kebutuhan pengguna yang menjadi konsumen utama kita. Ketika blog ini berbicara tentang “SEO”, mungkin akan sesuai dengan pindaian Anda bahwa temanya adalah “Optimasi Blog”. Bagaimana jika menerbitkan tentang kisah “Selebritis”? Anda juga yang akan menilai.

Description: Pemahaman yang saklak tentang SEO Rating: 5.0 Reviewer: Unknown ItemReviewed: Pemahaman yang saklak tentang SEO

Desain Blog dan Aksesibilitas

Aksesibilitas

Ketika berbicara tentang desain, umumnya kerap dihubungkan dengan desain antarmuka (front-end). Yah, sebuah tampilan dari baris markah yang dipertunjukkan oleh layar peramban, sehingga tidak lebih dari sekedar tampilan grafis yang dimaknai dengan sekumpulan kode-kode. Apabila hal ini berkelanjutan — mungkin menjadi sebuah #trending topics — maka jangan terkejut, jika kelak desain yang diartikan seperti tersebut di atas akan tidak bisa diakses oleh suatu peralatan tertentu.

Blog merupakan catatan di web yang tersusun oleh posting/artikel, biasa diurut berdasarkan akhir sampai awal penerbitan. Umumnya sebuah blog merupakan media berbagi, dimana pengelola, penulis, & pengunjung saling berinteraksi. Mungkin pula interaksi tersebut berjalan satu arah, penulis menerbitkan posting/artikel, sedangkan pengunjung cuma mencerna isinya, tanpa perlu ada aksi tertentu. Desain blog berisi karakter unik — HTML, XHTML, CSS, JS, PHP, dan sebagainya — tergantung pada mesin blogger yang mendukungnya.

Ketika kita memandang desain web adalah sebuah sistem, kita tidak dapat melepaskan aksesibilitas (dan usabilitas) di dalamnya. Saya berpendapat bahwa tujuan dari desain antarmuka adalah untuk menunjang aksesibilitas & usabilitas, bukan sebaliknya.

Kembali ke paragraf pertama, Jangan terkejut, jika kelak desain yang diartikan seperti tersebut di atas akan tidak bisa diakses oleh suatu peralatan tertentu. Mungkin sebagian dari kita, lebih mengutamakan tampilan desain yang cool serta elegen. Namun yang pasti, sebuah desain jangan meninggalkan satu poin penting, yakni aksesibilitas. Oleh karena aksesibilitas bukan hanya untuk memfasilitasi penyandang disabilitas, tetapi aksesibilitas itu untuk semua.

Catatan: Posting ini merupakan pembelajaran & dokumentasi penulis tentang aksesibilitas serta usabilitas.

Description: Desain Blog dan Aksesibilitas Rating: 5.0 Reviewer: Unknown ItemReviewed: Desain Blog dan Aksesibilitas