• 27-08-2025, 11:25:46
    #1
    GZR
    Tek Niyet: Memnuniyet ✅
    Adımlar
    1. Eklentiler → Code Snippets eklentisini yükle/aktif et (yoksa).
    2. Code Snippets → Add New (Yeni Ekle) → aşağıdaki tam kodu yapıştır.
    3. Only run in administration area seçeneği varsa işaretle. Kaydet ve Etkinleştir.
    4. Araçlar → GSC Toplu Sil menüsüne git.
    5. URL listesini kutuya yapıştır → Dry-Run çalıştır → raporu kontrol et → Gerçekten Sil.
    6. URL listesini almak için search console tarandı ama dizine eklenmedi hata sayfasına gidin, toplu kopyalayarak Chatgpt aracılığıyla parça parça listeleyip silme aracına aktarabilirsiniz.
    Kod


    /**
     * Admin aracı: GSC URL listesine göre toplu silme
     * Code Snippets ile ekleyin. Etkinleştirince Araçlar -> GSC Toplu Sil menüsü oluşur.
     */
    add_action('admin_menu', function () {
        add_management_page(
            'GSC Toplu Sil', 'GSC Toplu Sil', 'manage_options', 'gsc-bulk-delete',
            'gsc_bulk_delete_render_page'
        );
    });
    
    function gsc_bulk_delete_render_page() {
        if ( ! current_user_can('manage_options') ) {
            wp_die('Bu işlem için yetkin yok.');
        }
    
        $action    = isset($_POST['gsc_action']) ? sanitize_text_field($_POST['gsc_action']) : '';
        $urls_text = isset($_POST['gsc_urls']) ? trim(wp_unslash($_POST['gsc_urls'])) : '';
        $nonce_ok  = isset($_POST['_wpnonce']) && wp_verify_nonce(sanitize_text_field($_POST['_wpnonce']), 'gsc_bulk_delete');
    
        echo '<div class="wrap"><h1>GSC Toplu Sil</h1>';
        echo '<p>Search Console’dan aldığın <strong>URL listesini</strong> (her satır 1 URL) aşağıya yapıştır. Önce <em>Dry-Run</em> ile kontrol et; ardından <em>Gerçekten Sil</em> ile kalıcı sil.</p>';
    
        echo '<form method="post">';
        wp_nonce_field('gsc_bulk_delete');
        echo '<textarea name="gsc_urls" rows="15" style="width:100%; font-family:monospace;" placeholder="https://www.site.com/yazi-1/
    https://www.site.com/yazi-2/
    ...">'
            . esc_textarea($urls_text) . '</textarea>';
    
        echo '<p style="margin-top:10px;">';
        echo '<button class="button button-secondary" name="gsc_action" value="dry" type="submit">Dry-Run (Silmeden göster)</button> ';
        echo '<button class="button button-primary" name="gsc_action" value="delete" type="submit" ';
        echo 'onclick="return confirm(\'Seçili URL’lere karşılık gelen yazılar kalıcı olarak silinecek. Emin misin?\');">Gerçekten Sil (Kalıcı)</button>';
        echo '</p>';
        echo '</form>';
    
        if ($action && $nonce_ok) {
            $lines = preg_split('/\r\n|\r|\n/', $urls_text);
            $urls  = array();
    
            // Metinden https://... URL’leri ayıkla ve normalize et
            foreach ($lines as $line) {
                $line = trim($line);
                if ($line === '') continue;
    
                // Satır içinde geçen ilk http/https URL’yi yakala
                if (preg_match('~https?://[^\s"\'<>]+~i', $line, $m)) {
                    $u = $m[0];
    
                    // Alan adı farklıysa yine işle (istersen burada domain filtreleyebilirsin)
                    // /feed/ sonlarını kaldır, sonda tek slash bırak
                    $u = preg_replace('~/(feed/?)?$~', '/', $u);
                    $u = preg_replace('~/+?$~', '/', $u);
    
                    $urls[$u] = true; // uniq
                }
            }
            $urls = array_keys($urls);
    
            if (empty($urls)) {
                echo '<div class="notice notice-warning"><p>İşlenecek URL bulunamadı.</p></div>';
                echo '</div>';
                return;
            }
    
            echo '<h2>Rapor</h2>';
            echo '<table class="widefat striped"><thead><tr>
                    <th style="width:45%;">URL</th>
                    <th style="width:10%;">Durum</th>
                    <th style="width:15%;">Post ID</th>
                    <th style="width:10%;">Tip</th>
                    <th>Başlık</th>
                  </tr></thead><tbody>';
    
            $deleted = 0; $matched = 0; $miss = 0;
    
            foreach ($urls as $url) {
                $post_id = url_to_postid($url);
    
                // Fallback: path üzerinden brute-force (post/page/CPT)
                if (!$post_id) {
                    $path = trim(parse_url($url, PHP_URL_PATH), '/');
                    if ($path) {
                        $candidates = array_unique([$path, untrailingslashit($path)]);
                        $post_types = get_post_types(['public' => true], 'names');
                        foreach ($candidates as $p) {
                            foreach ($post_types as $pt) {
                                $obj = get_page_by_path($p, OBJECT, $pt);
                                if ($obj && isset($obj->ID)) { $post_id = (int) $obj->ID; break 2; }
                            }
                        }
                    }
                }
    
                if ($post_id) {
                    $matched++;
                    $type  = get_post_type($post_id);
                    $title = get_the_title($post_id);
                    $status = 'OK';
    
                    if ($action === 'delete') {
                        // Kalıcı sil: true (çöp kutusu istersen false yap)
                        wp_delete_post($post_id, true);
                        $status = 'DELETED';
                        $deleted++;
                    }
    
                    printf(
                        '<tr><td>%s</td><td><strong>%s</strong></td><td>%d</td><td>%s</td><td>%s</td></tr>',
                        esc_html($url), esc_html($status), $post_id, esc_html($type), esc_html($title)
                    );
                } else {
                    $miss++;
                    printf(
                        '<tr><td>%s</td><td><strong>MISS</strong></td><td>—</td><td>—</td><td>Post bulunamadı (muhtemelen arşiv/pagination/feed)</td></tr>',
                        esc_html($url)
                    );
                }
            }
    
            echo '</tbody></table>';
            echo '<p><strong>Özet:</strong> Eşleşen: ' . esc_html($matched) . ' | MISS: ' . esc_html($miss)
               . ($action === 'delete' ? ' | Silinen: ' . esc_html($deleted) : '') . '</p>';
        }
    
        echo '</div>';
    }





    Uyarı: Silme kalıcıdır. Başlamadan önce veritabanı yedeği al.
    👉 Faydalı olabileceği durumlar:
    • Eğer bu sayfalar zayıf içerik (ör. 200 kelime altında, yüzeysel yazılar, kopya içerik) ise → kaldırmak sitenin genel içerik kalitesini artırır.
    • Eğer içerikler spam / otomatik üretilmiş yazılar ise → kaldırmak faydalıdır.
    • Eğer feed veya /page/ gibi sayfalar listede varsa → bunların kalıcı silinmesi SEO’ya zarar vermez, aksine temizlik olur.



    👉 Faydalı olmayabileceği / zararlı olabileceği durumlar:
    • Eğer içerikler aslında değerli ama sadece Google şu an dizine almamışsa → silmek, sitenin potansiyel trafiğini öldürür.
    • “Dizine eklenmedi” demek her zaman çöpe at demek değildir. Bazen sabır ve iç linkleme / backlink ile bu içerikler indekslenebilir.
  • 27-08-2025, 11:29:13
    #2
    elinize sağlık
  • 27-08-2025, 11:38:34
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Elinize sağlık ancak bence buna hiç gerek yok.

    Buna karşı olarak site iç seo çalışması yapılmalı. Zaten 2k 3k index bekleyen yazı varsa onları bir anda silmek yazıların index almamasından daha çok zarar verir.
  • 27-08-2025, 11:39:48
    #4
    GZR
    Tek Niyet: Memnuniyet ✅
    Peace adlı üyeden alıntı: mesajı görüntüle
    Elinize sağlık ancak bence buna hiç gerek yok.

    Buna karşı olarak site iç seo çalışması yapılmalı. Zaten 2k 3k index bekleyen yazı varsa onları bir anda silmek yazıların index almamasından daha çok zarar verir.
    Teşekkürler, konu altına not düştüm özellikle bu konuya karşı.

    Faydalı olabileceği durumlar:
    • Eğer bu sayfalar zayıf içerik (ör. 200 kelime altında, yüzeysel yazılar, kopya içerik) ise → kaldırmak sitenin genel içerik kalitesini artırır.
    • Eğer içerikler spam / otomatik üretilmiş yazılar ise → kaldırmak faydalıdır.
    • Eğer feed veya /page/ gibi sayfalar listede varsa → bunların kalıcı silinmesi SEO’ya zarar vermez, aksine temizlik olur.

    Faydalı olmayabileceği / zararlı olabileceği durumlar:
    • Eğer içerikler aslında değerli ama sadece Google şu an dizine almamışsa → silmek, sitenin potansiyel trafiğini öldürür.
    • “Dizine eklenmedi” demek her zaman çöpe at demek değildir. Bazen sabır ve iç linkleme / backlink ile bu içerikler indekslenebilir.