30 Kasım 2015 Pazartesi

Angular JS ' ye Giriş

Merhabalar bugün Angular JS hakkında bildiklerimi paylaşmak istiyorum.  Angular JS ye başlangıcım araştırma ve ufak bir proje vesilesi ile gerçekleşti. İyi ki araştırma yapmışım böylesine muazzam bir konu hakkında bilgimin olmaması ve getirmiş olduğu kolaylıkların farkında olmamak kötü bir his uyandırırdı.  Angular JS, basit tabirle google standartlarına uygun ve desteklediği, javascript tabanlı bir MVC kütüphanesidir. MVC (Modal View Controller) verideki , görünümün ve kontrollerinin farklı tutulmasına dayanır.
Html etiketlerine (tag) çeşitli özellikler (attribute) ekleyerek, Html’i genişleterek hızlı bir şekilde ve kolayca dinamik web aplikasyonları oluşturmamızı sağlar
Angular JS çalışmak için jQuery gibi kütüphanelere ihtiyaç duymamıza gerek yoktur. Karmaşıklık yok denilebilecek kadar az olup az kod ile çok iş yapmakta mümkündür ki bana göre en güzel tarafı budur yani çift taraflı çalışması (two way binding). Mesela bir inputtaki değeri değiştirdiğinizde anlık olarak belirlenmiş olan span içeriğindeki veride değişir .
Angular JS yaklaşık 100KB dır ve resmi sitesi https://angularjs.org/ dır.
Kod yapısında  <head> tagları arasına
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
Scripti eklendiği takdirde Angular JS yi indirmeden direk sitesindeki kütüphaneyide kullanabilirsiniz.
Angular JS çeşitli bileşenleri içeren modüller halinde düzenlenmiştir. Bu bileşenler Direktifler (directives), hizmetler (services), sağlayıcılar (providers), Tipler (types), genel apiler dir.

Angular kütüphaneleri.
ng : angularJS nin temel modüllerini içerir. Bir angularJS uygulaması başlatıldığında bu modül varsayılan olarak yüklenir.
ngRoute : Uygulamada url yönetimi yapılmasını sağlamak için kullanılır. (angular-route.js)
ngAnimate: Uygulamada animasyon özellikleri için kullanılır. (angular-animate.js)
ngResource : Rest api veri yönetimi için kullanılır. (angular-resource.js)
ngCookies: Cookie yönetimini sağlar. (angular-cookies.js)
ngTouch: Mobil tarayıcılar için geliştirilen uygulamalarda kullanılır. (angular-touch.js)
ngSanitize: HTML verilerini güvenli bir şekilde ayrıştırmak ve işlemek için kullanılır. (angular-sanitize.js)
ngMock: Test modülleri için kullanılır. (angular-mock.js)

Ayrıca Angular, hiç js kodu yazmadan, template kısmında koşullu ifadeler ve deyimlerle çalışma olanağı sağlar ki işin en güzel tarafı budur diyebiliriz . Şimdi yavaştan örneklerimize geçelim. Örneklerimiz ile  Neden Angular JS  ?
Sorusuna cevabı kendiniz vereceksiniz.


Uygulama-1: İlk uygulamamız bir text içerisindeki yazıyı span içerisine uygulamak olsun.
İlk olarak html bir sayfa oluşturalım ve head kısmında angularJS kütüphanesini sayfamıza tanımlayalım.
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>

<html> olarak oluşan sayfamızda Angular JS uygulamasını kullanabilmek için  
<html> tagları arasına ng-app  ekleyerek <html ng-app>  yapıyoruz. Buradaki amaç kodların bir nevi Angular JS ile taranması demek oluyor. Sonra input tanımlayarak ng-model ile bir değişken adı tanımlayalım.
ng-model  directive scope’unuzda bir değişken tanımlanızı sağlar ve bu değişkenin binding’ini ilgili elementin value’usu veya text’i olarak ayarlar. Burada two way binding (çift taraflı bağlama) kurulur.
- {{isminiz}}: çift süslü parantezler arasına scope içerisinde tanımlanan değişkenleri kullanarak bunları ekranda gösterebilir veya çeşitli işlemlere sokabiliriz.
 

Ekranda göründüğü gibi text alanına Dünya yazarak hiçbir  javascript kodu yazmadan anlık “Merhaba Dünya” yazısı yazıldı.
KAYNAK KODLARI
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html ng-app>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<title>Oktay ALTAN - Angular JS</title>
</head>
<body>
 <input type="text" ng-model="isminiz" placeholder="Adınızı Giriniz"> <br/>
