Скрипт создаёт универсальную плавающую кнопку в левом нижнем углу экрана, которая выполняет две функции в зависимости от контекста:

«Наверх» — плавная прокрутка страницы к началу, если пользователь уже прокрутил её более чем на 100px.

«Назад» — возврат на предыдущую страницу (по document.referrer), если прокрутки нет, но пользователь пришёл с другого сайта/страницы.

Кнопка скрыта по умолчанию и появляется только тогда, когда она действительно нужна.

Код
<style>
/*------------- #navbtn ---------------*/
  #navbtn{
  position: fixed;
  right: auto;
  bottom: 28px;
  left: 28px;
  top: auto;
  width: 56px;
  height: 56px;
  display: none;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: #444;
  box-shadow: 0 4px 14px rgba(45,68,94,0.25), 0 1px 3px rgba(0,0,0,0.08);
  cursor: pointer;
  z-index: 9999;
  transition: transform .25s ease, box-shadow .25s ease, background .25s ease;
  user-select: none;
  }
  #navbtn:hover{
  transform: translateY(-3px);
  box-shadow: 0 8px 20px rgba(45,68,94,0.3), 0 2px 6px rgba(0,0,0,0.1);
  background: #555;
  }
  #navbtn:hover svg{stroke: #fff;}
  #navbtn:hover .navlabel{ color:#fff; }
  #navbtn:active{ transform: translateY(0) scale(.96); }

  #navbtn.show{
  display:flex;
  animation: fadeInUp .3s ease;
  }

  #navbtn svg{
  width: 22px;
  height: 22px;
  stroke: #fff;
  stroke-width: 2.4;
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: transform .3s ease, stroke .25s ease;
  }

  #navbtn.rotate svg{ transform: rotate(180deg); }

  .navlabel{
  position:absolute;
  left:66px;
  top:50%;
  transform: translateY(-50%);
  background:#2c3e50;
  color:#fff;
  font-size:12px;
  font-weight:600;
  padding:6px 10px;
  border-radius:6px;
  white-space:nowrap;
  opacity:0;
  pointer-events:none;
  transition: opacity .2s ease, transform .2s ease;
  }
  .navlabel::after{
content: "";
  position: absolute;
  left: -9px;
  top: 50%;
  transform: translateY(-50%);
  border-width: 5px;
  border-style: solid;
  border-color: transparent #2c3e50 transparent transparent;
  }
  #navbtn:hover .navlabel{
  opacity:1;
  transform: translateY(-50%) translateX(-4px);
  }

  @keyframes fadeInUp{
  from{ opacity:0; transform: translateY(12px); }
  to{ opacity:1; transform: translateY(0); }
  }

  @media (max-width:480px){
  #navbtn{ right:16px; bottom:16px; width:60px; height:60px; }
.navlabel{ left:70px}
  /*.navlabel{ display:none; } на мобильных подсказку прячем */
  }</style>

<div id="navbtn" >
  <svg id="navicon" viewBox="0 0 24 24"><path d="M12 19V5M5 12l7-7 7 7"/></svg>
  <span class="navlabel" id="navlabel">Наверх</span>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
  const btn = document.getElementById('navbtn');
  const label = document.getElementById('navlabel');
  const icon = document.getElementById('navicon');
  const ref = document.referrer && document.referrer !== location.href ? document.referrer : '';

  const ARROW_UP = 'M12 19V5M5 12l7-7 7 7';
  const ARROW_LEFT = 'M19 12H5M12 19l-7-7 7-7';

  function update() {
  const scrolled = window.scrollY > 100;
  const shouldShow = scrolled || !!ref;

  btn.classList.toggle('show', shouldShow);

  if (scrolled) {
  label.textContent = 'Наверх';
  icon.querySelector('path').setAttribute('d', ARROW_UP);
  btn.classList.remove('rotate');
  } else if (ref) {
  label.textContent = 'Назад';
  icon.querySelector('path').setAttribute('d', ARROW_LEFT);
  }
  }

  btn.addEventListener('click', () => {
  if (window.scrollY > 100) {
  window.scrollTo({ top: 0, behavior: 'smooth' });
  } else if (ref) {
  location.href = ref;
  }
  });

  window.addEventListener('scroll', update, { passive: true });
  update();
});
</script>