Adicionando contador de visitas em seu blog
Neste exemplo mostrarei como criar um contador de visitas com Vercel Edge Functions e Redis API.
— 201 views
Já que não utilizo mais Google Analytics, decidi criar um contador de visitas para os posts do meu blog.
Decidi utilizar as Edge Functions da Vercel com uma database Redis para essa funcionalidade, e no blog da Upstash, há um tutorial para criar essa funcionalidade. Porém, o código não está atualizado com as últimas atualizações do Next.js, e além disso, encontrei alguns bugs na contagem de visitas únicas (ou quase isso).
Depois de algumas alterações, consegui fazer o contador funcionar corretamente. Você pode ler o post original que conta porquê utilizar Redis, e usar o código atualizado abaixo 😎
Após adicionar a URL
e o TOKEN
de sua database Redis no seu .env
, adicione a biblioteca da Upstash ao seu projeto, junto com a biblioteca edge
da Vercel:
Depois, vamos criar nosso Route Handler para registrar as visitas de cada post. No meu caso, criei no diretório /api/views/route.ts
:
A lógica é bastante simples, basicamente pegamos o IP do usuário através da function ipAddress
da Vercel, criptografamos ele e criamos uma hash para verificarmos se para a slug
enviada já existe algum registro, através do método EXISTS
do Redis. Caso positivo, retornamos um NextResponse
sem incrementar o número de views.
Caso negativo, fazemos um SET
com a mesma hash anterior para registrar a visita do usuário, com validade de 24 horas, e em seguida, incrementamos a contagem de visualizações do post através do método INCR
.
Após isso, vamos criar o componente responsável por fazer uma requisição à nossa API dentro do post do nosso blog. Em meu caso, criei o arquivo no diretório: app/post/[slug]/
:
Depois inserimos esse componente em nossa página, junto com uma prop slug
, que será o slug/identificador único da sua página. No meu caso, a slug vem dos parâmetros da URL:
Por fim, podemos buscar a quantidade de views através da requisição abaixo:
E é isso! Com esse código você já consegue criar um contador de visitas em sua aplicação criada com Next.js e hospedada na Vercel 🤘🏼