YouTube Shorts Blocker

Hide YouTube Shorts from search results and redirect Shorts URLs

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

You will need to install an extension such as Tampermonkey to install this script.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==UserScript==
// @name:ko           유튜브 쇼츠 차단
// @name              YouTube Shorts Blocker

// @description:ko    쇼츠를 차단 및 Shorts URL을 YouTube.com으로 리다이렉트 합니다.
// @description       Hide YouTube Shorts from search results and redirect Shorts URLs

// @namespace         https://ndaesik.tistory.com/
// @version           1.5
// @author            ndaesik
// @match             https://m.youtube.com/*
// @match             https://www.youtube.com/*
// @icon              https://upload.wikimedia.org/wikipedia/commons/thumb/f/fc/Youtube_shorts_icon.svg/193px-Youtube_shorts_icon.svg.png
// ==/UserScript==

(function() {
    'use strict';

    // Function to hide Shorts in search results and mobile results
    function hideShortsInSearch() {
        // Desktop search results
        const items = document.querySelectorAll('ytd-video-renderer');
        items.forEach(item => {
            const link = item.querySelector('ytd-thumbnail > a');
            if (link && link.href.includes('/shorts/')) {
                item.style.display = 'none';
            }
        });

        // Mobile search results
        const mobileItems = document.querySelectorAll('[href*="/shorts/"]');
        mobileItems.forEach(item => {
            const contextRenderer = item.closest('ytm-video-with-context-renderer');
            if (contextRenderer) {
                contextRenderer.style.display = 'none';
            }
        });
    }

    // Hide existing Shorts sections
    function hideShortsSection() {
        const selectors = [
            '[tab-title="Shorts"]', // desktop nav
            'ytd-rich-section-renderer', // desktop main page feed
            'grid-shelf-view-model', // search results feed
            'ytd-reel-shelf-renderer', // desktop suggest
            '#items ytd-guide-entry-renderer:nth-child(2)', // desktop channel tab
            'ytm-pivot-bar-item-renderer:nth-child(2)', // mobile nav bar
            'ytm-rich-section-renderer', // mobile main page feed
        ];
        selectors.forEach(selector => {
            const elements = document.querySelectorAll(selector);
            elements.forEach(el => {
                el.style.display = 'none';
            });
        });
    }

    // Redirect Shorts URLs to main video player
    function redirectShorts() {
        if (window.location.href.includes('youtube.com/shorts/')) {
            window.location.href = window.location.href.replace('/shorts/', '/watch?v=');
        }
    }

    // Create and run MutationObserver to handle dynamically loaded content
    const observer = new MutationObserver((mutations) => {
        mutations.forEach((mutation) => {
            if (mutation.addedNodes.length) {
                hideShortsInSearch();
                hideShortsSection();
            }
        });
    });

    // Start observing the document with the configured parameters
    observer.observe(document.body, {
        childList: true,
        subtree: true
    });

    // Initial run
    hideShortsInSearch();
    hideShortsSection();
    redirectShorts();
})();