Rolagem suave até uma seção da página ao clicar num link âncora.
Substitui o salto brusco do navegador ao clicar em <a href="#secao"> por uma rolagem animada, com espaço reservado pra uma navbar fixa.
Intercepta o clique, calcula a posição do alvo com getBoundingClientRect() e chama window.scrollTo({behavior:"smooth"}). Respeita prefers-reduced-motion (pula direto sem animação).
Seção 2
Chegou aqui com rolagem suave e espaço reservado no topo (sw-scroll-offset) — não fica colado debaixo de uma navbar fixa.
<a sw-scroll href="#secao2">Ir pra seção 2</a>
...
<div id="secao2">...</div>
Repare na URL do navegador e no título da aba mudando ao clicar — sem hash, sem recarregar a página. Volte com o ← do navegador pra ver o histórico funcionando também.
Seção A · /scroll-exemplo-a
Esta seção virou uma "página" com URL, título, descrição e canônica próprios, mesmo sendo uma âncora normal na mesma página física.
Seção B · /scroll-exemplo-b
Recarregar a página numa dessas URLs exige que o servidor sirva o mesmo HTML pra qualquer caminho (rewrite/fallback de SPA) — nesta doc isso não está configurado, então F5 aqui dá 404 de propósito; no seu site é você quem configura essa parte do servidor.
Estado real do <head> agora:
título: — meta description: — link canonical: —
<!-- O link continua sendo um <a href="#id"> normal -->
<a sw-scroll href="#sobre">Sobre</a>
<!-- Quem declara URL bonita, título, descrição e canônica é o DESTINO, não o link -->
<section id="sobre"
sw-scroll-path="/sobre"
sw-scroll-title="Sobre nós — Minha Empresa"
sw-scroll-desc="Conheça a história e os valores da empresa."
sw-scroll-canonical>
...
</section>
<!-- Recarregar em /sobre, ou usar voltar/avançar do navegador, também funciona -->
<!-- Exige rewrite no servidor: qualquer caminho registrado precisa servir este mesmo HTML -->
sw-scroll-targetsw-scroll-offsetsw-scroll-pathsw-scroll-titlesw-scroll-descsw-scroll-canonicalNenhum.
sw:scroll:arrivedSW.Scroll.to(sel, offset?)SW.Scroll.goto(path)Nenhuma.
# e apontar pra um id que exista na página.sw-scroll-path muda a URL só no navegador (History API) — pra ela sobreviver a um F5 ou a um acesso direto, o servidor precisa servir este mesmo HTML pra qualquer caminho registrado (configuração de servidor, fora do componente).