Top Free DNS Servers in 2026: Best Public DNS for Speed, Privacy and Security

Top Free DNS Servers in 2026: Best Public DNS for Speed, Privacy & Security If your internet connection feels slow when opening websites, apps, or online services, changing your DNS server may be one simple setting worth trying. In this guide, we list some of the most popular free public DNS servers you can use in 2026 , including Cloudflare, Google Public DNS, Quad9, AdGuard DNS, Control D, OpenDNS, CleanBrowsing, DNS.WATCH, and other options. Quick Tip: There is no single DNS server that is automatically the fastest for every person. DNS performance can depend on your internet provider, location, routing, and network conditions. The best approach is to test several reliable DNS services and see which works best on your connection. What Is DNS? DNS stands for Domain Name System . It works like a directory for the internet by translating website names into IP addresses that computers can understand. For example, when you type a website address into your b...

How to Create a Dynamic Sitemap Using JavaScript for Blogger

How to Create a Dynamic Sitemap Using JavaScript for Blogger

In this tutorial, you’ll learn how to create a dynamic HTML sitemap for your Blogger website. This sitemap automatically fetches your latest posts using the Blogger JSON feed and neatly organizes them by category/label.

✅ Features

  • Automatically fetches up to 500 posts from your blog
  • Groups posts by label (category)
  • Accordion-style layout for easy browsing
  • Built-in search bar for quick post filtering
  • Clean, responsive design that’s easy to customize

The best part? It’s powered entirely by JavaScript — no plugins or manual updates required. This dynamic sitemap is perfect for Blogger users who want a searchable and organized content list that helps visitors find posts faster.

To use this on your blog, just copy the code below and paste it into a new Page in your Blogger dashboard (use the HTML view). Replace the highlighted parts in red with your own site details.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Sitemap - <span style="color:red;">Your Title</span></title>
  <style>
    body {
      font-family: Arial, sans-serif;
      padding: 20px;
      max-width: 1000px;
      margin: auto;
      background: #f4f4f4;
    }
    h1 { text-align: center; color: #222; }
    input[type="text"] {
      width: 100%;
      padding: 10px;
      margin: 20px 0;
      font-size: 16px;
      border: 1px solid #ccc;
      border-radius: 6px;
    }
    .accordion {
      background-color: #0073e6;
      color: white;
      cursor: pointer;
      padding: 14px 20px;
      width: 100%;
      text-align: left;
      font-size: 18px;
      border: none;
      border-radius: 6px;
      margin-top: 10px;
    }
    .accordion.active, .accordion:hover {
      background-color: #005bb5;
    }
    .panel {
      padding: 0 20px;
      background-color: white;
      max-height: 0;
      overflow: hidden;
      transition: max-height 0.3s ease-out;
      border: 1px solid #ddd;
      border-top: none;
      border-radius: 0 0 6px 6px;
    }
    ul { list-style: none; padding: 10px 0; margin: 0; }
    li { padding: 6px 0; border-bottom: 1px dashed #ccc; }
    a { color: #333; text-decoration: none; }
    a:hover { color: #0073e6; }
    small { color: #888; font-size: 13px; }
  </style>
</head>
<body>
  <h1><span style="color:red;">Your Site Sitemap (By Category)</span></h1>
  <input type="text" id="search" placeholder="Search post titles...">
  <div id="sitemap">Loading posts...</div>

  <script>
    const blogURL = '<span style="color:red;">https://yoursite.blogspot.com</span>';
    const maxPosts = 500;

    fetch(`${blogURL}/feeds/posts/default?alt=json&max-results=${maxPosts}`)
      .then(res => res.json())
      .then(data => {
        const entries = data.feed.entry || [];
        const postsByLabel = {};

        entries.forEach(post => {
          const title = post.title.$t;
          const link = post.link.find(l => l.rel === 'alternate').href;
          const date = new Date(post.published.$t).toLocaleDateString('en-US', {
            year: 'numeric', month: 'long', day: 'numeric'
          });
          const labels = post.category ? post.category.map(c => c.term) : ['Unlabeled'];

          labels.forEach(label => {
            if (!postsByLabel[label]) postsByLabel[label] = [];
            postsByLabel[label].push({ title, link, date });
          });
        });

        let output = '';
        const sortedLabels = Object.keys(postsByLabel).sort();

        sortedLabels.forEach(label => {
          output += `
            <button class="accordion">${label}</button>
            <div class="panel"><ul>
              ${postsByLabel[label].map(post => `
                <li><a href="${post.link}" target="_blank">${post.title}</a>
                <small>(${post.date})</small></li>
              `).join('')}
            </ul></div>
          `;
        });

        document.getElementById('sitemap').innerHTML = output;

        // Accordion
        const acc = document.getElementsByClassName("accordion");
        for (let i = 0; i < acc.length; i++) {
          acc[i].addEventListener("click", function () {
            this.classList.toggle("active");
            const panel = this.nextElementSibling;
            panel.style.maxHeight = panel.style.maxHeight ? null : panel.scrollHeight + "px";
          });
        }

        // Search Filter
        document.getElementById('search').addEventListener('input', function () {
          const query = this.value.toLowerCase();
          const items = document.querySelectorAll('.panel ul li');
          items.forEach(li => {
            const text = li.textContent.toLowerCase();
            li.style.display = text.includes(query) ? '' : 'none';
          });
        });
      })
      .catch(err => {
        console.error(err);
        document.getElementById('sitemap').innerHTML = 'Failed to load sitemap.';
      });
  </script>
</body>
</html>
  

Comments

Popular posts from this blog

CS Form No. 211 Revised 2025 Medical Certificate (XLS Download)

ACKNOWLEDGEMENT RECEIPT (Sample)

DEED OF SALE MOTOR VEHICLE FORMAT