<span>Merhaba {{isminiz}}</span>
</body>
</html>
Uygulama-2 : deger adlı değişken; bir, iki ve üç butonlarına tıklandığında sırasıyla birinci,ikinci ve ucuncu değerlerini alıyor. ng-show ile true false kontrolü yapılır. Eger true ise span içerisindeki içerik veya yazılar yazılır.

KAYNAK KODLARI
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html ng-app>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<title>Oktay ALTAN - Angular JS</title>
</head>
<body>
<section ng-app ng-init="deger = 1">
  <h2>Hangi butona basıldığı kontrolü</h2>
  <div>
    <button ng-click="deger = '1'">bir</button>
    <button ng-click="deger = '2'">iki</button>
    <button ng-click="deger = '3'">uc</button>
  </div> 
  <div>
    <span ng-show="deger == '1'">birinci</span>
    <span ng-show="deger == '2'">ikinci</span>
    <span ng-show="deger == '3'">ucuncu</span>   
  </div>
</section>
</body>
</html>

Uygulama-3: Angula JS  ile matematiksel işlemlerin nasıl yapıldığına dair ufak bir uygulama yapalım .
Bu örnekte ng-model ile tanımlamış olduğumuz iki değişkeni <div> ler içerisinde işlemlere tabi tutarak sonuç elde edeceğiz.
ng-init değişken içerisindeki ilk değer anlamına geliyor. 


KAYNAK KODLARI
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html ng-app>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<title>Oktay ALTAN - Angular JS</title>
</head>
<body>
<section ng-app ng-init="sayi_2 = 3; sayi_1 = 25">
  <section>
    <h2>Oktay İle Angular matematiksel işlemler</h2>
    Birinci sayı: <input type="text" ng-model="sayi_1"/>
    İkinci sayı: <input type="text" ng-model="sayi_2"/>
    <hr />  
    <div>
      {{ sayi_1 }} - {{ sayi_2 }} =  {{ sayi_1 - sayi_2 }}
    </div>
    <div>
      {{ sayi_1 }} * {{ sayi_2 }} =  {{ sayi_1 * sayi_2 }}
    </div>
    <div>
      {{ sayi_1 }} / {{ sayi_2 }} =  {{ sayi_1 / sayi_2 }}
    </div>
    <div>
      {{ sayi_1 }} % {{ sayi_2 }} =  {{ sayi_1 % sayi_2 }}
    </div> 
  </section>
</section>
</body>
</html>




Uygulama-4: Bu uygulamamızda 12 sayı verip girilen rakamlara göre filtreleme yapalım. ng-repeat ng-modul e ait bir directive dir. Array içindeki nesnelere sıralı erişim sağlar.


 KAYNAK KODLARI
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html ng-app>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<title>Oktay ALTAN - Angular JS</title></head>
<body>
<section ng-app ng-init="sayilar = [45, 658, 548, 358, 154, 69, 48, 87, 451, 35, 680, 15]">
  <h2>AngularJS ng-repepat ve filter</h2>
  Sayıları içerdiği rakama göre filtreleyin: <input ng-model="rakam" />
  Bulunan öğe sayısı: {{ (sayilar | filter: rakam ).length }}
  <hr />
  <div>
    <span class="oge" ng-repeat="sayi in sayilar | filter: rakam">
      {{sayi}}
    </span>
  </div>
</section>
</section>
</body>
</html>
Uygulama-5: Uygulamamız not ekleme ve silme işlemi yapıyor olsun. Burada not ekleme ve silme adımları için 2 satırlık javascript kodu kodlandık. 



<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
       
        <script type="text/javascript">

            function notcontroller($scope) {
                $scope.notlar = [];

                $scope.notekle = function () {
                    $scope.notlar.push({ ad: $scope.notadi });
                    $scope.notadi = "";
                }

                $scope.notsil = function (ind) {
                    $scope.notlar.splice(ind, 1);
                };
            }

        </script>
    </head>
    <body ng-app>
        <div ng-controller="notcontroller">

            <input type="text" name="not" id="not" ng-model="notadi"/>
            <a href="javascript:void(0);" ng-click="notekle()">Ekle</a>


            <ul ng-repeat="not in notlar">
                <li>{{$index}} - {{not.ad}} <a href="#" ng-click="notsil($index)">sil</a> </li>
            </ul>

        </div>
    </body>
</html>











Uygulama-6: Kisiler listemiz olsun ve bu listeyi ng-repeat ile ekrana yazalım. Filtre için ve order by için de inputlar ekleyelim ve ister ad a göre istersede yaş a göre filtrelere yapıldın.

