Criando e implementando um plugin no Jekyll para gerar estatísticas do seu blog ou site Jekyll

Tempo de leitura: 8 minutos

Criando e implementando um plugin no Jekyll para gerar estatísticas do seu blog ou site Jekyll

Ao administrar um blog ou site, a busca por informações detalhadas e personalizadas sobre o desempenho do conteúdo pode ser um desafio. Nesse contexto, a necessidade de estatísticas específicas levou à criação do plugin “SiteStatsGenerator” para o Jekyll.

A Busca por estatísticas detalhadas e personalizadas

A análise do desempenho do site vai além das métricas padrão. Era crucial obter dados precisos sobre a quantidade de categorias, posts, palavras e outras informações específicas para uma análise aprofundada. Diante dessa necessidade, o desenvolvimento de um plugin gerenciado e focado nas estatísticas desejadas tornou-se essencial.

Desenvolvimento do plugin “SiteStatsGenerator” para Estatísticas do Site no Jekyll

Neste guia detalhado, exploraremos a criação e implementação do plugin “SiteStatsGenerator” no Jekyll. Esse plugin personalizado foi projetado para capturar informações precisas e relevantes do site, atendendo às necessidades específicas de estatísticas e oferecendo uma visão detalhada do desempenho do conteúdo.

Sobre o Plugin “SiteStatsGenerator”

O plugin foi desenvolvido para atender às seguintes necessidades:

  • Captura detalhada de informações, como quantidade de categorias, posts, palavras, entre outros.
  • Identificação da categoria com mais posts, informações do último post, sua URL e data de publicação.
  • Geração de um arquivo HTML chamado site_stats.html, exibindo essas estatísticas de forma clara e organizada.

Espera-se que este guia seja útil para criar e integrar o plugin “SiteStatsGenerator” no Jekyll, contribuindo para uma análise personalizada e aprimoramento contínuo do seu site.

Um elemento fundamental para o sucesso de um blog ou site é a otimização para mecanismos de busca. O SEO (Search Engine Optimization) desempenha um papel vital nesse aspecto, pois melhora a visibilidade do seu conteúdo, atraindo tráfego qualificado e engajado.

A Importância do SEO para Blogs e Sites

O SEO é um conjunto de estratégias que melhoram a visibilidade do conteúdo online. Isso inclui desde a pesquisa de palavras-chave até a criação de conteúdo relevante e estratégias de link building.

Desenvolvimento do Plugin “SiteStatsGenerator”

Neste guia detalhado, vamos explorar a criação e implementação do plugin “SiteStatsGenerator” no Jekyll, focado na geração de estatísticas do site. Esse plugin oferece uma visão abrangente do desempenho do seu site, fornecendo informações valiosas para análises e insights.

Sobre o Plugin “SiteStatsGenerator”

O plugin “SiteStatsGenerator” foi desenvolvido para:

1- Capturar informações, como quantidade de categorias, artigos, palavras, letras.

2- Identificar a categoria com mais artigos, o último post publicado, sua URL e a data de publicação.

3- Gerar um arquivo HTML chamado site_stats.html com essas estatísticas para exibição no site.

Passo a Passo para Implementação

1. Criação e Localização do Plugin

O arquivo do plugin “SiteStatsGenerator” deve ser salvo na pasta _plugins do projeto Jekyll. O código Ruby contido nesse arquivo será responsável por coletar as informações do site. Na pasta _plugins crie um novo arquivo e de o nome de SiteStatsGenerator.rb copie o codigo abaixo e cole no arquivo que você acabou de criar.

module SiteStatsGenerator
  class Generator < Jekyll::Generator
    def generate(site)
      Jekyll::Hooks.register :site, :post_write do |post|
        generate_stats(site)
      end
    end

    def with_separator(number)
      number.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, "\\1.")
    end

    def generate_stats(site)
      meses_pt = {
        "January" => "Janeiro",
        "February" => "Fevereiro",
        "March" => "Março",
        "April" => "Abril",
        "May" => "Maio",
        "June" => "Junho",
        "July" => "Julho",
        "August" => "Agosto",
        "September" => "Setembro",
        "October" => "Outubro",
        "November" => "Novembro",
        "December" => "Dezembro"
      }

      qtd_categorias = with_separator(site.categories.length)
      qtd_posts = with_separator(site.posts.docs.length)

      qtd_palavras = 0
      qtd_letras = 0
      site.posts.docs.each do |post|
        qtd_palavras += post.content.split.size
        qtd_letras += post.content.gsub(/[^a-zA-Z]/, '').size
      end

      categoria_com_mais_posts = site.categories.max_by { |_, posts| posts.size }
      categoria_mais_posts = categoria_com_mais_posts[0]
      qtd_posts_categoria = with_separator(categoria_com_mais_posts[1].size)

      ultimo_post = site.posts.docs.last
      nome_ultimo_post_com_hifen = ultimo_post.data['title']
      categoria_ultimo_post_com_hifen = ultimo_post.data['categories']&.first

      nome_ultimo_post = nome_ultimo_post_com_hifen.gsub(' ', '-') if nome_ultimo_post_com_hifen
      categoria_ultimo_post = categoria_ultimo_post_com_hifen.gsub('-', ' ') if categoria_ultimo_post_com_hifen

      ultimo_post_sem_hifen = nome_ultimo_post_com_hifen if nome_ultimo_post_com_hifen
      categoria_ultimo_post_sem_hifen = categoria_ultimo_post_com_hifen if categoria_ultimo_post_com_hifen
      data_ultimo_post = ultimo_post.date.strftime("%d/%m/%Y") # Formata a data do último post em pt-BR
      data_ultimo_post_eua = ultimo_post.date.strftime("%m/%d/%Y") # Formata a data do último post em EUA

      url_ultimo_post = ultimo_post.url

      imagem_ultimo_post = nil

      # Verificar se a imagem está presente no front matter e não está vazia
      if ultimo_post.data.key?('featured_image') && !ultimo_post.data['featured_image'].empty?
        imagem_ultimo_post = ultimo_post.data['featured_image']
      end

      posts_por_mes = Hash.new(0)
      posts_por_ano = Hash.new(0)
      site.posts.docs.each do |post|
        nome_mes = post.date.strftime("%B")
        nome_mes_pt = meses_pt[nome_mes]
        posts_por_mes[nome_mes_pt] += 1
        posts_por_ano[post.date.strftime("%Y")] += 1
      end

      mes_com_mais_posts = posts_por_mes.max_by { |_, count| count }
      nome_mes_com_mais_posts = mes_com_mais_posts[0]
      qtd_posts_mes = with_separator(mes_com_mais_posts[1])

      ano_com_mais_posts = posts_por_ano.max_by { |_, count| count }
      nome_ano_com_mais_posts = ano_com_mais_posts[0]
      qtd_posts_ano = with_separator(ano_com_mais_posts[1])

      stats_html = <<~HTML

         <h5>Estatísticas do blog</h5>

         <p>Quantidade de Categorias:<span style="color:red"> #{qtd_categorias}</span></p>
         <p>Total de artigos publicados:<span style="color:red"> #{qtd_posts}</span></p>
         <p>Total de palavras usadas no blog: <span style="color:red">#{with_separator(qtd_palavras)}</span></p>
         <p>Total de letras usadas no blog: <span style="color:red">#{with_separator(qtd_letras)}</span></p>
         <p>Categoria com mais artigos publicados: <span style="color:red">#{categoria_mais_posts}</span> &#8594; <span style="color:red">#{qtd_posts_categoria} artigos</span></p>
         <p>Último post com hífen: #{nome_ultimo_post} <span style="color:red">(Categoria: #{categoria_ultimo_post})</span></p>
          <p>Último post sem hífen: #{ultimo_post_sem_hifen} <span style="color:red">(Categoria sem hífen: #{categoria_ultimo_post_sem_hifen})</span></p>
          <p>URL do último post: <span style="color:red">#{url_ultimo_post}</span></p>
          <p>Mês que mais publiquei artigos no blog:  <span style="color:red">#{nome_mes_com_mais_posts}</span> &#8594; <span style="color:red">#{qtd_posts_mes} artigos</span></p>
          <p>Ano que mais publiquei artigos no blog:  <span style="color:red">#{nome_ano_com_mais_posts}</span> &#8594; <span style="color:red">#{qtd_posts_ano} artigos</span></p>
          <p>Último artigo publicado no blog: <a href="#{url_ultimo_post}" class="text-decoration-none">#{ultimo_post_sem_hifen}</a></p>
          <p>Data do último artigo: #{data_ultimo_post}</p>

      HTML

      File.open("_site/site_stats.html", "w") do |file|
        file.write(stats_html)
      end
    end
  end
end

Jekyll::Hooks.register :site, :post_write do |site|
  SiteStatsGenerator::Generator.new.generate(site)
end

Integrando o plugin ao Site Jekyll

Após criar o plugin, tenha certeza que ele esteja na pasta _plugins e execute o build do site para gerar as estatísticas.

bundle exec jekyll build

Caso não utilize o Bundler, o comando sem o bundle exec também pode ser usado:

jekyll build

Com um dos comandos acima será iniciado a geração do seu site ou blog completo e suas estatísticas a partir dos arquivos fonte presentes no diretório do seu projeto Jekyll. Ele processa os arquivos Markdown, layouts, assets e outros recursos do seu site, gerando uma versão estática pronta para ser hospedada ou visualizada localmente.

Exibição das Estatísticas

Após a geração, um arquivo HTML chamado site_stats.html com as estatísticas do site será criado. Você pode incorporar esses dados em uma página específica do seu site para apresentá-los visualmente aos visitantes.

Conclusão

A criação e implementação do plugin “SiteStatsGenerator” oferecem insights valiosos sobre o desempenho do seu site. Compreender o comportamento do seu público-alvo é crucial para melhorar o conteúdo e a experiência do usuário.

Ao combinar técnicas de SEO com ferramentas de análise, como esse plugin, você estará no caminho certo para aprimorar a presença online do seu site ou blog, proporcionando uma experiência mais enriquecedora para seus visitantes.

Espero que este guia detalhado seja útil para criar e implementar o plugin “SiteStatsGenerator” no Jekyll, contribuindo para a otimização do seu conteúdo e o crescimento da sua audiência.


Publicidade

📢 Quer ficar por dentro de todas as novidades do nosso blog? Não perca os últimos artigos, dicas valiosas e informações relevantes!

Junte-se a nós nas redes sociais para receber em primeira mão:

  • Artigos exclusivos;
  • Dicas práticas;
  • Ofertas especiais e descontos exclusivos para nossos seguidores.

Não vamos inundar sua caixa de entrada com newsletters! Simplesmente nos siga em uma de nossas redes sociais para garantir que você não perca nenhum conteúdo interessante. Estamos ansiosos para tê-lo(a) conosco! 🚀

Cristiano Ribeiro Braga
Autor: Cristiano Ribeiro Braga
Projetos, opinião, tecnologia e muito mais
comentários gerenciados por Disqus