Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
A Liquid Filter for obfuscating an Email Address (can be used with Jekyll aswell)

In Jekyll set a variable for the mail, e.g. in the _config.yml


then use it in your page

Reach me under:	{{ | mailObfuscate }}

which will generate the following HTML

<a href="#" data-contact="bmFtZUBtYWlsLmNvbQ== " target="_blank" onfocus="this.href = 'mailto:' + atob(">    
    <script type="text/javascript">document.write(atob("bmFtZUBtYWlsLmNvbQ== "));</script>

This uses some simple obfuscation techniques of url encode and base64 encode the mail and use JS to support the link and write it to HTML programmatically. This is certainly not bulletproof, but a good shield and in combination with a good spam filter this will fix your problem with mail crawlers.

These techniques are partly from

require "base64"
require "uri"
module ObfuscateMailAddress
def mailObfuscate(input)
base64Mail = Base64.strict_encode64(URI::encode(input))
# See
output = "<a href=\"#\" "
output += "data-contact=\"#{base64Mail}\" target=\"_blank\" "
output += "onfocus=\"this.href = 'mailto:' + atob(\">"
output += "<script type=\"text/javascript\">document.write(atob(\"#{base64Mail}\"));</script></a>"
return output

This comment has been minimized.

Copy link

djiest commented Apr 12, 2019

I'm rather new with Jekyll and Liquid. How can I pass text that can be used as linktext? E.g.
<a href=">foobar</a>

I would like to pass as input and foobar as linktext


This comment has been minimized.

Copy link

yasarhabib commented Apr 19, 2019

I'd like to know this as well. How do you actually use this code?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.