"Early bird" squares
JavaScript (ES6), 51 49 45 bytes

1-indexed.

f=(n,s=k='')=&gt;n?f(n-!!s.match(++k*k),s+k*k):k


Demo



f=(n,s=k='')=&gt;n?f(n-!!s.match(++k*k),s+k*k):k

for(n = 1; n &lt;= 20; n++) {
  console.log('a(' + n + ') = ' + f(n))
}




Formatted and commented

f = (                         // f = recursive function taking:
  n,                          //   n = input
  s = k = ''                  //   s = string of concatenated squares, k = counter
) =&gt;                          //
  n ?                         // if we haven't reached the n-th term yet:
    f(                        //   do a recursive call with:
      n - !!s.match(++k * k), //     n decremented if k² is an early bird square
      s + k * k               //     s updated
    )                         //   end of recursive call
  :                           // else:
    k                         //   return k


Non-recursive version, 53 bytes

This one does not depend on your engine stack size.

n=&gt;{for(k=s='';n-=!!(s+=k*k).match(++k*k););return k}


Try it online!