KAYNAK KODLARI
<html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>      
        <script type="text/javascript">
          function listecontroller($scope){
    $scope.kisiler = [
      {ad:'Bilge', yas:32, cinsiyet:'K'}
      ,{ad:'Okan', yas:12, cinsiyet:'E'}
      ,{ad:'Ahmet', yas:18, cinsiyet:'E'}
      ,{ad:'Mehmet', yas:25, cinsiyet:'E'}

    ];   
    $scope.order_cols = [{v:'ad',t:"Ad"},{v:'yas',t:"Yaş"},{v:'cinsiyet',t:'Cinsiyet'}];
    $scope.order_types = [{v:true,t:"Azalan"},{v:false,t:'Artan'}];
   
    $scope.order_col=$scope.order_cols[0];
    $scope.order_typ=$scope.order_types[0];
   
    $scope.format = function(k){
        //k.cinsiyet setlenirse kisiler nesnedeki değer güncellenmiş olur.
        if(k.cinsiyet == "E")
            k.cinsiyetformat = "Bay"
        else
            k.cinsiyetformat = "Bayan"
    }
}

        </script>
    </head>
    <body ng-app>
<div ng-app>
    <div ng-controller="listecontroller">
        <input type="ara" ng-model="k.$" placeholder="ara..." />
        <input type="ara" ng-model="k.ad" placeholder="ad..." />
        <input type="ara" ng-model="k.yas" placeholder="yas..." />
       
        <select ng-model="order_col" ng-options="i.t for i in order_cols">
        </select>

        <select ng-model="order_typ" ng-options="i.t for i in order_types">
        </select>
       
        <div ng-repeat="k in kisiler | filter:k | orderBy:order_col.v:order_typ.v"  ng-init="format(k);">
            <div ng-show="$first">Kişiler</div>
            <div class="even{{$even}}">{{$index+1}} -> {{k.ad}} - {{k.yas}} - {{k.cinsiyetformat}}</div>
            <div ng-show="$last">Toplam {{kisiler.length}} kayıt</div>
        </div>
    </div></div>
    </body>
</html>
Uygulama-7: İşin içine birazda CSS karıştırıp Kişi ekleyip silebileceğimiz bir arama uygulaması yapalım.


KAYNAK KODLARI
<!DOCTYPE html>
<html ng-app>
<head>
<script  src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<script src="http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script>
function ctrl($scope){
  $scope.rows = ['Ali'];
  $scope.temp = false;
 
  $scope.addRow = function(){
    $scope.temp = false;
    $scope.addName="";
  };
 
  $scope.deleteRow = function(row){
    $scope.rows.splice($scope.rows.indexOf(row),1);
  };
 
  $scope.plural = function (tab){
    return tab.length > 1 ? 's': '';
  };
 
  $scope.addTemp = function(){
    if($scope.temp) $scope.rows.pop();
    else if($scope.addName) $scope.temp = true;
   
    if($scope.addName) $scope.rows.push($scope.addName);
    else $scope.temp = false;
  };
 
  $scope.isTemp = function(i){
    return i==$scope.rows.length-1 && $scope.temp;
  };
 
}
</script>
<meta charset=utf-8 />
<title>Oktay ALTAN - Angular JS</title>
</head>
<style>
body{
  padding:20px;
}
.search{
  margin-left:10px;
}
</style>
<body ng-controller="ctrl">
  <h2>{{rows.length}} Kişi <span ng-show="temp">?<small class="muted"><em > (Şuanda {{rows.length-1}} kişi bulunmakta....)</em></small></span></h2>
  <form class="form-horizontal">
  <span ng-class="{'input-append':addName}">
    <input id="add" type="text" placeholder="Eklenecek Kişiyi yazınız..." ng-model="addName" ng-change="addTemp()"/>
    <input type="submit" class="btn btn-primary" ng-click="addRow()" ng-show="addName" value="+ Ekle"/>
    </span>

    <span class="search input-prepend" ng-class="{'input-append':search}">
      <span class="add-on"><i class="icon-search"></i></span>
  <input type="text" class="span2"  placeholder="Kişi Ara..." ng-model="search">
    <button type="submit" class="btn btn-inverse" ng-click="search=''" ng-show="search" ><i class="icon-remove icon-white"></i></button>
</span>
  </form>
  <table  class="table table-striped">
    <tr ng-repeat="row in rows | filter : search"  ng-class="{'muted':isTemp($index)}">
      <td>{{$index+1}}</td>
      <td>{{row}}</td>
      <td>
        <button class="btn btn-danger btn-mini" ng-click="deleteRow(row)" ng-hide="isTemp($index)"><image src="images.png"/></button>
      </td>
    </tr>
  </table>
 
</body>
</html>



Uygulama-8: Basit bir  Search uygulaması.

KAYNAK KODLARI
<html>
<head>
<meta Charset = "utf-8"/>

<script  src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js"></script>

