Google supports:

- [Link Hreflang][1]
- [HTTP Header Hreflang][2]
- [Sitemap Hreflang][3]

Using `<link rel="alternate" href="#" hreflang="en-ie" />` within the `<body>`and not the `<head>`, testing it in W3C validator fails and reports the following:

> [W3C][4]
> 
> A link element must not appear as a descendant of a body element
> unless the link element has an itemprop attribute or has a rel
> attribute whose value contains dns-prefetch, pingback, preconnect,
> prefetch, preload, prerender, or stylesheet

It has been mentioned by [Rob][5] and [Boldewyn][6], in both answers and comments that hreflang can be used within a `<a>`, since these tags are allowed within the body. This is true and both users make good points, however...

*It can be very complex using hreflang within `<a>` and its unclear if its supported by Google:*

1. You need to make all links to page use the markup, so if you have many articles interlinking one another, it can become complex, very complex if having more than 2 language options. Adding markup to the page rather than links is less complex because you simply do a GET URL and plant that variable into link canonical, link hreflang, Facebook opengraph, Twitter cards etc.
2. The main issue however is Google's Search Console Help mentions nothing of using `<a>` for Multiple languages, this isn't to say its not supported, its just that I can say for sure it is. 

*Google specific says it supports:*

> HTML link element in header. In the HTML <head> section of `http://www.example.com/`, add a link element pointing to the Spanish
> version of that webpage at `http://es.example.com/`, like this:
> 
>     <link rel="alternate" hreflang="es" href="http://es.example.com/" />
> 
> HTTP header. If you publish non-HTML files (like PDFs), you can use an HTTP header to indicate a different language version of a URL:
> 
>     <http://es.example.com/>; rel="alternate"; hreflang="es"
> 
> To specify multiple hreflang values in a Link HTTP header, separate the values with commas like so:
> 
>     <http://es.example.com/>; rel="alternate"; hreflang="es">, <http://de.example.com/>; rel="alternate"; hreflang="de">
> 
> Sitemap. Instead of using markup, you can submit language version information in a Sitemap.

*I recommend that you verify your MARKUP on-going using [W3C validator][4], for example using this direct input code:*

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <title>Simon Hayter Rocks!</title>
        <link rel="stylesheet" href="example.css">
        <script src="example.js"></script>
      </head>
      <body>
        <link rel="alternate" href="http://example.com/en-ie" hreflang="en-ie" />
      </body>
    </html>


  [1]: https://www.w3.org/wiki/Html/Elements/link
  [2]: https://www.askapache.com/htaccess/#Charset_Language_headers
  [3]: https://support.google.com/webmasters/answer/2620865?hl=en
  [4]: https://validator.w3.org/#validate_by_input
  [5]: https://webmasters.stackexchange.com/users/8466/rob
  [6]: https://webmasters.stackexchange.com/users/14335/boldewyn