Suporte/Solução de problemas
Solução de problemas

Script do Flowsery Analytics bloqueado pela Content Security Policy (CSP)

Se adicionou o snippet de rastreamento do Flowsery Analytics mas nenhum pageview está a aparecer, os cabeçalhos de Content Security Policy (CSP) do seu site estão muito provavelmente a impedir o carregamento.

Diagnosticar um problema de CSP

  1. Abra o seu site no Chrome ou Firefox
  2. Abra as DevTools (F12 ou Cmd+Shift+I)
  3. Mude para o separador Console
  4. Procure um erro semelhante a:
Text
Refused to load the script 'https://cdn.flowsery.com/main.js' because it violates the following Content Security Policy directive: "script-src 'self'"

Ver esta mensagem confirma que as regras CSP estão a impedir a execução do script do Flowsery Analytics.

Compreender a Content Security Policy

Uma CSP é um cabeçalho HTTP que instrui os navegadores sobre quais recursos externos (scripts, stylesheets, imagens, etc.) são permitidos carregar numa página. Quando analytics.flowsery.com não está incluído na política, o navegador bloqueia silenciosamente o script -- resultando em nenhuns dados recolhidos.

Resolver o problema

Adicione analytics.flowsery.com à diretiva script-src dentro do seu cabeçalho CSP. Os passos específicos variam por plataforma.

Next.js

Atualize o cabeçalho Content-Security-Policy dentro do seu next.config.js:

JavaScript
const ContentSecurityPolicy = `
  script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.flowsery.com;
`;
 
module.exports = {
  async headers() {
    return [
      {
        source: '/(.*)',
        headers: [
          {
            key: 'Content-Security-Policy',
            value: ContentSecurityPolicy.replace(/\n/g, ''),
          },
        ],
      },
    ];
  },
};
JSON
{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Content-Security-Policy",
          "value": "script-src 'self' 'unsafe-inline' https://analytics.flowsery.com;"
        }
      ]
    }
  ]
}
Text
/*
  Content-Security-Policy: script-src 'self' 'unsafe-inline' https://analytics.flowsery.com;

Tag meta HTML

Quando não consegue modificar cabeçalhos do servidor, uma tag meta dentro do <head> é uma alternativa:

HTML
<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline' https://cdn.flowsery.com;" />

Note que esta abordagem só tem efeito quando nenhum cabeçalho CSP ao nível do servidor está presente -- os cabeçalhos do servidor sempre substituem as tags meta.

Nginx

Nginx
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' https://cdn.flowsery.com;" always;
APACHE
Header set Content-Security-Policy "script-src 'self' 'unsafe-inline' https://analytics.flowsery.com;"

WordPress

Se utiliza um plugin de segurança como WP Cerber, Sucuri ou Wordfence, navegue até às definições de CSP ou "HTTP headers" e adicione https://analytics.flowsery.com à lista de fontes de script permitidas.

Quando o seu tema configura CSP diretamente no functions.php:

PHP
header("Content-Security-Policy: script-src 'self' 'unsafe-inline' https://analytics.flowsery.com;");

A executar atrás de um proxy?

Se configurou um proxy para o Flowsery Analytics, o script é servido a partir do seu próprio domínio. Nesse cenário, 'self' na sua CSP já o permite, portanto não devem ser necessárias alterações adicionais. Se os problemas persistirem após o proxy, verifique que o endpoint do proxy está no mesmo domínio que o seu website.

A usar connect-src?

Se a sua CSP também limita connect-src (que controla para onde o navegador pode enviar dados via fetch/XHR), inclua analytics.flowsery.com nessa diretiva também:

Text
Content-Security-Policy: script-src 'self' https://cdn.flowsery.com; connect-src 'self' https://analytics.flowsery.com;

Ainda com problemas?

  • Confirme que está a modificar o cabeçalho CSP ativo. Certos provedores de hospedagem ou CDNs podem substituir cabeçalhos.
  • Procure múltiplos cabeçalhos CSP -- os navegadores aplicam a combinação mais restritiva de todos os cabeçalhos presentes.
  • Limpe a cache do navegador e teste novamente numa janela privada/incógnita.
  • Quando utilizar um proxy, certifique-se de que tanto script-src como connect-src incluem o seu domínio de proxy.