Most JD-tailoring guides tell you to extract "keywords." That's correct but vague. What recruiters at top SWE companies are actually looking for falls into three buckets, and you tailor the resume against each one separately.
First: the stack. Languages, frameworks, databases, infra. These are the keywords that ATS scans and that recruiters search by. Pull them all and verify each appears in either your skills line or a bullet. If the JD says "Python" and your resume says "Python, Django, Pandas" — fine. If the JD says "Go" and you've never written Go — don't list it. Add it later if you actually learn it.
Second: the domain. Backend, frontend, infra/SRE, ML, distributed systems, mobile, security, devtools. JDs almost always specify this and your resume order should mirror it — lead with the bullet that matches the team's domain, even if it's not your most impressive bullet overall.
Third: the seniority cues. "Recent grads," "undergraduate," "junior or senior with coursework in [X]," "upcoming Summer 2026." These are filters, not keywords. Make sure your education line gives the right answer in the first 30 seconds — graduation date prominent, current year explicit if it's relevant, and any gating coursework named ("Operating Systems," "Compilers," "Distributed Systems").