Greasy Fork is available in English.
Hide YouTube Shorts from search r###lts and redirect Shorts URLs
// ==UserScript== // @name:ko 유튜브 쇼츠 차단 // @name YouTube Shorts Blocker // @description:ko 쇼츠를 차단 및 Shorts URL을 YouTube.com으로 리다이렉트 합니다. // @description Hide YouTube Shorts from search r###lts and redirect Shorts URLs // @namespace https://ndaesik.tistory.com/ // @version 1.4 // @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 r###lts and mobile r###lts function hideShortsInSearch() { // Desktop search r###lts 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 r###lts 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 'ytd-reel-shelf-renderer', // desktop search r###lts feed '#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 'ytm-reel-shelf-renderer', // mobile search r###lts 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(); })();