-
Notifications
You must be signed in to change notification settings - Fork 371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adicionar rel="nofollow" nos links de conteúdos gerados por usuário #1603
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Muito bom Rafa!
Adicionei o plugin
rehype-extenral-links
que serve exatamente para adicionar orel="nofollow"
em links externos.
O plugin considera interno todos os links relativos, né? Só que está adicionando rel="nofollow"
nos links de conteúdos criados pelos usuários com URLs absolutas do próprio TabNews. Será que isso não pode prejudicar o SEO?
Dá para passar uma função createRel
como rel
nas opções do rehypeExternalLinks
, e devolver o array vazio quando forem links absolutos internos. Ou usar o test
como você falou mais abaixo. Pode ser uma boa usar o webserver.host
para comparar.
Essa bibliioteca recomenda usar
rehype-sanitize
para conteúdos gerados por usuários, mas obytemd
já faz isso antes de adicionar os plugins do rehype.
Inclusive nós já utilizamos um sanitize
customizado:
tabnews.com.br/pages/interface/components/Markdown/index.js
Lines 91 to 98 in cbcc71c
function sanitize(defaultSchema) { | |
const schema = { ...defaultSchema }; | |
schema.attributes['*'] = schema.attributes['*'].filter((attr) => attr != 'className'); | |
schema.attributes['*'].push(['className', /^hljs|^language-|^bytemd-mermaid$|^math/]); | |
return schema; | |
} |
Coloquei
areLinksTrusted
nas páginas que nós controlamos o conteúdo.
Legal, e deve valer a pena manter essa possibilidade mesmo se adotar a identificação automática dos links absolutos internos.
Os links de Fonte continuam sem o
rel="nofollow"
(acho que faz sentido, considerando que a Fonte seja usada da forma adequada, como "origem" do conteúdo).
Não temos como garantir essa "forma adequada", então acho que devemos seguir a mesma regra dos links no corpo dos conteúdos.
Futuramente podemos criar alguma heurística para não adicionar o plugin em conteúdos de usuários confiáveis
É uma boa! Outra opção é poder remover por conteúdo. Usuários confiáveis poderiam optar por usar TabCash para remover o nofollow
do conteúdo. Ideia parecida pode se aplicar a adicionar a tag canonical
.
ou usar a propriedade
test
para permitir domínios confiáveis (GitHub, por exemplo). Um exemplo detest
que não colocarárel="nofollow"
no linkhttps://www.github.com/
:
Legal, e acho que já podemos colocar o GitHub e o Curso.dev, e também o próprio TabNews, já que é outra forma de resolver o problema que citei sobre os links absolutos internos.
E também dá para adicionar a lógica de verificar os domínios lá na createRel
. Tem que ver o trade-off, pois a ordem de verificação dentro do plugin é test && isAbsoluteUrl && rel.length
. Também pesa na decisão a possibilidade de usar outras funções do rehype-extenral-links
, pois ao não passar no test
, nada será feito, enquanto definir rel=[]
não impede as outras modificações que podem se aplicar aos links externos.
Será que a gente deveria permitir o uso de target="_blank"
nos links criados pelos usuários? Eu acho que não, mas:
Se sim, acho que é bom adicionar também o noopener
. É só passar no rel
junto com o nofollow
.
Se não, podemos remover o target
através do sanitize. É só mudar isto
schema.attributes['*'] = schema.attributes['*'].filter((attr) => attr != 'className'); |
para isto
schema.attributes['*'] = schema.attributes['*'].filter((attr) => !['className', 'target'].includes(attr));
Pelos testes que fiz, é isso mesmo. Vou experimentar o
Ok, vou colocar o
👍 vou considerar esses domínios como confiáveis.
Pensando nisso que você falou e na sugestão #477, que provavelmente poderá ser implementada usando esse plugin, parece que o
Eu tinha pensado nisso quando li a documentação da biblioteca, mas não tinha colocado porque entendi pela documentação do MDN (a parte em destaque "Note") que hoje em dia os navegadores já fazem essa proteção por padrão. De toda forma, parece fazer sentido para caso alguém acesse com um navegador mais antigo ou sem essa proteção 👍 Acha necessário adicionar o Edit: para deixar claro, acho que não faz sentido deixar o criador do conteúdo escolher ter ou não o
Eu tenho a impressão que dá para tirar pelo |
Acho melhor não. Isso inviabilizaria outros sites medirem quando tráfego deles tem origem do TabNews.
Acho que não vale a pena implementar isso do #477. Gostei do artigo (When to use target=”_blank”) citado no README da
Não acho que seja possível pelo |
f9a9bdc
to
54e4271
Compare
Acabei optando por não usar o Deixei uma proteção para adicionar |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Acabei optando por não usar o
webserver.host
para comparar porque fiz o código de forma que possibilita comparação desconsiderando o subdomínio do link nohref
. Se for usar owebserver.host
, precisará de um tratamento para remover o subdomínio da string, caso venha a ter um. Acha que faz sentido do jeito que está?
Sim, faz sentido usar o TRUSTED_HOSTS
, até porque isso pode depois ir para uma variável de ambiente, se for necessário, e não precisa estar vinculado ao webserver.host
.
Mas fiz uma sugestão no código que também acaba usando o webserver.host
. Veja se faz sentido.
Deixei uma proteção para adicionar
rel.push('noopener')
caso voltem a aparecer links comtarget="_blank"
, mas se achar desnecessário, eu removo.
Compensa deixar. 👍
54e4271
to
30afbdd
Compare
@aprendendofelipe fiz as alterações, depois me diga se entendi algo errado ou se está tudo certo. Adicionei o |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
depois me diga se entendi algo errado ou se está tudo certo.
Do que eu tinha falado, só faltou testar o protocolo relativo //
. Não acha que compensa?
Adicionei o
webserver.host
na lista de domínios confiáveis para conseguir testar caminhos relativos com olocalhost
.
Show, então o que acha de usar o Set
para remover o domínio duplicado? E também sugeri inverti a ordem dos confiáveis para o que acho que seriam os links mais comuns.
…user generated content Add `rel="nofollow"` to user-generated content links and also to publication sources, with a list of domains considered trustworthy where this attribute will not be added. Remove `target="_blank"` from links.
abb1a66
to
e6ba9a6
Compare
Atualizei com suas recomendações, as alterações estão aqui. |
Em produção 🚀🚀🚀 |
Mudanças realizadas
Adicionei o plugin
rehype-external-links
que serve exatamente para adicionar orel="nofollow"
em links externos. Essa bibliioteca recomenda usarrehype-sanitize
para conteúdos gerados por usuários, mas obytemd
já faz isso antes de adicionar os plugins do rehype.Coloquei
areLinksTrusted
nas páginas que nós controlamos o conteúdo. Os links de Fonte continuam sem orel="nofollow"
(acho que faz sentido, considerando que a Fonte seja usada da forma adequada, como "origem" do conteúdo).Futuramente podemos criar alguma heurística para não adicionar o plugin em conteúdos de usuários confiáveis, ou usar a propriedade
test
para permitir domínios confiáveis (GitHub, por exemplo). Um exemplo detest
que não colocarárel="nofollow"
no linkhttps://www.github.com
:Do jeito que está no PR, o HTML gerado pelos links em publicações ficaram assim (em
localhost
):Resolve #1236
Tipo de mudança
Checklist: