{"resource":{"author":{"id":"3eh0kijZwMrHum8TkMqX","name":"Devtools Tech","username":"devtoolstech"},"content":{"link":"","difficulty":4,"domain":2,"type":1,"isInternal":true,"body":"![Illustration](https://ik.imagekit.io/devtoolstech/blog/improving-seo/Screenshot%202025-04-24%20at%2011.14.53%E2%80%AFPM_cwJCWDmLD.png?updatedAt=1745516843519)\r\n\r\n#BuildInPublic\r\n\r\nSharing a small SEO improvement I made on [devtools.tech](https://devtools.tech/?utm_source=dt-platform&utm_medium=blog&utm_term=seo-boost) — one that could have a big impact.\r\n\r\nSEO is critical for most businesses, and it often comes up in Frontend System Design interviews. Search engine bots crawl webpages by following actual links (`<a>` tags) i.e. a crawler lands on a webpage then starts crawling all the links present on that webpage and keeps on forming a chain. The more meaningful links you expose, the better your chances of ranking and driving organic traffic.\r\n\r\n**Issue:** While auditing one of our top pages ([devtools.tech/questions/all](https://devtools.tech/questions/all?utm_source=dt-platform&utm_medium=blog&utm_term=seo-boost)), I noticed that pagination was handled via client-side JavaScript (onClick handler + manual URL updates). The issue? Bots don’t follow JS-triggered events, so only the first page was getting crawled and indexed.\r\n\r\n**The fix was simple:** switch from buttons to proper anchor tags with URLs pointing to the next/previous pages. Same experience for users, but way better for crawlers.\r\n\r\nA small, low-hanging fruit — but often, it's the simplest changes that have the biggest impact.\r\n\r\nSee the live changes: [devtools.tech/questions/all](https://devtools.tech/questions/all?utm_source=dt-platform&utm_medium=blog&utm_term=seo-boost)\r\n\r\nI’ll share results soon — stay tuned!","languages":[],"editorConfig":"undefined"},"stats":{"views":7225,"used":0,"likes":0},"description":"","published":true,"isActive":true,"tags":["javascript","blog","ui","ux","devtools tech","frontend","coding","seo","improving seo","google","pagination","client-side","javascript coding","interview questions","frontend system design"],"slug":"how-a-small-pagination-fix-boosted-seo---rid---eIjvS9gwWKW18RV86knB","isPremium":false,"categories":[],"requires":[],"_id":"680a7a04ad3ccc49f04e55ba","title":"How a Small Pagination Fix Boosted SEO?","resourceId":"eIjvS9gwWKW18RV86knB","createdAt":1745517060034,"modifiedAt":1745519355424},"currentUser":null,"isOwner":false,"recommendations":{"questions":[{"_id":"64e471c2d5ab2876a4c280a1","content":{"languages":["javascript","typescript"],"difficulty":1},"tags":["javascript","lodash","chunk","polyfill","interview question","frontend","coding challenge","problem solving","array","lodash polyfills","data structures","coding","maching coding","interviews"],"slug":"implement-a-function-to-split-an-array-into-groups-of-a-certain-length-or-chunk-or-javascript-interview-question-or-lodash-polyfills---qid---LiCgQDyb6JTgJKaQUeVF","title":"Implement a function to split an array into groups of a certain length | Chunk | JavaScript Interview Question | Lodash Polyfills","questionId":"LiCgQDyb6JTgJKaQUeVF"},{"_id":"68edf425e901f595bb23de45","content":{"languages":["javascript","typescript"],"difficulty":1},"tags":["javascript","type","coding","programming question","array polyfills","problem solving","dsa","loops","array"],"slug":"how-to-implement-custom-array-prototype-foreach-method---qid---OgpckMzL8Cy5qlHhV6Jc","title":"How to implement custom Array.prototype.forEach method?","questionId":"OgpckMzL8Cy5qlHhV6Jc"},{"_id":"697b2869132ce4e954d59c82","content":{"languages":["javascript","typescript"],"difficulty":1},"tags":["javascript","ui","ux.rippling frontend interview","devtools tech","tutorial","coding","programming challenge"],"slug":"find-employee---qid---Pzyp6NffTFqSDZsVH0k0","title":"Find Employee","questionId":"Pzyp6NffTFqSDZsVH0k0"},{"_id":"638b6012937c6f54916609f6","content":{"languages":["react"],"difficulty":2},"tags":["javascript","react","custom hook","interview","interview questions","devtools tech","questions","previous state","componentDidMount","shouldComponentUpdate"],"slug":"how-to-create-useprevious-hook-in-react-js-or-javascript-interview-question-or-frontend-problem-solving---qid---z4HmkKVlTn12wS5tOYLq","title":"How to create usePrevious hook in React.js? | JavaScript Interview Question | Frontend Problem Solving","questionId":"z4HmkKVlTn12wS5tOYLq"},{"_id":"63579abd9efd8c366a2ea097","content":{"languages":["javascript","typescript"],"difficulty":1},"tags":["","javascript","arrays","javascript polyfills","interview question","frontend","coding","devtools tech","programming","codedamn","frontend masters","egghead","razorpay","hotstar","tata1mg","swiggy","zomato","array","array find","array includes"],"slug":"how-to-implement-array-prototype-includes-javascript-interview-question-or-problem-solving-or-javascript-polyfills---qid---w4dQTfaSXWAm6UOowema","title":"How to implement Array.prototype.includes? JavaScript Interview Question | Problem Solving | JavaScript Polyfills","questionId":"w4dQTfaSXWAm6UOowema"}],"resources":[{"_id":"652d62fad5ab2876a4ca20ca","content":{"difficulty":4,"domain":2,"type":1,"isInternal":false,"languages":[]},"tags":["frontend","coding","devtools tech","razorpay","interview experience","programming","code","ui","ux"],"slug":"my-frontend-interview-experience-at-razorpay---rid---omqBNlB56roAbPcr5oSM","title":"My FrontEnd Interview Experience At Razorpay","resourceId":"omqBNlB56roAbPcr5oSM"},{"_id":"69036a803177c39e85554ace","content":{"difficulty":1,"domain":2,"type":1,"isInternal":true,"languages":[]},"tags":["javascript","frontend","ui","ux","uber","senior frontend engineer"],"slug":"uber-senior-frontend-interview-experience---rid---HhAZPA5jvh67sTfzr8cw","title":"Uber Senior Frontend Interview Experience","resourceId":"HhAZPA5jvh67sTfzr8cw"},{"_id":"61f104fcf144a82a5ee29fb2","content":{"difficulty":1,"domain":2,"type":1,"isInternal":true},"tags":["javascript","hoisting","interview","js fundamentals","frontend fundamentals","scoping","temporal dead zone","frontend interview questions","interview answers"],"slug":"hoisting-in-javascript-explained-or-javascript-interview-questions---rid---6oy63tirhGHUyvC3HYf1","title":"Hoisting in JavaScript Explained | JavaScript Interview Questions","resourceId":"6oy63tirhGHUyvC3HYf1"},{"_id":"69824d07895fc3bf013b40e2","content":{"difficulty":4,"domain":1,"type":1,"isInternal":true,"languages":[]},"tags":["javascript","ui","ux","blog","best practices","code","devtools tech","article"],"slug":"best-code-practices-for-real-world-applications-part-1---rid---8ohjaCmxsxK093sIQad6","title":"Best Code Practices for Real-World Applications - Part 1","resourceId":"8ohjaCmxsxK093sIQad6"},{"_id":"5f1ded89cbec5f7ffc0c2fb1","content":{"difficulty":1,"domain":2,"type":1,"isInternal":true},"tags":["node.js","javascript","js","call by value","call by reference","frontend fundamentals","interview questions","call by value vs call by reference"],"slug":"understanding-call-by-value-vs-call-by-reference-in-javascript---rid---7MW12KGElzTyMF7wapHw","title":"Understanding Call By Value vs Call By Reference in JavaScript","resourceId":"7MW12KGElzTyMF7wapHw"}]}}