<script>
var app = angular.module("icerikara", []);
app.filter('searchFor', function(){

                return function(arr, searchString){

                               if(!searchString){
                                               return arr;
                               }

                               var result = [];

                               searchString = searchString.toLowerCase();

                               angular.forEach(arr, function(item){

                                               if(item.title.toLowerCase().indexOf(searchString) !== -1){
                                                               result.push(item);
                                               }

                               });

                               return result;
                };

});



function InstantSearchController($scope){


                $scope.items = [
                               {
                                               url: 'http://vodafoninternet.com/',
                                               title: 'Vodafone Çağrı Merkezi',
                                               image: 'http://emrereklamcilik.com/_sn2/module/sa2_resize.aspx?f=/upload/image/logo/_vodafone.jpg&w=100&h=100'
                               },
                               {
                                               url: 'http://www.superonlinenet.net/',
                                               title: 'Turkcell Çağrı Merkezi',
                                               image: 'https://yt3.ggpht.com/-rD0D5bABe0A/AAAAAAAAAAI/AAAAAAAAAAA/CeNphd6R_Ig/s100-c-k-no/photo.jpg'
                               },
                               {
                                               url: 'http://ruyaavcisi.com/',
                                               title: 'Güzel Sanatlar Resim Kursu',
                                               image: 'https://yt3.ggpht.com/-s7xB-bzutE4/AAAAAAAAAAI/AAAAAAAAAAA/c_uYEUbOyQE/s100-c-k-no/photo.jpg'
                               },
                               {
                                               url: 'http://erdemins.com/',
                                               title: 'Erdem İnşaat Sitesi',
                                               image: 'http://www.bedava.biz.tr/css/images/reklam4.png'
                               },
                               {
                                               url: 'http://duvarressami.net/',
                                               title: 'Duvar Ressamı ',
                                               image: 'http://cdn.tutorialzine.com/wp-content/uploads/2013/05/featured-100x100.jpg'
                               },
                              
                ];

}
</script>
<style>
*{
                margin:0;
                padding:0;
}

body{
                font:15px/1.3 'Open Sans', sans-serif;
                color: #5e5b64;
                text-align:center;
}

a, a:visited {
                outline:none;
                color:#389dc1;
}

a:hover{
                text-decoration:none;
}

section, footer, header, aside, nav{
                display: block;
}



.bar{
                background-color:#5c9bb7;

                background-image:-webkit-linear-gradient(top, #5c9bb7, #5392ad);
                background-image:-moz-linear-gradient(top, #5c9bb7, #5392ad);
                background-image:linear-gradient(top, #5c9bb7, #5392ad);

                box-shadow: 0 1px 1px #ccc;
                border-radius: 2px;
                width: 400px;
                padding: 14px;
                margin: 45px auto 20px;
                position:relative;
}

.bar input{
                background:#fff no-repeat 13px 13px;
                background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkU5NEY0RTlFMTA4NzExRTM5RTEzQkFBQzMyRjkyQzVBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkU5NEY0RTlGMTA4NzExRTM5RTEzQkFBQzMyRjkyQzVBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RTk0RjRFOUMxMDg3MTFFMzlFMTNCQUFDMzJGOTJDNUEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RTk0RjRFOUQxMDg3MTFFMzlFMTNCQUFDMzJGOTJDNUEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4DjA/RAAABK0lEQVR42pTSQUdEURjG8dOY0TqmPkGmRcqYD9CmzZAWJRHVRIa0iFYtM6uofYaiEW2SRJtEi9YxIklp07ZkWswu0v/wnByve7vm5ee8M+85zz1jbt9Os+WiGkYdYxjCOx5wgFeXUHmtBSzpcCGa+5BJTCjEP+0nKWAT8xqe4ArPGEEVC1hHEbs2oBwdXkM7mj/JLZrad437sCGHOfUtcziutuYu2v8XUFF/4f6vMK/YgAH1HxkBYV60AR31gxkBYd6xAeF3VzMCwvzOBpypX8V4yuFRzX2d2gD/l5yjH4fYQEnzkj4fae5rJulF2sMXVrAsaTWttRFu4Osb+1jEDT71/ZveyhouTch2fINQL9hKefKjuYFfuznXWzXMTabyrvfyIV3M4vhXgAEAUMs7K0J9UJAAAAAASUVORK5CYII=);

                border: none;
                width: 100%;
                line-height: 19px;
                padding: 11px 0;

                border-radius: 2px;
                box-shadow: 0 2px 8px #c4c4c4 inset;
                text-align: left;
                font-size: 14px;
                font-family: inherit;
                color: #738289;
                font-weight: bold;
                outline: none;
                text-indent: 40px;
}

ul{
                list-style: none;
                width: 428px;
                margin: 0 auto;
                text-align: left;
}

ul li{
                border-bottom: 1px solid #ddd;
                padding: 10px;
                overflow: hidden;
}

ul li img{
                width:60px;
                height:60px;
                float:left;
                border:none;
}

ul li p{
                margin-left: 75px;
                font-weight: bold;
                padding-top: 12px;
                color:#6e7a7f;
}
</style>
</head>
<body>
<div ng-app="icerikara" ng-controller="InstantSearchController">

                <div class="bar">
                               <input type="text" ng-model="searchString" placeholder="Yapmış olduğum bazı siteler..." tabindex="1" autofocus/>
                </div>

                <ul>
                               <li ng-repeat="i in items | searchFor:searchString">
                                               <a href="{{i.url}}"><img ng-src="{{i.image}}" /></a>
                                               <p>{{i.title}}</p>
                               </li>
                </ul>
</div>
</body>
</html>


11 Ocak 2015 Pazar

SEO Nedir ?

Merhabalar arkadaşlar bugün sizlerle seo hakkında paylaşım yapacağım. Öncelikle nedir bu SEO diyerek başlıyabiliriz. Seo ingilizce olarak  Search Engine Optimization yani Arama Motoru Optimizasyonu kelimesinin baş harflerinden oluşur. Türkçemizde Arama Motoru Optimizasyonundan çok  Seo kelimesi yaygın kullanıldığı için bizde Seo kelimesini kullanacağız. Seo, Arama motorlarında sitelerin veya sayfaların üst sıralara çıkarılmasına yönelik yapılan çalışmaları kapsar. Bu amaç da, sitelerde yer alan bilgi, hizmet veya satışların daha fazla ilgili kitleye ulaştırılmasını sağlamaktır. Böylece siteye gelen ziyaretçi kitlesi artar ve site daha fazla kitleye hitap eder. Bunu şüphesiz ki herkes ister. Seo bir nevi organik yollarla popülarite sağlama sanatıdır ve biz bu sanat ile üst sıralara tırmanmak isteriz. Google bir sitenin popüler olmaya başladığını, ziyaretçi sayısının düzenli artışından ve site hakkında yapılan link ve bilgilendirme paylaşımlarından anlamaktadır. Bu paylaşımların kanalları ve sayısı arttıkça popülarite daha doğal ve sağlam bir yapıya kavuşmaktadır. Ve bu şekilde zamanla site Google da üst sıralara çıkar. Google bilgi almaktan hoşlanır . Aldığı bilgileri robotları sayesinde değerlendirip sitenin hakkını vermeye çalışır. Yani sayfaya ziyaretçi fazla geliyorsa, saygın siteler (PR değeri yüksek siteler ) sitenize yönlendirme yapıyorsa Google bunu göz önünde bulundurup sitenizi üst sıralara çıkarır.
Peki nasıl üst sıralara çıkarım ?
Üst sıralara çıkmak düşünüldüğü kadar basit bir şey değildir. Sitemizi üst sıralara çıkarmak için yapılan çalışmaları Google organik yani ziyaretçilerin önerisi olarak algılamalı.
Doğal popülarite anlayışı içerisinde, yapılan paylaşım ve tüm seo çalışmaları site sahibinin bilgisi dışında yapılan çalışmalar olarak görülmelidir. Bu sayede kullanıcıların siteyi faydalı bularak çeşitli paylaşımlarda bulunduğu izlenimi doğmaktadır.
Sitedeki bir makalenin forumlarda, sosyal medyalarda, imleme sitelerinde gibi seoya katkı sağlayan ortamlarda paylaşılması kullanıcı eliyle yapılıyormuş izlenimi taşımalı ve sitelerin kullanıcıya gerçekten hizmet eden faydalı siteler olduğu olgusu oluşturulmalıdır.
Doğallık algısının temelini oluşturan en önemli özellik çeşitliliktir. Tek elden yürütülen çalışmaların doğal görünmemesinin sebebi budur. Bu sebeple yapılan çalışmaların yapısı, zamanı, uygulama biçimi ve sayısı gibi kriterlerin çeşitlilik arz etmesi sitenin doğal ve kalıcı yükselmesini sağlamaktadır.
Seo ile Backlink Arasındaki İlişki
Backlink seo çalışmaları için önemli bir rol oynamaktadır. Seo sürecinde ki en faydalı yöntemlerden biridir. Linklerle yönlendirme yapmak için kullanılır. Örneğin başka bir sitede sizin site de sizin sitenizin linki bulunmakta , kullanıcılar da bu sayede o siteden direkt olarak sizin sitenize yönleniyorlar. Eğer bu fırsat değerlendirilip kalite bir içerik o kişiye sunulursa sitenize bir yeni aktif kullanıcı daha eklenmiş olacaktır. Backlink yöntemiyle bu mümkün.
Sadece backlink yaparak başarı sağlanması beklenemez. Site içeriğinin özgün ve kaliteli olması da çok önemlidir. Site içeriği başarısız ise kullanıcı tekrar siteye gelmeyecektir. Google’nin bu konuda hassasiyeti çok büyüktür. Özgün içeriğe sahip değilseniz google sitenizden tüm desteğinin çekecektir ve bu nedenle de google analytcs veya webmasters gibi yapılara kayıt dahi alınmayacaktır.
İnternet üzerinden ücretsiz olarak backlink yapan siteler mevcuttur. Backlink yönteminin uzun vadeli olması gerekmektedir ve sürekli geliştirme çalışmaları yapılmalıdır.Kısa süreli backlink hizmeti kullanacak olursanız ve bu takip etmezseniz backlink hizmetiniz bittiğinde siteniz ani düşüşler yaşayacaktır. Bu düşüşten sonra toparlanma süreci zor olacaktır. Yeniden backlink hizmeti sağlasanız bile tam olarak verim elde edemeyebilirsiniz.
Backlink yöntemi kullanılarak ve bilinirliğinizi artırabilirsiniz. Bunu yaparken kaliteli sitelerden backlink yapılması çok önemlidir. Verim almak için iyi bir referansa sahip olmak gerekiyor. Örneğin ; bir işe gireceksiniz bunun için firma sizden referans isteyecektir. Referansınız ne kadar iyi olursa sizde o kadar ön planda olursunuz. Backlink ile birlikte iyi bir referansa sahip olursanız sitenizde o ölçüde gelişecektir. Bunun için de iyi bir araştırma yapmak gerekiyor . Backlink yaparken aceleci davranmak yanlış olacaktır. Sağlam atılan adımlarla iyi bir referans bulunup o siteden backlink alınmalıdır. İyi bir referanstan kasıt ise özgün ve kaliteli bir içeriğe sahip , yüksek popülarite puanına sahip , google tarafından destekli ve ziyaretçi sayısı yüksek olan siteler sizin için iyi bir referans olacaktır.
Backlink yöntemin de pagerank puanı denilen bir kavram vardır. Backlink yaptığınız sitenin pagerank puanı ne kadar yüksekse sizin de pagerank puanınız o kadar yükselecektir. Mesela pagerank puanı 0 olan siteden 25 link alınacağına pagerank puanı 5 olan siteden 2 link almanız daha mantıklı olacaktır. Pagerank sorguları için bir çok araç vardır ( http://wmaraci.com/coklu-pagerank-sorgulama ) buralardan sitelerin pagerank değerlerine bakabilirsiniz.  Ayrıca şunuda belirtmek isterim pagerank değeri farklı olan sitelerden backlink almanız en mantıklı olanıdır .
Ücretsiz üye olup paylaşım yapabileceğiniz adresler aşağıda verilmiştir.

blogger.com                             ( Yeni Siteler için en ideal tercih )
wordpress.com                        ( Yeni Siteler için en ideal tercih )
tumblr.com                    PR8    ( Yeni Siteler için en ideal tercih )
delicious.com                PR8
reddit.com                     PR8
livejournal.com              PR8
friendfeed.com              PR8
diigo.com                      PR7
gityat.com                    PR3 
yorumcudan.com        PR1 


Backlink kontrolü için bir çok araç mevcuttur fakat benim tercihim ahrefs.com adresidir.




Web Siteleri İçin Kod Yapısı Nasıl Olmalı ? 
Web siteleri için özellikle içeriğin özgün olmasına dikkat edilmeli. 
Özgünden kastım benzer sayfalardaki yazıları vs. almanız seo açısından zararlıdır.
Web sitenizin üst sayfalarda görünmesini istiyorsanız domain 'i anahtar kelimenizi içerecek şekilde seçmelisiniz. Örnek verecek olursak  köpek şampuanı anahtar kelimemiz
olsun alacağımız domain kopeksampuani.com  kopek-sampuan.com   kopek-sampuani.com vs gibi anahtar kelimenin geçtiği domaini alırsak seo açısından işimiz çok kolaylaşır.
Kod içerisinde title,description,keywords 'ede dikkat edilmeli. Description ile keywords uyumu çok önemlidir. Keywords 'e yazdığımız anahtar kelimenin Descriptionda geçmesine dikkat etmemiz lazım.Keywords'ün çok olmasına değil öz olmasına dikkat etmek gerekir.Şimdi köpek şampuanı örneği ile title,Description,Keywords yapısını inceleyelim.
.
<title> X Köpek Şampuanı </title>
<meta name="Keywords" content="köpek şampuanı, X köpek şampuanı,kaliteli köpek şampuanı " />
<meta name="Description" content=" X köpek şampuanı köpeğinizin sağlığı için en ideal köpek şampuanıdır. Kaliteli köpek şampuanı için bizi seçiniz.   " />

Title uzunluğu 0-70
Description uzunlğu =0-160
Keywords uzunluğu=0-260   
aralığında olmasına ve H etiketi ile Alt etiketini kullanmaya özen gösteriniz.


SEO UYUMLU MAKALE NEDİR?
Google, yahoo, bing, yandex, baidu, ask vs. gibi arama motorlarının her sayfası analiz etme ve sıralamalarda yer belirleme kriterleri vardır. En profesyonel iş tahmin edildiği gibi google tarafından yapılıyor. Sıralama etkileri için nelerin yapılması gerektiğini zaten kendileri kullanıcılarına bildiriyor. Bu belirli kriterlere uyarak hazırlanan yazılara bir seo uyumlu makale diyoruz. Yani kısaca günlük hayattaki konuşma tarzı değil de belirli bir algoritma baz alınarak yazılan makalelerdir. 
SEO UYUMLU MAKALE NASIL YAZILIR? 
 Yazının belirli kriterleri var dedik. Peki bu kriterler nelerdir? Sıralamadaki yerlerini neye göre belirlenir? Adım adım anlatacağım. 
1. ÖZGÜNLÜK 
 Birinci şartımız özgünlük. Yani sitemize ekleyeceğimiz yazılar şimdiye kadar hiç bir sitede yayınlanmamış olmalı. Kendiniz yazmak zorundasınız. Kopyala/yapıştır içerikler pek ilgi görmez ve sıralamalarda üst sıralarda çıkamaz. Hatta sitenize copy/paste eklediğiniz yazılar, zarar verecektir. Anahtar kelimenizde düşüş yaşamanıza neden olabilir.  
2. Kelime Sayısı 
Yazılan her ne ile ilgiliyse en az 200 kelimeden oluşması sizin yararınıza olacaktır. Bu sadece benim tavsiyem. 50 kelime olan yazılarda olabilir tabi ki. Piyasadaki çoğu arkadaşımız kafasından bir kelime sayısı belirliyor. İlla 125 kelime olacak diyorlar mesela. Bunu neye göre söylüyorlar çok merak ediyorum. Bu sayı tamamen sizin klavyenize kalmış bir şey fakat dikkat edilmesi gereken bir kaç nokta var. Alt adımlarda onlardan bahsettim. Bu adımı tamamlayacak olursak, istediğiniz kelime sayısı kadar yazabilirsiniz. Burada önemli olan kelime sayısına oranla kullanabileceğiniz anahtar kelime yoğunluğu ve backlinklerdir. 
3. Anahtar Kelime Yoğunluğu 
Bir yazıda anahtar kelime yoğunluğu minimum %2 ve maksimum %4 olmalıdır. Tamamen %4 olması daha faydalıdır. Örnek veriyorum, “wordpress seo” ile ilgili bir anlatım yapıyorsunuz. Bu anlatım toplamda 100 kelime tuttu. Siz bu 100 kelimede en fazla 4 adet “wordpress seo” kelimesi kullanabilirsiniz. 5. kelimeyi kullandığınız zaman tehlike çanları sesini duyurmaya başlar. 2 kelimenin altında kullandığınız zaman da iyi sonuç alamazsınız. Çünkü anlattığınız bir şeyi yazmanız gerekir. Anahtar kelimenizi makale içerisinde kullanmadığınız zaman algoritmalar sizin aslında çok da yararlı olmayan bir paylaşım yaptığınız kanaatine varacaktır. 
4. H1, H2, H3 Etiketleri 
Anahtar kelimeniz her ne ise konu içerisinde mutlaka anahtar kelime h1, h2 ve h3 için aynı özellikle eklemeniz gerekmektedir. Bu olmasa da olur tabi ki ama her şeyin mükemmel olmasını istiyorsanız 3 etiketin içerisinde mutlaka anahtar kelimenizi kullanın. Sadece bir tanesini değil, üçünü de kullanmanız gerekiyor. 
5. Bold, Strong, Italic Özellikler 
Yine yazıya ait keyword hangisi ise onu makalenin herhangi bir bölümünde kalın, güçlü veya italik yapmak gerekmektedir. Bunu tahmin etmek çok da zor değildir. Bir konuda yazı yazıyorsanız, anlatmak istediğiniz olayın asıl kelimesini kalın yapmanız daha çok ilgi çeker değil mi? Üçünü de ayrı ayrı kullanmanıza gerek yok. Sadece bir tanesini kullanmak yeterli olacaktır. 
6. Title Seçimi 
Bu çok önemli bir nokta. Anahtar kelimeniz mutlaka sayfanın başlığında bulunmalıdır. Aramalarda en büyük etken başlıklar ve meta tag’lerdir. Birazdan meta tag’lerde nasıl davranmalıyız ondan da bahsedeceğim. Animasyon ile ilgili bir yazı yazdınız fakat başlığı “Naber, Nasılsın?” yaptınız. Pek de mantıklı bir şey olmaz değil mi? Başlığı “Animasyon Nasıl Yapılır?” yapabilirsiniz mesela. Altını çizdiğim gibi anahtar kelimeyi başlığımızda kullandık. 
7. Meta Description Seçimi 
Meta Description dediğimiz olay, sayfanın açıklamasıdır. Google sizin bir sitenizi indexledi diyelim. Başlığınız mavi renkte görünür. Sayfanın adresi yeşil renkte sayfa açıklamanız siyah renkte görünür. Meta description tam olarak bu siyah bölümdür. Bu alanda da mutlaka anahtar kelimemiz bulunmalıdır. Kısacası hem yazınızda, hem başlığınızda, hem meta açıklamanızda bu kelimenin varlığı çok önemlidir. 
8. Meta Tag Seçimi 
Makalenizin anahtar kelimelerinde konunuzun tam başlığı geçerse; tam olarak başlığın aratılması konusunda sizi üst sıralarda çıkartmak için faydası dokunabilir. Her ne olursa olsun anahtar kelimenizi mutlaka bu bölümde de belirlemelisiniz. Zaten meta tag olayının da amacı budur. 
9. Yazıyı Zenginleştirmek 
Yazınız ne kadar zengin olursa o kadar iyi. Örneğin bir tablo ekleyelim. 
ÖZELLİK KURAL 
Anahtar kelime yoğunluğu %2 ve %4 arasında olmalı H1, h2, h3, bold, italic Anahtar kelimeler mutlaka bunlar arasında da kullanılmalı. Zengin içerik Table, form, list-type ile zenginleştirilebilir. Yukarıdaki tablo örneğin bu yazıya bir zenginlik kazandırıyor. Bu da arama kriterlerinde dikkate alınan bir diğer husustur. 
10. Resim Seçimi Arama motorlarının resim özelliği geliştirilmiş durumda fakat yeterli değil. Hacklink nasıl yapılır diye bir soru sorulsa, bunun nedenlerinden bir tanesi de resim analizlerinin iyi yapılmaması denilebilir. Yazınızda mutlaka bir adet resim de bulunmalı ve resmi ftp bölümüne yüklediğiniz boyutlarda kullanmalısınız. Mesela 500 x 500 boyutlarında bir resim yüklediniz fakat konuya yüklerken css yöntemi ile 250 x 250 boyutuna küçülttünüz. Bu sayfa yükleme hızını etkileyecek ve aramalarda gerilere atılmanız için küçük bir sebeptir. Seo uyumlu makalelerde resimlerin alt etiketine(açıklama bölümüne) mutlaka konu başlığınızı yazmalısınız. Daha detaylı bir açıklama da yazabilirsiniz, tabi başlığın aynısı geçmek koşuluyla. 
11. Konu Dışı 
Seo uyumlu makale nasıl yazılır? sorusuna cevap vermeye çalıştım. Bir de bunların dışında üst sıraları zorlamak için bu özelliklerin dışında yapılması gereken bir kaç özellik var. Belki ayrı bir konuda da anlatabilirdim fakat bu konu altında daha yararlı olur diye düşündüm. Bazılarını sıralıyorum. Konu içerisinde anahtar kelimeniz ile kendi konu adresinize link vermelisiniz. Örneğin şöyle; seo uyumlu makale nasıl yazılır title etiketini de unutmayalım tabi. Bir diğer konu ise sosyal medya. Artık arama motorları yemiyor içmiyor sosyal medya paylaşımlarını takip ediyor. Büyük bir önem de veriyor. Çok sayıda paylaşım yazının daha yararlı olduğu anlamına geliyor. Yararsız bir paylaşımı kim paylaşır ki? Bu açığı kullanabilirsiniz. Yazılarınızı paylaşabildiğiniz kadar çok sosyal ağ ve profillerde paylaşabilirsiniz. Bu spam olarak algılanmaz. Sayfanızın w3 hatalarını sıfıra indirmeye çalışın. Konu içerisinde mutlaka kelime sayınıza göre linkler kullanın. Kullanabileceğiniz hiç bir link yoksa bile etiket sayfalarına linkler verin. Alabildiğiniz kadar backlink alın ve ping servislerinizi iyi seçin.