- 공개 이메일 주소를 스팸봇 수집에서 숨기면서도 방문자가 바로 연락할 수 있게, SVG 내부에 이메일 텍스트와
mailto: 링크를 넣는 방식임
- JavaScript 기반 보호는 더 정교할 수 있지만, 연락 기능 자체가 JS 의존성을 갖는다는 점이 부담이 됨
- 이 접근은 외부 SVG 문서를 HTML의
<object>로 삽입하고, 실제 링크는 HTML이 아니라 SVG 안의 <a> 요소에 둠
- SVG는 이미지처럼 내용을 감추는 효과가 있으면서도
<text> 요소를 쓰기 때문에, 방문자는 이메일 주소를 복사할 수 있음
- 정교한 스팸봇까지 막는 해법은 아니지만, 단순한 이메일 수집 스크립트에 노출되는 위험을 줄이는 데 유용함
SVG로 이메일 주소를 숨기는 방식
- 공개 이메일 주소는 이메일 수집 스팸봇에 노출되기 쉬워 보호 장치가 필요함
- 일반적인 보호 기법은 HTML, CSS, JavaScript를 조합하지만, JavaScript를 쓰면 연락 기능이 페이지의 필수 실행 환경에 묶임
- SVG 방식은 JavaScript를 전혀 쓰지 않고 이메일 표시와 링크 동작을 처리함
- JavaScript가 꺼져 있어도 방문자는 페이지에 표시된 이메일 주소를 사용할 수 있고, 스팸봇에는 일반 HTML 텍스트보다 덜 직접적으로 노출됨
- 다른 프런트엔드 기반 보호 기법처럼, 집요하고 정교한 스팸봇으로부터 공개 이메일 주소를 완전히 보호하지는 못함
- 라이브 데모: SVG-based Email Protection
HTML과 SVG 구현
- HTML 문서는 외부 SVG 파일을
<object>로 삽입함
<object data="svg-email-protection.svg" type="image/svg+xml"></object>
- 같은 SVG 그래픽 문서는 HTML 안에 한 번 또는 여러 번 삽입할 수 있음
- 예시 HTML은
.svg-email-protection 클래스에 width: 180px, height: 24px, vertical-align: middle 스타일을 지정하고, 본문에서 SVG 파일을 <object>로 로드함
- SVG 파일은
viewBox="0 0 200 24"를 가진 <svg> 문서이며, 내부에 이메일 텍스트와 mailto:myemail@mydomain.tld 링크를 둠
<a href="mailto:myemail@mydomain.tld"> 안에 <rect />와 <text>가 들어감
<text>에는 myemail@mydomain.tld가 표시됨
rect:hover와 a:focus 상태에서 배경색, 텍스트 색, 굵기, 밑줄, 그림자 스타일이 바뀜
접근성과 참고 자료
- SVG 문서 전체는
<title>을 가리키는 aria-labelledby를 사용하고, SVG 내부의 <a>에는 같은 콜투액션을 담은 aria-label 을 둠
- 키보드 탭 포커스가 SVG 내부 앵커에 도달하면
<rect />와 <text />가 함께 강조되어 포커스 상태를 드러냄
- 관련 자료: