WordPress Eklentisiz Doğru 301 Yönlendirme Kodu

WordPress Eklentisiz Doğru 301 Yönlendirme Kodu

301 yönlendirme, web dünyasında bir URL’nin kalıcı olarak başka bir adrese taşındığını belirtmek için kullanılan HTTP durum kodudur. Hem teknik hem de ziyaretçi açısından önemlidir. Bir sayfanın adresi değiştiğinde veya site yapısı güncellendiğinde, eski URL’den yeni URL’ye doğru bir şekilde yönlendirme yapılmazsa kullanıcılar hata sayfalarıyla karşılaşır ve arama motorları sayfanın değerini kaybedebilir.

Teknik açıdan 301 yönlendirme, sunucu tarafında gerçekleştirilir ve tarayıcıya “bu içerik artık kalıcı olarak başka bir adreste” mesajı gönderir. Bu sayede tarayıcı ve arama motoru botları yeni URL’yi esas alır. 301 yönlendirmeler, eski URL’nin sahip olduğu değerinin büyük bir kısmını yeni URL’ye aktarmaktadır.

Genel kullanım alanlarına bakıldığında; site taşıma işlemleri, HTTP’den HTTPS’e geçiş, domain değişiklikleri ve kırık linklerin düzeltilmesi en yaygın senaryolar arasında yer alır. Yanlış yapılandırılmış yönlendirmeler ise zincirleme yönlendirme (redirect chain) veya döngü (redirect loop) gibi sorunlara yol açabilir. Bu durum hem kullanıcı deneyimini olumsuz etkiler hem de arama motorları tarafından olumsuz değerlendirilir.

Kod yeni veritabanı oluşturarak oraya url işlemlerini kayıt edecektir. Url yönlendirmenin tam olarak yapılması için en az 6 ay durmasını tavsiye ederiz. Eğer tamamen kaldırmak isterseniz kodu kaldırabilirsiniz. Veritabanını da kaldırmayı unutmayınız. Eğer tekrar ilerde kullanmak isterseniz kodu kaldırın veritabanını silmeyen tekrar, tekrar yazmak zorunda kalmazsınız. Kod olmadığı müddetçe çalışmaz. Veritabanında ise girdiğiniz url binlerce dahi olsa çok az yer kaplar ve sisteminizin performasını etkilemez.

301 Yönlendirme Kodu:

Web EvrenseL Pano
/**
 * URL 301 Yönlendirici Web Evrensel
 * Açıklama: Gelişmiş 301 yönlendirme yönetimi ve tıklama sayacı.
 */

