Hreflang tag and ?change_lang for Google
I have a large site in three languages, in all pages I have Hreflang tags, but google indexes site through language switcher by using links www.site.com/about?change_lang=1&lang=en. This result also shows in Google search and also SEO tools recommend to change those URL redirects to 301 redirects. If I'll set all "?change_lang" parameters to "No-follow" will google index pages through Hreflang tags? Or better set as 301 redirects?
If the pretty URL for www.site.com/about?change_lang=1&lang=en is www.site.com/en/aboutand you want Google to index the pretty URL, then use 301 redirects.
If Google has chosen to index the ugly URLs instead of the pretty ones, it means you have a duplicate content issue (same content on 2 URLs -- 1 pretty and 1 ugly). It also suggests that maybe you are using ugly URLs for internal linking. Where else would Google find these URLs if not by crawling?
If you want Google to only use pretty URLs, do the following:
- Redirect ugly URLs to pretty URLs.
- Use only pretty URLs for all internal links.
- Use only pretty URLs for canonical tags and hreflang tags.
It is not necessarily to use 301 redirects in your case. Just inform Google to not index URLs which have specific parameters.
You can set it with Google Search Console → Crawl → URL Parameters, for example: Adding parameter in Google search Console.
OR you can add the <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> tag to each page with necessary parameters.