Remove URL trackers

Removes annoying url trackers parameters like utm_*, ref, etc, directly from the address bar.

  1. // ==UserScript==
  2. // @name Remove URL trackers
  3. // @namespace https://github.com/insign/userscripts
  4. // @version 202409181423
  5. // @description Removes annoying url trackers parameters like utm_*, ref, etc, directly from the address bar.
  6. // @match *://*/*
  7. // @author Hélio <open@helio.me>
  8. // @license WTFPL
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. 'use strict'
  13. // Parâmetros (que começam com esses prefixos) a serem removidos da URL.
  14. const paramsToStrip = ['utm_', 'ref', 'gclid', 'gclsrc', 'gs_', 'ga_', '_ga', '_gaq', '__utm', 'fbclid', 'mc_', '_cid', 'epik', 'context']
  15.  
  16. /**
  17. * Verifica se um parâmetro deve ser removido da URL.
  18. * @param {string} param - O nome do parâmetro (formato chave=valor).
  19. * @returns {boolean} - True se o parâmetro deve ser preservado, false caso contrário.
  20. */
  21. function shouldPreserveParam(param) {
  22. // Retorna true se NENHUM prefixo da lista paramsToStrip for encontrado no início do parâmetro.
  23. return !paramsToStrip.some(prefix => param.startsWith(prefix))
  24. }
  25.  
  26. /**
  27. * Limpa a URL removendo os parâmetros especificados.
  28. * @param {string} url - A URL original.
  29. * @returns {string} - A URL limpa com os parâmetros indesejados removidos.
  30. */
  31. function cleanUrl(url) {
  32. // Usa replace com regex para encontrar a parte da query string (?...)
  33. // A função de callback processa os parâmetros encontrados.
  34. return url.replace(/\?([^#]*)/, (match, searchParams) => {
  35. // Divide os parâmetros (&), filtra mantendo apenas os que devem ser preservados,
  36. // e junta novamente com &.
  37. const updatedParams = searchParams
  38. .split('&')
  39. .filter(shouldPreserveParam) // Mantém apenas os parâmetros não correspondentes.
  40. .join('&')
  41.  
  42. // Retorna a query string atualizada (se houver parâmetros restantes) ou uma string vazia
  43. // para remover completamente a interrogação se todos os parâmetros foram removidos.
  44. return updatedParams ? '?' + updatedParams : ''
  45. })
  46. }
  47.  
  48. /**
  49. * Atualiza a URL do navegador substituindo o estado do histórico, se necessário.
  50. * Isso evita que a URL original com rastreadores permaneça no histórico de navegação.
  51. */
  52. function updateUrl() {
  53. const currentUrl = location.href // URL atual
  54. const cleanedUrl = cleanUrl(currentUrl) // URL após limpeza
  55.  
  56. // Se a URL foi modificada e a API history.replaceState está disponível,
  57. // substitui a entrada atual no histórico pela URL limpa.
  58. if (currentUrl !== cleanedUrl && window.history.replaceState) {
  59. window.history.replaceState({}, '', cleanedUrl)
  60. console.log('URL Trackers Removed:', currentUrl, '->', cleanedUrl)
  61. }
  62. }
  63.  
  64. // Executa a limpeza apenas se a URL contiver parâmetros de busca (presença de ? ou &).
  65. // Isso evita processamento desnecessário em URLs sem parâmetros.
  66. if (location.search && /[\?&]/.test(location.search)) {
  67. updateUrl()
  68. }
  69. })()