// 1. Veritabanı Tablosunu Oluştur
function web_evrensel_yonlendir_tablo_kur() {
  global $wpdb;
  $tablo_adi = $wpdb->prefix . 'url_301_yonlendirmeleri';
  $charset_collate = $wpdb->get_charset_collate();

  if ($wpdb->get_var("SHOW TABLES LIKE '$tablo_adi'") != $tablo_adi) {
    $sql = "CREATE TABLE $tablo_adi (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      eski_url varchar(255) NOT NULL,
      yeni_url varchar(255) NOT NULL,
      tiklama_sayisi int(11) DEFAULT 0,
      PRIMARY KEY (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
  }
}
add_action('admin_init', 'web_evrensel_yonlendir_tablo_kur');

// 2. Menüyü Araçlar Altına Ekle
add_action('admin_menu', function() {
  add_management_page(
    'SEO URL 301 Yönlendirici Web Evrensel',
    'Web Evrensel URL 301',
    'manage_options',
    'web-evrensel-redirect',
    'web_evrensel_panel_ekrani'
  );
});

// 3. Admin Paneli Arayüzü
function web_evrensel_panel_ekrani() {
  global $wpdb;
  $tablo_adi = $wpdb->prefix . 'url_301_yonlendirmeleri';

  if (isset($_POST['yonlendirme_kaydet']) && check_admin_referer('web_evrensel_action')) {
    $eski = esc_url_raw($_POST['eski_url']);
    $yeni = esc_url_raw($_POST['yeni_url']);

    $eski_path = parse_url($eski, PHP_URL_PATH);
    if(!$eski_path) $eski_path = '/';

    if (!empty($eski_path) && !empty($yeni)) {
      $wpdb->insert($tablo_adi, ['eski_url' => $eski_path, 'yeni_url' => $yeni, 'tiklama_sayisi' => 0]);
      echo '<div class="updated notice is-dismissible"><p>Yönlendirme Web Evrensel sistemine başarıyla eklendi.</p></div>';
    }
  }

  if (isset($_GET['sil']) && check_admin_referer('delete_redirect')) {
    $wpdb->delete($tablo_adi, ['id' => intval($_GET['sil'])]);
    echo '<div class="notice notice-warning is-dismissible"><p>Yönlendirme kuralı silindi.</p></div>';
  }

  $kayitlar = $wpdb->get_results("SELECT * FROM $tablo_adi ORDER BY id DESC");
  ?>
  <div class="wrap">
    <h1 class="wp-heading-inline">SEO URL 301 <span style="color:#2271b1;">Web Evrensel</span></h1>
    <hr class="wp-header-end">

    <div id="poststuff">
      <div id="post-body" class="metabox-holder columns-2">
        
        <div id="post-body-content">
          <div class="postbox">
            <h2 class="hndle">Aktif Yönlendirme Kuralları</h2>
            <div class="inside" style="margin:0; padding:0;">
              <table class="wp-list-table widefat fixed striped">
                <thead>
                  <tr>
                    <th style="padding-left:15px;">Kaynak (Eski Adres)</th>
                    <th>Hedef (Yeni Adres)</th>
                    <th width="80px" style="text-align:center;">Hit</th>
                    <th width="100px">İşlem</th>
                  </tr>
                </thead>
                <tbody>
                  <?php if ($kayitlar): foreach ($kayitlar as $s): ?>
                  <tr>
                    <td style="padding-left:15px;"><code><?php echo esc_html($s->eski_url); ?></code></td>
                    <td><a href="<?php echo esc_url($s->yeni_url); ?>" target="_blank" style="text-decoration:none;"><?php echo esc_html($s->yeni_url); ?> <span class="dashicons dashicons-external" style="font-size:14px;"></span></a></td>
                    <td style="text-align:center;">
                      <span style="background:#e7f3ff; color:#2271b1; padding:3px 10px; border-radius:15px; font-weight:bold;">
                        <?php echo intval($s->tiklama_sayisi); ?>
                      </span>
                    </td>
                    <td>
                      <a href="<?php echo wp_nonce_url('?page=web-evrensel-redirect&sil='.$s->id, 'delete_redirect'); ?>" 
                        class="button button-link-delete" style="color:#d63638;"
                        onclick="return confirm('Bu kuralı silmek istediğinize emin misiniz?')">Sil</a>
                    </td>
                  </tr>
                  <?php endforeach; else: ?>
                  <tr><td colspan="4" style="padding:20px;">Henüz bir yönlendirme tanımlanmadı.</td></tr>
                  <?php endif; ?>
                </tbody>
              </table>
            </div>
          </div>
        </div>

        <div id="postbox-container-1" class="postbox-container">
          <div class="postbox">
            <h2 class="hndle">Yeni Kural Tanımla</h2>
            <div class="inside">
              <form method="post">
                <?php wp_nonce_field('web_evrensel_action'); ?>
                <p>
                  <label><strong>Kaynak URL:</strong></label><br>
                  <input type="text" name="eski_url" class="large-text" placeholder="/eski-sayfa" required>
                </p>
                <p>
                  <label><strong>Hedef URL:</strong></label><br>
                  <input type="text" name="yeni_url" class="large-text" placeholder="https://site.com/yeni-sayfa" required>
                </p>
                <p class="description">
                  Web Evrensel motoru, hem tam URL'leri hem de sadece uzantıları otomatik olarak işler.
                </p>
                <hr>
                <input type="submit" name="yonlendirme_kaydet" class="button button-primary button-large" value="Yönlendirmeyi Başlat" style="width:100%; height:40px;">
              </form>
            </div>
          </div>
        </div>

      </div>
    </div>
  </div>
  <?php
}

// 4. Web Evrensel Yönlendirme Motoru
add_action('template_redirect', function() {
  if (is_admin()) return;

  global $wpdb;
  $tablo_adi = $wpdb->prefix . 'url_301_yonlendirmeleri';
  
  $istenen_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
  $istenen_path_trimmed = rtrim($istenen_path, '/');
  if (empty($istenen_path_trimmed)) $istenen_path_trimmed = '/';

  $sonuc = $wpdb->get_row($wpdb->prepare(
    "SELECT id, yeni_url FROM $tablo_adi WHERE eski_url = %s OR eski_url = %s OR eski_url = %s", 
    $istenen_path,
    $istenen_path_trimmed,
    $istenen_path_trimmed . '/'
  ));

  if ($sonuc) {
    $wpdb->query($wpdb->prepare(
      "UPDATE $tablo_adi SET tiklama_sayisi = tiklama_sayisi + 1 WHERE id = %d",
      $sonuc->id
    ));

    wp_redirect(esc_url_raw($sonuc->yeni_url), 301);
    exit;
  }
});

Kod eklendikten sonra WordPress yönetim paneline yeni bir alan eklenir ve buradan eski URL ile yeni URL eşleştirmeleri yapılabilir. Kullanıcı sadece yönlendirmek istediği sayfanın eski adresini ve yeni adresini girerek işlemi tamamlar. Sistem, gelen isteği kontrol ederek eşleşme bulduğunda otomatik olarak 301 yönlendirmesi uygular.

Kodu fuctions.php en altına direk var olduğu şekilde yazarak kayıt ediniz. Kodu kayıttan sonra WordPress admin menüsündenAraçlar kısımda “Web Evrensel URL 301” menüsüne giderek kullanmaya başlayabilirsiniz. ilk alana eski url adresini ikinci alana ise yönlendilecek yeni url adresini yazmanız yeterli olacaktır. Bu yönlendirme 301 yani eski url adresinin artık var olmayacağı yeni url adresini kalıcı olduğunu arama motorlarına bildirir.

Kod yeni veritabanı oluşturarak oraya url işlemlerini kayıt edecektir. Url yönlendirmenin tam olarak yapılması için en az 6 ay durmasını tavsiye ederiz. Eğer tamamen kaldırmak isterseniz kodu kaldırabilirsiniz. Veritabanını da kaldırmayı unutmayınız. Eğer tekrar ilerde kullanmak isterseniz kodu kaldırın veritabanını silmeyen tekrar, tekrar yazmak zorunda kalmazsınız. Kod olmadığı müddetçe çalışmaz. Veritabanında ise girdiğiniz url binlerce dahi olsa çok az yer kaplar ve sisteminizin performasını etkilemez.

Bekir Yaman
25 Yazı
Bekir Yaman
🌱 Yeni Katılımcı

Bekir Yaman, WebEvrensel.com’un teknik altyapısını yöneten, performansı artıran ve özgün içerikler üreten bir webmasterdır.

Oyla & Tepkini Göster!

0.0
0 Oylama
5★
%0
4★
%0
3★
%0
2★
%0
1★
%0
0
Yorum
--
Pozitif
--
Negatif
--
İçerik Durum
%0.0
Pozitif Tepkiler
%0.0
Henüz değerlendirme yok
%0.0
Negatif Tepkiler

Yorum Yazın

Üye olmadan yorum yazabilirsiniz.