{"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":7128,"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":"5fc2ad156d3cda64e470c414","content":{"languages":["javascript","typescript"],"difficulty":2},"tags":["javascript","frontend fundamentals","js","code","programming"],"slug":"how-to-implement-the-increment-function---qid---smTgW9CCcPfErTTAbfcH","title":"How to implement the Increment function?","questionId":"smTgW9CCcPfErTTAbfcH"},{"_id":"5f8a04d06d3cda64e470c3fe","content":{"languages":["javascript","typescript"],"difficulty":4},"tags":["javascript","frontend","es6","intermediate javascript"],"slug":"how-do-you-implement-the-following-code-snippet-property-access-increment---qid---RqxOr1UVQY5IB5eKy5sO","title":"How do you implement the following code snippet? [Property Access Increment]","questionId":"RqxOr1UVQY5IB5eKy5sO"},{"_id":"5e8ce95cb2cdcd5697fea7bf","content":{"languages":["javascript"],"difficulty":1},"tags":["node.js","javascript","frontend","code","logic","variables","block scope","scoping","hoisting"],"title":"What is the output of the following code snippet? | JavaScript Output Based Question | JS Variables","questionId":"fKtjCwgbBqNJSPj4c6gX","slug":"what-is-the-output-of-the-following-code-snippet-or-javascript-output-based-question-or-js-variables---qid---fKtjCwgbBqNJSPj4c6gX"},{"_id":"5ec64c745b57cb40dd43fa36","content":{"difficulty":2,"languages":"javascript"},"tags":["javascript","copy"],"slug":"what-will-be-the-output-for-the-following-question-copying-in-javascript---qid---EDnrbA2C1m3ZyP33KiuL","title":"What will be the output for the following question (Copying in JavaScript)?","questionId":"EDnrbA2C1m3ZyP33KiuL"},{"_id":"69e9eb04f93997aa6f62181b","content":{"languages":["javascript","typescript"],"difficulty":1},"tags":["javascript","ui","ux","devtools tech","coding","frontend","ui challenge"],"slug":"async-fetcher-with-error-handling---qid---ACHwKMlra3csxMbCHnfy","title":"Async Fetcher with Error Handling","questionId":"ACHwKMlra3csxMbCHnfy"}],"resources":[{"_id":"627795d91195627fe9f20c27","content":{"difficulty":4,"domain":12,"type":2,"isInternal":false},"tags":["product management","video podcast","devtools tech","youtube","product manager","remote","remote job","yomesh gupta","art"],"slug":"the-art-of-product-management-or-in-conversation-with-sourabh-ahuja-or-devtools-tech---rid---Ad5B6k5Zu9Oja2NdFK3t","title":"The Art of Product Management | In Conversation with Sourabh Ahuja | Devtools Tech","resourceId":"Ad5B6k5Zu9Oja2NdFK3t"},{"_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":"5f202d78cbec5f7ffc0c2fbd","content":{"difficulty":1,"domain":2,"type":2},"tags":["Lazy Loading"," Images"," React"," Intersection Observer"],"slug":"implementation-of-lazy-loading-image-oror-react-oror-intersection-observer---rid---iIx8G2ROXtX6ESYTpJ9a","title":"Implementation of Lazy Loading Image || React || Intersection Observer","resourceId":"iIx8G2ROXtX6ESYTpJ9a"},{"_id":"639222ff937c6f54916670ee","content":{"difficulty":3,"domain":2,"type":2,"isInternal":false},"tags":["frontend","javascript","react","interview question","coding","programming","custom hooks","react hooks","ui","ux","blog","tech"],"slug":"how-to-create-useprevious-react-custom-hook-or-advanced-react-js-or-javascript-interview-question---rid---Dwblxb3EWYYxTG2vmwEp","title":"How to create usePrevious React Custom Hook? | Advanced React.js | JavaScript Interview Question","resourceId":"Dwblxb3EWYYxTG2vmwEp"},{"_id":"5f1dd7cbcbec5f7ffc0c2fae","content":{"difficulty":2,"domain":1,"type":1,"isInternal":true},"tags":["node.js","javascript","frontend","frontend fundamentals","js fundamentals","interview questions","backend","backend fundamentals","webpack","inside webpack","advanced webpack","webpack defineplugin","define plugin"],"slug":"optimizing-your-javascript-bundle-or-defineplugin-webpack---rid---kvP5tP0G6isd86ALJUeh","title":"Optimizing your JavaScript Bundle | DefinePlugin Webpack","resourceId":"kvP5tP0G6isd86ALJUeh"}]}}