Why does the $_GET parameter ?search forward the front-page to the archive/blog page

search is a reserved term, and should not be used as a query variable. The presence of any reserved query variable tells WordPress that the current query must be for something other than the front page, so it interprets it as an an archive query of some sort.

The reason you get redirected to the canonical URL on other pages is because being on another page means that there are some other query variables being set that tell WordPress which page to load. These aren’t present on the homepage, hence the fallback to just the blog.

The parameter doesn’t actually do anything though, and hasn’t for at least 15 years, but it’s still reserved for possible future use.