<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yunus Khan</title>
    <description>The latest articles on DEV Community by Yunus Khan (@yunus_khan_d64b04c980b819).</description>
    <link>https://dev.to/yunus_khan_d64b04c980b819</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4034913%2F7ea23c77-306e-4a57-818d-e7a5d71356e8.png</url>
      <title>DEV Community: Yunus Khan</title>
      <link>https://dev.to/yunus_khan_d64b04c980b819</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yunus_khan_d64b04c980b819"/>
    <language>en</language>
    <item>
      <title>Designing Ethical, Privacy-Preserving Sponsorships for a Static Web App</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sat, 24 Oct 2026 20:30:31 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/designing-ethical-privacy-preserving-sponsorships-for-a-static-web-app-5dne</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/designing-ethical-privacy-preserving-sponsorships-for-a-static-web-app-5dne</guid>
      <description>&lt;p&gt;Designing Ethical, Privacy-Preserving Sponsorships for a Static Web App&lt;/p&gt;

&lt;p&gt;Can a free web application generate revenue without relying on behavioral advertising, intrusive pop-ups, or extensive user tracking?&lt;/p&gt;

&lt;p&gt;That is a question I have been exploring while working on SabrTime, an Islamic Progressive Web App focused on duas, prayer-related tools, tasbeeh, and spiritual reflection.&lt;/p&gt;

&lt;p&gt;The idea is to design a direct sponsorship system that allows suitable businesses to support the project through clearly labelled advertisements while preserving user privacy and keeping essential features accessible.&lt;/p&gt;

&lt;p&gt;This article documents the proposed architecture, security considerations, advertiser review process, and implementation roadmap. The system described here is a design under development, not a claim that a complete advertising platform is already live.&lt;/p&gt;

&lt;p&gt;Project: &lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Problem: Monetization Without Compromising Trust&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Many independent applications depend on advertising networks, subscriptions, donations, or affiliate marketing.&lt;/p&gt;

&lt;p&gt;Each model has trade-offs.&lt;/p&gt;

&lt;p&gt;Third-party advertising can introduce external scripts, cookies, tracking requests, and limited control over the final advertisement. Subscription models may restrict access for users who cannot pay. Affiliate programs can introduce referral tracking and unpredictable revenue.&lt;/p&gt;

&lt;p&gt;For an application built around personal values, these trade-offs deserve careful consideration.&lt;/p&gt;

&lt;p&gt;The questions I wanted to investigate were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can advertisements be selected by page context instead of personal browsing history?&lt;/li&gt;
&lt;li&gt;Can a publisher review every campaign before it appears?&lt;/li&gt;
&lt;li&gt;Can paid placements be clearly distinguished from editorial content?&lt;/li&gt;
&lt;li&gt;Can campaign performance be measured without building individual user profiles?&lt;/li&gt;
&lt;li&gt;Can essential application features remain free?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions form the basis of the proposed sponsorship architecture.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Proposed Model: Direct, Contextual Sponsorship&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rather than immediately integrating a conventional advertising network, the proposed system would allow businesses to apply for direct sponsorship placements.&lt;/p&gt;

&lt;p&gt;A campaign would be reviewed before publication. Approved advertisements could then appear in designated areas of the application, such as selected educational articles or non-essential tool pages.&lt;/p&gt;

&lt;p&gt;For example, a publisher of educational books might sponsor a relevant resource page. The placement would be labelled as sponsored, link to the advertiser's website, and remain separate from the article's editorial conclusions.&lt;/p&gt;

&lt;p&gt;The application would not need to infer the visitor's religious practices or create a behavioral profile to display that placement.&lt;/p&gt;

&lt;p&gt;This is contextual sponsorship: the placement is selected according to the page or section, rather than a profile of the individual visitor.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Simple Architecture for a Static Application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A static frontend can display approved sponsorship content without requiring a complex advertising server.&lt;/p&gt;

&lt;p&gt;However, static hosting alone does not provide secure administrative authentication, private storage, payment verification, or campaign-management permissions.&lt;/p&gt;

&lt;p&gt;A practical architecture therefore separates public campaign delivery from private administration.&lt;/p&gt;

&lt;p&gt;Advertiser&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Campaign Application&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Human Review&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Approval and Publication&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Public Campaign Configuration&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Static Frontend&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Clearly Labelled Sponsored Placement&lt;br&gt;
    |&lt;br&gt;
    v&lt;br&gt;
Advertiser Website&lt;/p&gt;

&lt;p&gt;The diagram represents a proposed workflow rather than a deployed system.&lt;/p&gt;

&lt;p&gt;Public campaign configuration&lt;/p&gt;

&lt;p&gt;A small pilot could use a curated JSON configuration containing approved campaign information.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "campaignId": "campaign-001",&lt;br&gt;
  "advertiserName": "Example Book Publisher",&lt;br&gt;
  "placement": "educational-content",&lt;br&gt;
  "status": "approved",&lt;br&gt;
  "startDate": "2026-11-01",&lt;br&gt;
  "endDate": "2026-11-30",&lt;br&gt;
  "label": "Sponsored",&lt;br&gt;
  "destinationUrl": "&lt;a href="https://example.com/" rel="noopener noreferrer"&gt;https://example.com/&lt;/a&gt;"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This is an illustrative schema. It does not represent a real advertiser or an active campaign.&lt;/p&gt;

&lt;p&gt;The frontend could use this configuration to decide which placement to render and whether the campaign is within its scheduled dates.&lt;/p&gt;

&lt;p&gt;The configuration should contain only information intended to be public. Credentials, payment secrets, private applications, and administrative tokens must never be placed in client-side files.&lt;/p&gt;

&lt;p&gt;Why not build an advertising platform immediately?&lt;/p&gt;

&lt;p&gt;A new project does not necessarily need real-time bidding, audience segmentation, an advertiser dashboard, or a sophisticated analytics pipeline.&lt;/p&gt;

&lt;p&gt;Those systems increase implementation complexity and create additional security and privacy responsibilities.&lt;/p&gt;

&lt;p&gt;A manually managed pilot can help answer the more important initial question: do suitable advertisers actually want this type of placement?&lt;/p&gt;

&lt;p&gt;Infrastructure should grow in response to demonstrated demand rather than assumptions about future scale.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Security Boundaries Matter&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the most important architectural lessons is that a public frontend cannot be trusted to enforce private business rules.&lt;/p&gt;

&lt;p&gt;Suppose a campaign record contains:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "status": "approved"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;That value is useful for rendering a public campaign, but it does not prove that an administrator approved the campaign. A user can modify client-side data and JavaScript in their own browser.&lt;/p&gt;

&lt;p&gt;The real approval process must be enforced by the publishing workflow or a trusted backend.&lt;/p&gt;

&lt;p&gt;A production implementation should account for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication for campaign administrators.&lt;/li&gt;
&lt;li&gt;Authorization checks for approval and modification actions.&lt;/li&gt;
&lt;li&gt;Server-side validation of campaign dates and destinations.&lt;/li&gt;
&lt;li&gt;Protection against unauthorized campaign changes.&lt;/li&gt;
&lt;li&gt;Secure handling of payment credentials.&lt;/li&gt;
&lt;li&gt;A reliable mechanism to pause or withdraw a campaign.&lt;/li&gt;
&lt;li&gt;Audit records for important administrative actions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a static file is updated manually, access to the repository and publishing process becomes part of the security boundary. A larger deployment should introduce an appropriate authenticated management service.&lt;/p&gt;

&lt;p&gt;For a broader introduction to web application security, the "OWASP Cheat Sheet Series" (&lt;a href="https://cheatsheetseries.owasp.org/" rel="noopener noreferrer"&gt;https://cheatsheetseries.owasp.org/&lt;/a&gt;) is a useful resource.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Privacy by Design&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Privacy should influence the architecture before analytics and advertising scripts are added.&lt;/p&gt;

&lt;p&gt;The initial design would aim to avoid behavioral advertising, cross-site tracking, and persistent personal advertising profiles.&lt;/p&gt;

&lt;p&gt;Contextual selection&lt;/p&gt;

&lt;p&gt;A campaign can be selected according to a predefined placement identifier:&lt;/p&gt;

&lt;p&gt;function selectCampaign(campaigns, placement, now = Date.now()) {&lt;br&gt;
  return campaigns.filter((campaign) =&amp;gt; {&lt;br&gt;
    if (campaign.status !== "approved") return false;&lt;br&gt;
    if (campaign.placement !== placement) return false;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const start = Date.parse(`${campaign.startDate}T00:00:00Z`);
const end = Date.parse(`${campaign.endDate}T23:59:59Z`);

return Number.isFinite(start) &amp;amp;&amp;amp;
  Number.isFinite(end) &amp;amp;&amp;amp;
  now &amp;gt;= start &amp;amp;&amp;amp;
  now &amp;lt;= end;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;});&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This example demonstrates basic filtering logic. It does not implement secure approval, campaign storage, payment verification, or a complete production advertising system.&lt;/p&gt;

&lt;p&gt;Production code would also need to define time-zone semantics, validate campaign data, handle unavailable assets, and choose a deterministic display strategy when multiple campaigns match.&lt;/p&gt;

&lt;p&gt;The key point is that placement selection can be based on the current page without requiring a visitor's personal profile.&lt;/p&gt;

&lt;p&gt;Minimize external dependencies&lt;/p&gt;

&lt;p&gt;Even without an advertising network, privacy risks can arise from third-party images, analytics libraries, destination websites, and hosting infrastructure.&lt;/p&gt;

&lt;p&gt;A privacy review should examine network requests, cookies, browser storage, referrer behavior, server logs, and data-retention practices.&lt;/p&gt;

&lt;p&gt;A static frontend is not automatically tracking-free. Privacy claims should be based on the system that is actually deployed and tested.&lt;/p&gt;

&lt;p&gt;For implementation guidance, see the "MDN Web Security documentation" (&lt;a href="https://developer.mozilla.org/en-US/docs/Web/Security" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/Security&lt;/a&gt;).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Screening Advertisers and Destination Pages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Direct sponsorship offers greater control over advertising content, but it also creates a moderation responsibility.&lt;/p&gt;

&lt;p&gt;A campaign should not be approved solely because its banner looks appropriate.&lt;/p&gt;

&lt;p&gt;The proposed review process would examine:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The advertiser's identity and contact details.&lt;/li&gt;
&lt;li&gt;The advertised product or service.&lt;/li&gt;
&lt;li&gt;The wording and imagery.&lt;/li&gt;
&lt;li&gt;The destination website.&lt;/li&gt;
&lt;li&gt;Pricing, material conditions, and commercial claims.&lt;/li&gt;
&lt;li&gt;Potential scams, misleading redirects, or unsafe payment flows.&lt;/li&gt;
&lt;li&gt;Whether the campaign follows the publisher's published eligibility policy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For SabrTime, the proposed policy would be informed by Islamic ethical principles and would exclude clearly unsuitable categories.&lt;/p&gt;

&lt;p&gt;However, a publisher should not claim that every approved advertisement has received independent religious certification unless that certification genuinely exists.&lt;/p&gt;

&lt;p&gt;Advertising approval is a review decision, not automatically a religious endorsement.&lt;/p&gt;

&lt;p&gt;Campaigns should also be reviewed again if the destination page or advertised product changes materially after approval.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make Commercial Content Explicit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A sponsored placement should never imitate an editorial recommendation or a religious resource.&lt;/p&gt;

&lt;p&gt;The user interface should make the commercial relationship obvious.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;


&lt;p&gt;Sponsored&lt;/p&gt;
&lt;br&gt;
  &lt;h2&gt;Example Book Publisher&lt;/h2&gt;
&lt;br&gt;
  &lt;p&gt;Explore the publisher's educational catalogue.&lt;/p&gt;
&lt;br&gt;
  &lt;a href="https://example.com/" rel="sponsored noopener noreferrer"&gt;&lt;br&gt;
    Visit advertiser&lt;br&gt;
  &lt;/a&gt;

&lt;p&gt;This is an illustrative HTML component, not an existing SabrTime production component.&lt;/p&gt;

&lt;p&gt;In a real implementation, the card would also need accessible styling, appropriate link behavior, content validation, and a reliable process for managing campaign expiration.&lt;/p&gt;

&lt;p&gt;The "rel="sponsored"" attribute identifies the commercial nature of the link. The "noopener noreferrer" attributes help control aspects of opening the destination in a new tab.&lt;/p&gt;

&lt;p&gt;Google's guidance on "qualifying outbound links" (&lt;a href="https://developers.google.com/search/docs/crawling-indexing/qualify-outbound-links" rel="noopener noreferrer"&gt;https://developers.google.com/search/docs/crawling-indexing/qualify-outbound-links&lt;/a&gt;) explains how paid links should be identified.&lt;/p&gt;

&lt;p&gt;The sponsorship label should remain visible even when the card is styled to match the rest of the application.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Measuring Campaign Performance Without Individual Profiles&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Advertisers need evidence that a placement is working. That does not mean every click must be connected to a persistent user identity.&lt;/p&gt;

&lt;p&gt;A minimal reporting system could measure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aggregate impressions.&lt;/li&gt;
&lt;li&gt;Aggregate clicks.&lt;/li&gt;
&lt;li&gt;Campaign start and end dates.&lt;/li&gt;
&lt;li&gt;Basic rendering errors.&lt;/li&gt;
&lt;li&gt;Campaign renewals.&lt;/li&gt;
&lt;li&gt;Moderation and approval outcomes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click-through rate is calculated as:&lt;/p&gt;

&lt;p&gt;[&lt;br&gt;
CTR = \frac{\text{Clicks}}{\text{Impressions}} \times 100&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;For example, 25 clicks from 1,000 measured impressions would produce a 2.5% click-through rate.&lt;/p&gt;

&lt;p&gt;This is an illustrative calculation, not a measured result from the project.&lt;/p&gt;

&lt;p&gt;The system must define what counts as an impression. A card being loaded is not necessarily equivalent to being visible to a user.&lt;/p&gt;

&lt;p&gt;A small pilot could use aggregate event counts without retaining individual click histories. Any analytics implementation should still be reviewed for unnecessary identifiers, IP-address retention, third-party requests, and applicable privacy requirements.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What About Payments?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Payment processing should be treated as a separate, trusted component.&lt;/p&gt;

&lt;p&gt;The browser must not be allowed to declare a campaign paid simply because a user reaches a success page or changes a client-side variable.&lt;/p&gt;

&lt;p&gt;A production payment flow should verify payment status through the payment provider's trusted mechanisms and reconcile the result with the campaign record.&lt;/p&gt;

&lt;p&gt;Other important requirements include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clear campaign pricing and duration.&lt;/li&gt;
&lt;li&gt;Refund and cancellation terms.&lt;/li&gt;
&lt;li&gt;Payment receipts and accounting records.&lt;/li&gt;
&lt;li&gt;Protection of API secrets.&lt;/li&gt;
&lt;li&gt;A process for disputed or failed payments.&lt;/li&gt;
&lt;li&gt;Appropriate tax and consumer-law review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small pilot could begin with manually agreed sponsorships and controlled campaign publication before introducing an automated payment workflow.&lt;/p&gt;

&lt;p&gt;The implementation choice should reflect the project's scale and available operational resources.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Practical Development Roadmap&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The proposed system can be developed incrementally.&lt;/p&gt;

&lt;p&gt;Phase 1: Define the policy&lt;/p&gt;

&lt;p&gt;Document eligible categories, prohibited content, review criteria, sponsorship labels, and privacy expectations.&lt;/p&gt;

&lt;p&gt;Phase 2: Build the display component&lt;/p&gt;

&lt;p&gt;Create an accessible sponsored card with a clear label, validated destination, and placement rules.&lt;/p&gt;

&lt;p&gt;Phase 3: Introduce controlled publishing&lt;/p&gt;

&lt;p&gt;Maintain an approved campaign configuration and restrict access to the publishing workflow.&lt;/p&gt;

&lt;p&gt;Phase 4: Run a limited pilot&lt;/p&gt;

&lt;p&gt;Test mobile layouts, keyboard navigation, campaign expiration, broken links, and the effect on essential application features.&lt;/p&gt;

&lt;p&gt;Phase 5: Evaluate the evidence&lt;/p&gt;

&lt;p&gt;Measure aggregate campaign performance, gather user feedback, and determine whether advertisers see enough value to continue.&lt;/p&gt;

&lt;p&gt;Phase 6: Expand only when justified&lt;/p&gt;

&lt;p&gt;If the pilot demonstrates demand, consider a secure administrative interface, campaign scheduling, payment reconciliation, and aggregate reporting.&lt;/p&gt;

&lt;p&gt;This approach avoids investing prematurely in a large advertising platform before the underlying business model has been validated.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Applying the Approach to SabrTime&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;SabrTime is an Islamic PWA focused on duas, worship-related tools, and spiritual reflection.&lt;/p&gt;

&lt;p&gt;Its proposed sponsorship model explores whether direct commercial support can help sustain free resources without making invasive tracking or intrusive advertising a requirement.&lt;/p&gt;

&lt;p&gt;The intended principles are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Essential worship features remain accessible.&lt;/li&gt;
&lt;li&gt;Sponsored content is clearly identified.&lt;/li&gt;
&lt;li&gt;Advertisers are reviewed before publication.&lt;/li&gt;
&lt;li&gt;Commercial placements do not control religious editorial content.&lt;/li&gt;
&lt;li&gt;Personal religious activity is not used to construct advertising profiles.&lt;/li&gt;
&lt;li&gt;Campaign administration and payment processing receive appropriate security controls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sponsorship feature is a work in progress. These principles describe the intended design and should not be interpreted as proof that all the controls are already implemented.&lt;/p&gt;

&lt;p&gt;Project reference: &lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lessons for Independent Developers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The broader lesson is that monetization architecture should follow the product's values.&lt;/p&gt;

&lt;p&gt;Before choosing an advertising provider or building an ad server, developers can ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What user data is actually necessary?&lt;/li&gt;
&lt;li&gt;Can page context replace behavioral profiling?&lt;/li&gt;
&lt;li&gt;Who approves commercial content?&lt;/li&gt;
&lt;li&gt;How can paid links be disclosed?&lt;/li&gt;
&lt;li&gt;What happens when a campaign becomes unsafe?&lt;/li&gt;
&lt;li&gt;Which components require server-side enforcement?&lt;/li&gt;
&lt;li&gt;What evidence would justify investing in a more complex platform?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The answers may differ across products, but making these decisions early can reduce unnecessary complexity later.&lt;/p&gt;

&lt;p&gt;A static application can be a useful starting point for a small sponsorship pilot. A production commercial system still needs appropriate security, operational controls, and honest privacy disclosures.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;Privacy-conscious sponsorship is not simply a matter of removing third-party advertising scripts.&lt;/p&gt;

&lt;p&gt;It requires a deliberate approach to campaign selection, moderation, disclosure, data minimization, security, and commercial accountability.&lt;/p&gt;

&lt;p&gt;The proposed SabrTime model explores a straightforward starting point: direct sponsorship, contextual placements, human review, and aggregate reporting.&lt;/p&gt;

&lt;p&gt;The next step is to validate the model through a limited implementation and real feedback before investing in more complex infrastructure.&lt;/p&gt;

&lt;p&gt;For independent developers, the most useful question may not be how many advertisements an application can display, but how it can generate sustainable revenue while preserving the trust of the people who use it.&lt;/p&gt;




&lt;p&gt;Disclosure: This article was prepared with AI assistance and describes a proposed feature under development. It does not claim that the complete sponsorship system is deployed or that any advertiser has been independently halal-certified.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built DeenGuide: A Situation-Based Islamic Guidance Tool With an SEO-First Architecture</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sun, 13 Sep 2026 20:04:57 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/i-built-deenguide-a-situation-based-islamic-guidance-tool-with-an-seo-first-architecture-49ha</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/i-built-deenguide-a-situation-based-islamic-guidance-tool-with-an-seo-first-architecture-49ha</guid>
      <description>&lt;p&gt;Most Islamic websites are organized around topics.&lt;/p&gt;

&lt;p&gt;Prayer.&lt;br&gt;
Fasting.&lt;br&gt;
Duas.&lt;br&gt;
Wudu.&lt;/p&gt;

&lt;p&gt;But that's not necessarily how people think when they actually need help.&lt;/p&gt;

&lt;p&gt;They usually arrive with a situation:&lt;/p&gt;

&lt;p&gt;«“I have no water. What should I do?”»&lt;/p&gt;

&lt;p&gt;«“I missed a prayer. How do I make it up?”»&lt;/p&gt;

&lt;p&gt;«“I have doubts about my wudu.”»&lt;/p&gt;

&lt;p&gt;«“Can I make dua in my own language?”»&lt;/p&gt;

&lt;p&gt;«“How do I find the Qibla?”»&lt;/p&gt;

&lt;p&gt;That observation became the starting point for DeenGuide, a situation-based Islamic guidance tool built as part of "SabrTime" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Live tool: "SabrTime DeenGuide" (&lt;a href="https://sabrtime.in/tools/deenguide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/tools/deenguide.html&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;The goal wasn't to build another generic Islamic article library.&lt;/p&gt;

&lt;p&gt;The goal was to build a structured system where a user can start with a real-life situation and reach clear, source-based guidance with as little friction as possible.&lt;/p&gt;




&lt;p&gt;What Is DeenGuide?&lt;/p&gt;

&lt;p&gt;DeenGuide is designed around a simple question:&lt;/p&gt;

&lt;p&gt;“What are you dealing with?”&lt;/p&gt;

&lt;p&gt;Instead of requiring users to understand complicated Islamic terminology first, DeenGuide lets them search or browse everyday situations.&lt;/p&gt;

&lt;p&gt;The system is organized around areas such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wudu &amp;amp; Purification&lt;/li&gt;
&lt;li&gt;Salah&lt;/li&gt;
&lt;li&gt;Fasting&lt;/li&gt;
&lt;li&gt;Dua &amp;amp; Dhikr&lt;/li&gt;
&lt;li&gt;Spiritual Life&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A situation can then become its own dedicated resource.&lt;/p&gt;

&lt;p&gt;Visit the "DeenGuide interface" (&lt;a href="https://sabrtime.in/tools/deenguide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/tools/deenguide.html&lt;/a&gt;) to see the current implementation.&lt;/p&gt;




&lt;p&gt;Why Situation-Based Architecture?&lt;/p&gt;

&lt;p&gt;Consider two approaches.&lt;/p&gt;

&lt;p&gt;Traditional structure&lt;/p&gt;

&lt;p&gt;Islamic Website&lt;br&gt;
    ↓&lt;br&gt;
Prayer&lt;br&gt;
    ↓&lt;br&gt;
Prayer Guide&lt;br&gt;
    ↓&lt;br&gt;
Various situations&lt;/p&gt;

&lt;p&gt;The user has to discover the relevant section.&lt;/p&gt;

&lt;p&gt;DeenGuide&lt;/p&gt;

&lt;p&gt;DeenGuide&lt;br&gt;
    ↓&lt;br&gt;
Category&lt;br&gt;
    ↓&lt;br&gt;
Situation&lt;br&gt;
    ↓&lt;br&gt;
Guidance&lt;br&gt;
    ↓&lt;br&gt;
Sources&lt;br&gt;
    ↓&lt;br&gt;
Related resources&lt;/p&gt;

&lt;p&gt;This is closer to how people actually search.&lt;/p&gt;

&lt;p&gt;Someone may not search:&lt;/p&gt;

&lt;p&gt;«“Islamic purification jurisprudence”»&lt;/p&gt;

&lt;p&gt;They may search:&lt;/p&gt;

&lt;p&gt;«“What if I have no water for wudu?”»&lt;/p&gt;

&lt;p&gt;The difference is between topic intent and situation intent.&lt;/p&gt;

&lt;p&gt;That distinction is central to the architecture.&lt;/p&gt;




&lt;p&gt;The Main DeenGuide URL Is Only the Entry Point&lt;/p&gt;

&lt;p&gt;The main "DeenGuide page" (&lt;a href="https://sabrtime.in/tools/deenguide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/tools/deenguide.html&lt;/a&gt;) isn't intended to be the entire knowledge base.&lt;/p&gt;

&lt;p&gt;It acts as the navigation layer.&lt;/p&gt;

&lt;p&gt;SabrTime&lt;br&gt;
   ↓&lt;br&gt;
DeenGuide&lt;br&gt;
   ↓&lt;br&gt;
Category&lt;br&gt;
   ↓&lt;br&gt;
Situation&lt;br&gt;
   ↓&lt;br&gt;
Detailed guidance&lt;br&gt;
   ↓&lt;br&gt;
Related SabrTime content&lt;/p&gt;

&lt;p&gt;This creates a potential content graph rather than a collection of disconnected articles.&lt;/p&gt;

&lt;p&gt;The same philosophy is used throughout the "SabrTime Blog" (&lt;a href="https://sabrtime.in/blog/" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/&lt;/a&gt;), where different Islamic topics are organized into supporting resources.&lt;/p&gt;




&lt;p&gt;Situation Pages Can Become Search Resources&lt;/p&gt;

&lt;p&gt;One of the most important technical ideas behind DeenGuide is that individual situations can have their own URLs.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;/tools/deenguide/&lt;br&gt;
        ↓&lt;br&gt;
Category&lt;br&gt;
        ↓&lt;br&gt;
Situation&lt;br&gt;
        ↓&lt;br&gt;
Detailed answer&lt;br&gt;
        ↓&lt;br&gt;
Related situation&lt;br&gt;
        ↓&lt;br&gt;
Supporting article&lt;/p&gt;

&lt;p&gt;This is important for both users and search engines.&lt;/p&gt;

&lt;p&gt;A specific URL can represent a specific intent.&lt;/p&gt;

&lt;p&gt;It also means that the project can grow without turning the main DeenGuide page into one enormous document.&lt;/p&gt;




&lt;p&gt;Internal Linking Is Part of the Product&lt;/p&gt;

&lt;p&gt;I don't see internal linking as just an SEO technique.&lt;/p&gt;

&lt;p&gt;For DeenGuide, it is part of the UX.&lt;/p&gt;

&lt;p&gt;Imagine a user looking for information about missed prayers.&lt;/p&gt;

&lt;p&gt;The immediate DeenGuide answer can help them understand what to do.&lt;/p&gt;

&lt;p&gt;But they may also need a deeper explanation.&lt;/p&gt;

&lt;p&gt;That's where the SabrTime "Missed Prayers / Qaza guide" (&lt;a href="https://sabrtime.in/blog/missed-prayers-qaza-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/missed-prayers-qaza-guide.html&lt;/a&gt;) becomes useful.&lt;/p&gt;

&lt;p&gt;The journey becomes:&lt;/p&gt;

&lt;p&gt;User Situation&lt;br&gt;
      ↓&lt;br&gt;
DeenGuide&lt;br&gt;
      ↓&lt;br&gt;
Immediate Answer&lt;br&gt;
      ↓&lt;br&gt;
Deep Guide&lt;br&gt;
      ↓&lt;br&gt;
Related SabrTime Tools&lt;/p&gt;

&lt;p&gt;This is much stronger than having an isolated blog post.&lt;/p&gt;




&lt;p&gt;Building a Content Graph&lt;/p&gt;

&lt;p&gt;The long-term architecture can look like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                     SabrTime
                        │
          ┌─────────────┴─────────────┐
          │                           │
      DeenGuide                      Blog
          │                           │
      Categories                  Deep Guides
          │                           │
      Situations ◄────────────────────┤
          │                           │
          └──────────┬────────────────┘
                     │
              Related Resources
                     │
                   Tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This creates relationships between user situations, educational content and practical tools.&lt;/p&gt;

&lt;p&gt;Instead of treating every page as an independent SEO asset, the objective is to build a connected information system.&lt;/p&gt;




&lt;p&gt;Qibla Is a Good Example of the Architecture&lt;/p&gt;

&lt;p&gt;Suppose someone searches:&lt;/p&gt;

&lt;p&gt;«“Which direction is Qibla?”»&lt;/p&gt;

&lt;p&gt;The short answer may be enough.&lt;/p&gt;

&lt;p&gt;But another user may ask:&lt;/p&gt;

&lt;p&gt;«“What is my exact Qibla degree?”»&lt;/p&gt;

&lt;p&gt;Another may ask:&lt;/p&gt;

&lt;p&gt;«“Does Qibla work without internet?”»&lt;/p&gt;

&lt;p&gt;Another may ask:&lt;/p&gt;

&lt;p&gt;«“Why is my phone compass pointing somewhere strange?”»&lt;/p&gt;

&lt;p&gt;These are related but distinct intents.&lt;/p&gt;

&lt;p&gt;SabrTime has supporting resources such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How to Find Qibla Direction" (&lt;a href="https://sabrtime.in/blog/qibla-direction-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/qibla-direction-guide.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Is Qibla East or West?" (&lt;a href="https://sabrtime.in/blog/which-direction-is-qibla.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/which-direction-is-qibla.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Qibla Direction in Degrees" (&lt;a href="https://sabrtime.in/blog/qibla-direction-degrees.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/qibla-direction-degrees.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Airplane Mode and Digital Qibla" (&lt;a href="https://sabrtime.in/blog/airplane-mode-qibla-compass.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/airplane-mode-qibla-compass.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Qibla content demonstrates why a connected content architecture can be more useful than one enormous article.&lt;/p&gt;




&lt;p&gt;Prayer Content Can Form Another Cluster&lt;/p&gt;

&lt;p&gt;The same model works for Salah.&lt;/p&gt;

&lt;p&gt;DeenGuide can provide situation-based answers while deeper SabrTime resources handle specific topics.&lt;/p&gt;

&lt;p&gt;Relevant supporting resources include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Missed Prayers / Qaza" (&lt;a href="https://sabrtime.in/blog/missed-prayers-qaza-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/missed-prayers-qaza-guide.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Sujood as-Sahw" (&lt;a href="https://sabrtime.in/blog/sujood-as-sahw-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/sujood-as-sahw-guide.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Sajdah Tilawah" (&lt;a href="https://sabrtime.in/blog/sajdah-tilawah-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/sajdah-tilawah-guide.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Friday Sunnah Checklist" (&lt;a href="https://sabrtime.in/blog/friday-sunnah-checklist.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/friday-sunnah-checklist.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Adhan Meaning" (&lt;a href="https://sabrtime.in/blog/adhan-meaning.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/adhan-meaning.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture can become:&lt;/p&gt;

&lt;p&gt;Salah&lt;br&gt;
 │&lt;br&gt;
 ├── Missed Prayer&lt;br&gt;
 │      └── Qaza Guide&lt;br&gt;
 │&lt;br&gt;
 ├── Prayer Mistake&lt;br&gt;
 │      └── Sujood as-Sahw&lt;br&gt;
 │&lt;br&gt;
 ├── Quran Recitation&lt;br&gt;
 │      └── Sajdah Tilawah&lt;br&gt;
 │&lt;br&gt;
 └── Friday&lt;br&gt;
        └── Friday Sunnah&lt;/p&gt;




&lt;p&gt;Dua Is Another Natural Knowledge Cluster&lt;/p&gt;

&lt;p&gt;Dua questions are especially suitable for situation-based navigation.&lt;/p&gt;

&lt;p&gt;A user may start with:&lt;/p&gt;

&lt;p&gt;«“I'm anxious.”»&lt;/p&gt;

&lt;p&gt;Then discover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Duas for Anxiety" (&lt;a href="https://sabrtime.in/blog/duas-for-anxiety.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/duas-for-anxiety.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Why Isn't My Dua Being Answered?" (&lt;a href="https://sabrtime.in/blog/why-dua-not-answered.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/why-dua-not-answered.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Can You Make Dua in English?" (&lt;a href="https://sabrtime.in/blog/dua-in-english.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/dua-in-english.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"How to Check If a Dua Is Authentic" (&lt;a href="https://sabrtime.in/blog/how-to-verify-a-dua-is-authentic.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/how-to-verify-a-dua-is-authentic.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Everyday Duas" (&lt;a href="https://sabrtime.in/blog/everyday-duas.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/everyday-duas.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Dua for Parents" (&lt;a href="https://sabrtime.in/blog/dua-for-parents.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/dua-for-parents.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Istikhara" (&lt;a href="https://sabrtime.in/blog/istikhara-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/istikhara-guide.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates an important relationship:&lt;/p&gt;

&lt;p&gt;Situation&lt;br&gt;
   ↓&lt;br&gt;
Relevant Dua&lt;br&gt;
   ↓&lt;br&gt;
Source Verification&lt;br&gt;
   ↓&lt;br&gt;
Deeper Explanation&lt;/p&gt;




&lt;p&gt;Quran Content Creates Another Layer&lt;/p&gt;

&lt;p&gt;SabrTime also has Quran-focused resources.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Surah Al-Fatiha" (&lt;a href="https://sabrtime.in/blog/surah-al-fatiha-meaning.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/surah-al-fatiha-meaning.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Surah Al-Ikhlas" (&lt;a href="https://sabrtime.in/blog/surah-al-ikhlas-meaning.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/surah-al-ikhlas-meaning.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Surah Al-Mulk" (&lt;a href="https://sabrtime.in/blog/surah-al-mulk-meaning.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/surah-al-mulk-meaning.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Surah Al-Kahf" (&lt;a href="https://sabrtime.in/blog/surah-al-kahf.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/surah-al-kahf.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Ayyub (AS) and the Cold-Water Story" (&lt;a href="https://sabrtime.in/blog/ayyub-cold-water.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/ayyub-cold-water.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These can support situations involving prayer, patience, hardship, remembrance and Quranic reflection.&lt;/p&gt;




&lt;p&gt;Tasbeeh and Dhikr Can Become Habit-Based Resources&lt;/p&gt;

&lt;p&gt;Another interesting cluster is Dhikr.&lt;/p&gt;

&lt;p&gt;SabrTime has supporting resources such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"How to Do Tasbeeh" (&lt;a href="https://sabrtime.in/blog/tasbeeh-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/tasbeeh-guide.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Tasbeeh-e-Fatima" (&lt;a href="https://sabrtime.in/blog/tasbeeh-e-fatima.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/tasbeeh-e-fatima.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Digital Tasbeeh Counter" (&lt;a href="https://sabrtime.in/blog/digital-tasbeeh-counter.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/digital-tasbeeh-counter.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Daily Dhikr Habit" (&lt;a href="https://sabrtime.in/blog/daily-dhikr-habit.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/daily-dhikr-habit.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Durood Tunajjina" (&lt;a href="https://sabrtime.in/blog/durood-tunajjina.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/durood-tunajjina.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"Durood on Friday" (&lt;a href="https://sabrtime.in/blog/durood-friday.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/durood-friday.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This connects content with actual product functionality.&lt;/p&gt;

&lt;p&gt;Article&lt;br&gt;
  ↓&lt;br&gt;
Learn&lt;br&gt;
  ↓&lt;br&gt;
Try&lt;br&gt;
  ↓&lt;br&gt;
SabrTime Tool&lt;br&gt;
  ↓&lt;br&gt;
Build Habit&lt;/p&gt;

&lt;p&gt;The website isn't only explaining worship.&lt;/p&gt;

&lt;p&gt;It can also provide tools for practicing it.&lt;/p&gt;




&lt;p&gt;Product + Content Architecture&lt;/p&gt;

&lt;p&gt;The larger SabrTime architecture can therefore become:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                     SabrTime
                        │
    ┌───────────────────┼───────────────────┐
    │                   │                   │
 DeenGuide             Blog               Tools
    │                   │                   │
Situations          Deep Guides        Prayer Times
    │                   │               Qibla
    │                   │               Tasbeeh
    │                   │               Reflection
    └───────────────────┼───────────────────┘
                        │
                      Ebooks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This means content, tools and guidance don't have to exist independently.&lt;/p&gt;

&lt;p&gt;They can reinforce each other.&lt;/p&gt;




&lt;p&gt;The Blog Should Support the Tool — Not Compete With It&lt;/p&gt;

&lt;p&gt;This is one of the most important architectural decisions.&lt;/p&gt;

&lt;p&gt;There should be a clear difference:&lt;/p&gt;

&lt;p&gt;DeenGuide&lt;/p&gt;

&lt;p&gt;“What should I do?”&lt;/p&gt;

&lt;p&gt;Blog&lt;/p&gt;

&lt;p&gt;“Help me understand this deeply.”&lt;/p&gt;

&lt;p&gt;SabrTime tools&lt;/p&gt;

&lt;p&gt;“Help me practice.”&lt;/p&gt;

&lt;p&gt;That creates three different user intents.&lt;/p&gt;

&lt;p&gt;WHAT DO I DO?&lt;br&gt;
      ↓&lt;br&gt;
DeenGuide&lt;/p&gt;

&lt;p&gt;WHY / HOW DOES THIS WORK?&lt;br&gt;
      ↓&lt;br&gt;
Blog&lt;/p&gt;

&lt;p&gt;HOW DO I PRACTICE IT?&lt;br&gt;
      ↓&lt;br&gt;
SabrTime Tools&lt;/p&gt;




&lt;p&gt;Source Transparency&lt;/p&gt;

&lt;p&gt;Islamic content has an additional trust requirement.&lt;/p&gt;

&lt;p&gt;Users need to know:&lt;/p&gt;

&lt;p&gt;“Where did this answer come from?”&lt;/p&gt;

&lt;p&gt;DeenGuide explains its methodology and emphasizes source-based guidance.&lt;/p&gt;

&lt;p&gt;The product also acknowledges legitimate differences of scholarly opinion instead of presenting every issue as if there is always only one possible position.&lt;/p&gt;

&lt;p&gt;This creates:&lt;/p&gt;

&lt;p&gt;Question&lt;br&gt;
   ↓&lt;br&gt;
Answer&lt;br&gt;
   ↓&lt;br&gt;
Source&lt;br&gt;
   ↓&lt;br&gt;
Verification&lt;/p&gt;

&lt;p&gt;That is a critical part of the product.&lt;/p&gt;




&lt;p&gt;DeenGuide Is Not a Fatwa Engine&lt;/p&gt;

&lt;p&gt;This distinction is important.&lt;/p&gt;

&lt;p&gt;DeenGuide is designed as a general educational guidance system.&lt;/p&gt;

&lt;p&gt;It isn't intended to replace a qualified scholar.&lt;/p&gt;

&lt;p&gt;For personal, complex or high-stakes religious questions, users should consult qualified local scholarship.&lt;/p&gt;

&lt;p&gt;That gives the system a clear boundary:&lt;/p&gt;

&lt;p&gt;DeenGuide&lt;br&gt;
    ↓&lt;br&gt;
General guidance&lt;br&gt;
    ↓&lt;br&gt;
Sources&lt;br&gt;
    ↓&lt;br&gt;
Context&lt;br&gt;
    ↓&lt;br&gt;
Scholar when necessary&lt;/p&gt;

&lt;p&gt;This is a much better product boundary than pretending an automated system can replace Islamic scholarship.&lt;/p&gt;




&lt;p&gt;Technical SEO Starts With Architecture&lt;/p&gt;

&lt;p&gt;SEO isn't only about keywords.&lt;/p&gt;

&lt;p&gt;For a system like DeenGuide, the bigger question is:&lt;/p&gt;

&lt;p&gt;How are pages connected?&lt;/p&gt;

&lt;p&gt;A possible architecture is:&lt;/p&gt;

&lt;p&gt;Homepage&lt;br&gt;
   ↓&lt;br&gt;
DeenGuide&lt;br&gt;
   ↓&lt;br&gt;
Category&lt;br&gt;
   ↓&lt;br&gt;
Situation&lt;br&gt;
   ↓&lt;br&gt;
Related Situation&lt;br&gt;
   ↓&lt;br&gt;
Deep Guide&lt;br&gt;
   ↓&lt;br&gt;
Tool&lt;/p&gt;

&lt;p&gt;This creates a semantic content graph.&lt;/p&gt;

&lt;p&gt;Search engines can discover relationships.&lt;/p&gt;

&lt;p&gt;Users can discover related answers.&lt;/p&gt;

&lt;p&gt;And the site owner can understand how content clusters are developing.&lt;/p&gt;




&lt;p&gt;Avoiding Programmatic SEO Spam&lt;/p&gt;

&lt;p&gt;There is an obvious temptation here.&lt;/p&gt;

&lt;p&gt;If 50 situation pages work, why not create 5,000?&lt;/p&gt;

&lt;p&gt;That can become a problem.&lt;/p&gt;

&lt;p&gt;The objective shouldn't be:&lt;/p&gt;

&lt;p&gt;«Generate as many URLs as possible.»&lt;/p&gt;

&lt;p&gt;It should be:&lt;/p&gt;

&lt;p&gt;«Create a useful page when a real user has a distinct situation.»&lt;/p&gt;

&lt;p&gt;A useful rule is:&lt;/p&gt;

&lt;p&gt;Distinct user intent&lt;br&gt;
       +&lt;br&gt;
Distinct useful answer&lt;br&gt;
       +&lt;br&gt;
Reliable source&lt;br&gt;
       +&lt;br&gt;
Navigation value&lt;br&gt;
       =&lt;br&gt;
Potentially justified page&lt;/p&gt;

&lt;p&gt;If two pages are practically identical, they probably don't need to exist as separate SEO pages.&lt;/p&gt;




&lt;p&gt;Internal Link Quality Matters More Than Link Quantity&lt;/p&gt;

&lt;p&gt;A page shouldn't contain 30 random internal links just because they are available.&lt;/p&gt;

&lt;p&gt;Links should answer the next logical question.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Qibla question&lt;br&gt;
     ↓&lt;br&gt;
Qibla Direction Guide&lt;br&gt;
     ↓&lt;br&gt;
Exact Qibla Degrees&lt;br&gt;
     ↓&lt;br&gt;
Qibla Compass&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;Missed Prayer&lt;br&gt;
     ↓&lt;br&gt;
Qaza Guide&lt;br&gt;
     ↓&lt;br&gt;
Prayer Resources&lt;br&gt;
     ↓&lt;br&gt;
SabrTime Prayer Tools&lt;/p&gt;

&lt;p&gt;The "SabrTime Blog" (&lt;a href="https://sabrtime.in/blog/" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/&lt;/a&gt;) provides many natural nodes for this type of contextual linking.&lt;/p&gt;




&lt;p&gt;Mobile-First Architecture&lt;/p&gt;

&lt;p&gt;SabrTime is designed around a mobile-first reality.&lt;/p&gt;

&lt;p&gt;A situation page should ideally require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;minimal JavaScript&lt;/li&gt;
&lt;li&gt;fast initial rendering&lt;/li&gt;
&lt;li&gt;readable HTML&lt;/li&gt;
&lt;li&gt;direct URLs&lt;/li&gt;
&lt;li&gt;simple navigation&lt;/li&gt;
&lt;li&gt;no unnecessary account wall&lt;/li&gt;
&lt;li&gt;no intrusive advertising&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The ideal journey is:&lt;/p&gt;

&lt;p&gt;Open&lt;br&gt;
  ↓&lt;br&gt;
Understand&lt;br&gt;
  ↓&lt;br&gt;
Act&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;p&gt;Open&lt;br&gt;
  ↓&lt;br&gt;
Wait&lt;br&gt;
  ↓&lt;br&gt;
Popup&lt;br&gt;
  ↓&lt;br&gt;
Login&lt;br&gt;
  ↓&lt;br&gt;
Navigate&lt;br&gt;
  ↓&lt;br&gt;
Find answer&lt;/p&gt;




&lt;p&gt;Progressive Enhancement&lt;/p&gt;

&lt;p&gt;A useful principle for DeenGuide is:&lt;/p&gt;

&lt;p&gt;HTML first&lt;br&gt;
   ↓&lt;br&gt;
Content accessible&lt;br&gt;
   ↓&lt;br&gt;
JavaScript enhances experience&lt;/p&gt;

&lt;p&gt;rather than:&lt;/p&gt;

&lt;p&gt;JavaScript loads&lt;br&gt;
   ↓&lt;br&gt;
Application initializes&lt;br&gt;
   ↓&lt;br&gt;
Content appears&lt;/p&gt;

&lt;p&gt;For an information-heavy product, keeping the core content accessible makes the architecture easier to crawl, share and maintain.&lt;/p&gt;




&lt;p&gt;Technical SEO Checklist&lt;/p&gt;

&lt;p&gt;If I scale DeenGuide to hundreds of situations, every page should eventually pass a checklist like this:&lt;/p&gt;

&lt;p&gt;[ ] Unique URL&lt;br&gt;
[ ] Unique title&lt;br&gt;
[ ] Unique meta description&lt;br&gt;
[ ] One clear H1&lt;br&gt;
[ ] Clear search intent&lt;br&gt;
[ ] Useful answer near the top&lt;br&gt;
[ ] Detailed explanation where necessary&lt;br&gt;
[ ] Source references&lt;br&gt;
[ ] Scholarly differences identified&lt;br&gt;
[ ] Parent category link&lt;br&gt;
[ ] DeenGuide link&lt;br&gt;
[ ] Related situation links&lt;br&gt;
[ ] Relevant blog links&lt;br&gt;
[ ] Relevant tool links&lt;br&gt;
[ ] Canonical URL&lt;br&gt;
[ ] Crawlable HTML&lt;br&gt;
[ ] Mobile-friendly layout&lt;br&gt;
[ ] Fast rendering&lt;br&gt;
[ ] Valid structured data where appropriate&lt;br&gt;
[ ] Sitemap inclusion when indexable&lt;br&gt;
[ ] No accidental noindex&lt;br&gt;
[ ] No orphan page&lt;br&gt;
[ ] No broken internal links&lt;/p&gt;

&lt;p&gt;For technical validation, useful resources include "Google Search Central" (&lt;a href="https://developers.google.com/search" rel="noopener noreferrer"&gt;https://developers.google.com/search&lt;/a&gt;), "Google Search Console" (&lt;a href="https://search.google.com/search-console/about" rel="noopener noreferrer"&gt;https://search.google.com/search-console/about&lt;/a&gt;), "PageSpeed Insights" (&lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;https://pagespeed.web.dev/&lt;/a&gt;) and "Schema.org" (&lt;a href="https://schema.org/" rel="noopener noreferrer"&gt;https://schema.org/&lt;/a&gt;).&lt;/p&gt;




&lt;p&gt;Structured Data Should Describe Reality&lt;/p&gt;

&lt;p&gt;Structured data can help machines understand a page.&lt;/p&gt;

&lt;p&gt;Depending on the actual content, potential types can include:&lt;/p&gt;

&lt;p&gt;WebPage&lt;br&gt;
Article&lt;br&gt;
BreadcrumbList&lt;br&gt;
FAQPage&lt;/p&gt;

&lt;p&gt;But schema should describe content that genuinely exists on the page.&lt;/p&gt;

&lt;p&gt;It shouldn't be used as a ranking shortcut.&lt;/p&gt;

&lt;p&gt;The actual page content, information architecture, internal links, performance and source quality remain fundamental.&lt;/p&gt;




&lt;p&gt;Search Console Can Become a Product Research Tool&lt;/p&gt;

&lt;p&gt;One of the most interesting future possibilities is using search data to discover new situations.&lt;/p&gt;

&lt;p&gt;Suppose Search Console shows queries such as:&lt;/p&gt;

&lt;p&gt;what if I have no water for wudu&lt;br&gt;
can I pray with a bandage&lt;br&gt;
forgot how many rakah&lt;br&gt;
missed salah what to do&lt;br&gt;
can I make dua in english&lt;br&gt;
qibla without internet&lt;/p&gt;

&lt;p&gt;These aren't just SEO keywords.&lt;/p&gt;

&lt;p&gt;They are product requirements.&lt;/p&gt;

&lt;p&gt;The workflow becomes:&lt;/p&gt;

&lt;p&gt;Search Query&lt;br&gt;
     ↓&lt;br&gt;
User Problem&lt;br&gt;
     ↓&lt;br&gt;
Potential Situation&lt;br&gt;
     ↓&lt;br&gt;
DeenGuide Page&lt;br&gt;
     ↓&lt;br&gt;
Supporting Guide&lt;br&gt;
     ↓&lt;br&gt;
Tool / Action&lt;/p&gt;

&lt;p&gt;This turns SEO data into product research.&lt;/p&gt;




&lt;p&gt;The SabrTime Content Graph&lt;/p&gt;

&lt;p&gt;At scale, the architecture could look like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                       SabrTime
                          │
         ┌────────────────┼────────────────┐
         │                │                │
     DeenGuide           Blog             Tools
         │                │                │
     Situations       Deep Guides      Prayer Times
         │                │             Qibla
         │                │             Tasbeeh
         │                │             Reflection
         └────────────────┼────────────────┘
                          │
                        Ebooks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And individual content clusters can look like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         QIBLA
           │
   ┌───────┼────────┐
   │       │        │
Basic    Degrees   Compass
   │       │        │
Region   Cities   Offline
   │       │        │
   └───────┼────────┘
           │
       Qibla Tool
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;         SALAH
           │
   ┌───────┼─────────┐
   │       │         │
 Missed  Mistakes   Friday
   │       │         │
 Qaza    Sahw      Sunnah
   │       │         │
   └───────┼─────────┘
           │
      Prayer Tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;Reflection and Sharing Can Add Another Layer&lt;/p&gt;

&lt;p&gt;SabrTime also has a reflection-oriented product direction.&lt;/p&gt;

&lt;p&gt;That introduces another possible user journey:&lt;/p&gt;

&lt;p&gt;Situation&lt;br&gt;
    ↓&lt;br&gt;
Guidance&lt;br&gt;
    ↓&lt;br&gt;
Reflection&lt;br&gt;
    ↓&lt;br&gt;
Reflection Card&lt;br&gt;
    ↓&lt;br&gt;
Share&lt;br&gt;
    ↓&lt;br&gt;
Return to SabrTime&lt;/p&gt;

&lt;p&gt;The important technical principle is that the shareable artifact should point back to its canonical SabrTime resource.&lt;/p&gt;

&lt;p&gt;That makes social sharing a distribution layer rather than creating disconnected content.&lt;/p&gt;




&lt;p&gt;Ebooks Can Become the Long-Form Layer&lt;/p&gt;

&lt;p&gt;SabrTime also has an ebook layer, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"The Sabr Handbook" (&lt;a href="https://sabrtime.in/e-books/the-sabr-handbook.html" rel="noopener noreferrer"&gt;https://sabrtime.in/e-books/the-sabr-handbook.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"New Muslim Starter Guide" (&lt;a href="https://sabrtime.in/e-books/new-muslim-starter-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/e-books/new-muslim-starter-guide.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This creates another level:&lt;/p&gt;

&lt;p&gt;Quick Situation&lt;br&gt;
      ↓&lt;br&gt;
DeenGuide&lt;br&gt;
      ↓&lt;br&gt;
Detailed Blog Guide&lt;br&gt;
      ↓&lt;br&gt;
Long-form Ebook&lt;/p&gt;

&lt;p&gt;Not every user needs the deepest level.&lt;/p&gt;

&lt;p&gt;But users who do want more can continue naturally.&lt;/p&gt;




&lt;p&gt;The Architecture Can Eventually Support Hundreds of Situations&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;p&gt;5 major categories&lt;br&gt;
       ↓&lt;br&gt;
50 situations&lt;br&gt;
       ↓&lt;br&gt;
200 situations&lt;br&gt;
       ↓&lt;br&gt;
500 situations&lt;/p&gt;

&lt;p&gt;The goal isn't to end up with:&lt;/p&gt;

&lt;p&gt;500 isolated URLs&lt;/p&gt;

&lt;p&gt;The goal is:&lt;/p&gt;

&lt;p&gt;Category&lt;br&gt;
   ↕&lt;br&gt;
Situation&lt;br&gt;
   ↕&lt;br&gt;
Related Situation&lt;br&gt;
   ↕&lt;br&gt;
Deep Guide&lt;br&gt;
   ↕&lt;br&gt;
Tool&lt;br&gt;
   ↕&lt;br&gt;
Reflection&lt;/p&gt;

&lt;p&gt;That is what makes the architecture scalable.&lt;/p&gt;




&lt;p&gt;The Biggest Lesson&lt;/p&gt;

&lt;p&gt;The biggest lesson from building DeenGuide isn't a particular meta tag or schema property.&lt;/p&gt;

&lt;p&gt;It's architecture.&lt;/p&gt;

&lt;p&gt;A useful web product needs three things working together:&lt;/p&gt;

&lt;p&gt;User Intent&lt;br&gt;
      +&lt;br&gt;
Information Architecture&lt;br&gt;
      +&lt;br&gt;
Technical SEO&lt;/p&gt;

&lt;p&gt;If one is missing, the system becomes weaker.&lt;/p&gt;

&lt;p&gt;A technically perfect website with poor information architecture is difficult to use.&lt;/p&gt;

&lt;p&gt;A useful product with poor crawlability is difficult to discover.&lt;/p&gt;

&lt;p&gt;And a highly optimized website without genuinely useful content has nothing worth ranking for.&lt;/p&gt;




&lt;p&gt;The Bigger Idea Behind DeenGuide&lt;/p&gt;

&lt;p&gt;DeenGuide isn't really just a collection of Islamic answers.&lt;/p&gt;

&lt;p&gt;Technically, it can become a:&lt;/p&gt;

&lt;p&gt;Situation → Guidance → Source → Action knowledge graph.&lt;/p&gt;

&lt;p&gt;The architecture can eventually look like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;              USER SITUATION
                    │
                    ▼
             ┌─────────────┐
             │  DeenGuide  │
             └──────┬──────┘
                    │
       ┌────────────┼────────────┐
       ▼            ▼            ▼
    SOURCES     SITUATIONS     GUIDES
       │            │            │
       └────────────┼────────────┘
                    ▼
              SabrTime Tools
                    │
                    ▼
                Reflection
                    │
                    ▼
                 Sharing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The long-term objective isn't to create the largest number of pages.&lt;/p&gt;

&lt;p&gt;It's to create the most useful connections between real-life questions, trustworthy sources, practical guidance and supporting resources.&lt;/p&gt;

&lt;p&gt;That's the technical foundation I'm building DeenGuide on.&lt;/p&gt;




&lt;p&gt;SabrTime Resource Map&lt;/p&gt;

&lt;p&gt;Main Product&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"SabrTime" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"DeenGuide" (&lt;a href="https://sabrtime.in/tools/deenguide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/tools/deenguide.html&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"SabrTime Blog" (&lt;a href="https://sabrtime.in/blog/" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"SabrTime SEO Tools" (&lt;a href="https://sabrtime.in/seo-tools/" rel="noopener noreferrer"&gt;https://sabrtime.in/seo-tools/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"SabrTime Ebooks" (&lt;a href="https://sabrtime.in/e-books/" rel="noopener noreferrer"&gt;https://sabrtime.in/e-books/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prayer&lt;br&gt;
-Missed Prayers / Qaza&lt;br&gt;
-Sujood as-Sahw&lt;br&gt;
-Sajdah Tilawah&lt;br&gt;
-Friday Sunnah&lt;br&gt;
-Adhan&lt;/p&gt;

&lt;p&gt;Prayer Category&lt;br&gt;
-Qibla&lt;br&gt;
-Qibla Direction Guide&lt;br&gt;
-Is Qibla East or West?&lt;br&gt;
-Qibla Direction in Degrees&lt;br&gt;
-Airplane Mode Qibla&lt;/p&gt;

&lt;p&gt;Dua&lt;br&gt;
-Duas for Anxiety&lt;br&gt;
-Why Dua Isn't Answered&lt;br&gt;
-Dua in English&lt;br&gt;
-Dua Authenticity&lt;br&gt;
-Everyday Duas&lt;br&gt;
-Dua for Parents&lt;br&gt;
-Istikhara&lt;/p&gt;

&lt;p&gt;Quran&lt;br&gt;
-Surah Al-Fatiha&lt;br&gt;
-Surah Al-Ikhlas&lt;br&gt;
-Surah Al-Mulk&lt;br&gt;
-Surah Al-Kahf&lt;br&gt;
-Ayyub (AS) and the Cold-Water Story&lt;/p&gt;

&lt;p&gt;Tasbeeh &amp;amp; Dhikr&lt;br&gt;
-Tasbeeh Guide&lt;br&gt;
-Tasbeeh-e-Fatima&lt;br&gt;
-Digital Tasbeeh Counter&lt;br&gt;
-Daily Dhikr Habit&lt;br&gt;
-Durood Tunajjina&lt;br&gt;
-Durood on Friday&lt;/p&gt;

&lt;p&gt;Long-Form Resources&lt;br&gt;
-The Sabr Handbook&lt;br&gt;
-New Muslim Starter Guide&lt;/p&gt;

&lt;p&gt;Technical References&lt;br&gt;
-Google Search Central&lt;br&gt;
-Google Search Console&lt;br&gt;
-PageSpeed Insights&lt;br&gt;
-Schema.org&lt;br&gt;
-MDN Web Docs&lt;br&gt;
-web.dev&lt;/p&gt;

&lt;p&gt;Final Takeaway&lt;/p&gt;

&lt;p&gt;The interesting part of DeenGuide isn't simply that it answers Islamic questions.&lt;br&gt;
The interesting part is the architecture behind it:&lt;/p&gt;

&lt;p&gt;REAL-LIFE SITUATION&lt;br&gt;
        ↓&lt;br&gt;
    DEENGUIDE&lt;br&gt;
        ↓&lt;br&gt;
  SOURCE-BASED ANSWER&lt;br&gt;
        ↓&lt;br&gt;
 RELATED SITUATION&lt;br&gt;
        ↓&lt;br&gt;
  DEEP SabrTime GUIDE&lt;br&gt;
        ↓&lt;br&gt;
   PRACTICAL TOOL&lt;br&gt;
        ↓&lt;br&gt;
    REFLECTION&lt;br&gt;
        ↓&lt;br&gt;
      SHARE&lt;/p&gt;

&lt;p&gt;That turns SabrTime from a collection of pages into a connected Islamic information and utility system.&lt;br&gt;
And that's the direction I'm continuing to build toward.&lt;br&gt;
SabrTime: sabrtime.in&lt;br&gt;
DeenGuide: sabrtime.in/tools/deenguide.html&lt;/p&gt;

&lt;h1&gt;
  
  
  webdev #seo #technicalseo #javascript #html #pwa #webperformance #informationarchitecture #islamictech #buildinpublic #productdevelopment
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>deenguide</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How We Built an SEO System for a Small Website Using AI, Content Clusters &amp; Technical SEO</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Tue, 01 Sep 2026 10:06:49 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/how-we-built-an-seo-system-for-a-small-website-using-ai-content-clusters-technical-seo-596e</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/how-we-built-an-seo-system-for-a-small-website-using-ai-content-clusters-technical-seo-596e</guid>
      <description>&lt;p&gt;&lt;strong&gt;When&lt;/strong&gt; you launch a new website, SEO can feel like shouting into an empty room.&lt;/p&gt;

&lt;p&gt;You publish an article.&lt;/p&gt;

&lt;p&gt;Nothing happens.&lt;/p&gt;

&lt;p&gt;You publish another.&lt;/p&gt;

&lt;p&gt;Still nothing.&lt;/p&gt;

&lt;p&gt;That was one of the challenges we faced while building SabrTime, a free Islamic digital companion focused on prayer, reflection, consistency, and useful Islamic tools.&lt;/p&gt;

&lt;p&gt;Instead of treating SEO as simply "write more blog posts,"&lt;br&gt;
We started building a repeatable system around technical SEO, search intent, content clusters, internal linking, and AI-assisted content production.&lt;/p&gt;

&lt;p&gt;This is the workflow we are using and the lessons that can be adapted to almost any small website.&lt;/p&gt;

&lt;p&gt;Start With the Website, Not the Blog&lt;/p&gt;

&lt;p&gt;One of the biggest mistakes a new website can make is creating dozens of blog posts before understanding what the website actually offers.&lt;/p&gt;

&lt;p&gt;We first looked at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website structure&lt;/li&gt;
&lt;li&gt;Existing pages&lt;/li&gt;
&lt;li&gt;Search intent&lt;/li&gt;
&lt;li&gt;Important features&lt;/li&gt;
&lt;li&gt;Existing content&lt;/li&gt;
&lt;li&gt;Sitemap&lt;/li&gt;
&lt;li&gt;Metadata&lt;/li&gt;
&lt;li&gt;Internal links&lt;/li&gt;
&lt;li&gt;Indexability&lt;/li&gt;
&lt;li&gt;Structured data&lt;/li&gt;
&lt;li&gt;Open Graph information&lt;/li&gt;
&lt;li&gt;Canonical URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SabrTime isn't only a blog.&lt;/p&gt;

&lt;p&gt;It is a web-based Islamic companion with tools and resources around prayer, Qibla, Tasbeeh, spiritual habits, and Islamic learning.&lt;/p&gt;

&lt;p&gt;That meant the SEO strategy could connect informational content with actual useful tools.&lt;/p&gt;

&lt;p&gt;The main website acts as the hub:&lt;/p&gt;

&lt;p&gt;SabrTime → Tools → Resources → Blog → Educational content&lt;/p&gt;

&lt;p&gt;This structure gave us many opportunities to build topical relevance.&lt;/p&gt;

&lt;p&gt;You can explore the project here: "SabrTime" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Focus on Search Intent Instead of Just Keywords&lt;/p&gt;

&lt;p&gt;Instead of targeting only highly competitive terms such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Islamic app&lt;/li&gt;
&lt;li&gt;Prayer app&lt;/li&gt;
&lt;li&gt;Quran app&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;we started looking at specific problems users might actually search for.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to find Qibla direction&lt;/li&gt;
&lt;li&gt;Does airplane mode affect a Qibla compass?&lt;/li&gt;
&lt;li&gt;How to pray missed prayers&lt;/li&gt;
&lt;li&gt;What does Adhan mean?&lt;/li&gt;
&lt;li&gt;How to do Tasbeeh&lt;/li&gt;
&lt;li&gt;What is the Qibla direction for a city?&lt;/li&gt;
&lt;li&gt;How to build a daily Dhikr habit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These queries have much clearer intent.&lt;/p&gt;

&lt;p&gt;For example, we created location-specific and educational Qibla resources rather than writing one generic article and stopping there.&lt;/p&gt;

&lt;p&gt;The important part isn't simply putting a keyword into an article.&lt;/p&gt;

&lt;p&gt;The article needs to actually solve the user's problem.&lt;/p&gt;

&lt;p&gt;Build Content Clusters Instead of Random Articles&lt;/p&gt;

&lt;p&gt;Instead of publishing unrelated articles, we started grouping content into topics.&lt;/p&gt;

&lt;p&gt;For example, a Qibla content cluster can include:&lt;/p&gt;

&lt;p&gt;Qibla&lt;/p&gt;

&lt;p&gt;→ How to Find Qibla Direction&lt;br&gt;
→ Qibla Direction in Degrees&lt;br&gt;
→ Qibla Direction by City&lt;br&gt;
→ Airplane Mode &amp;amp; Digital Qibla Compass&lt;br&gt;
→ History of the First Qibla&lt;/p&gt;

&lt;p&gt;For example, our "Qibla Direction in Dallas" (&lt;a href="https://sabrtime.in/blog/qibla-direction-dallas-tx.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/qibla-direction-dallas-tx.html&lt;/a&gt;) article focuses specifically on the Qibla direction for Dallas.&lt;/p&gt;

&lt;p&gt;We also created content around "airplane mode and Qibla compasses" (&lt;a href="https://sabrtime.in/blog/airplane-mode-qibla-compass.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/airplane-mode-qibla-compass.html&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;These aren't random articles.&lt;/p&gt;

&lt;p&gt;They're different pieces of content supporting the same broader topic.&lt;/p&gt;

&lt;p&gt;This approach can be used for almost any niche.&lt;/p&gt;

&lt;p&gt;A fitness website could create:&lt;/p&gt;

&lt;p&gt;Fitness&lt;/p&gt;

&lt;p&gt;→ Home workouts&lt;br&gt;
→ Beginner workouts&lt;br&gt;
→ Push-up guide&lt;br&gt;
→ Squat guide&lt;br&gt;
→ Workout recovery&lt;/p&gt;

&lt;p&gt;A SaaS website could create:&lt;/p&gt;

&lt;p&gt;Email Marketing&lt;/p&gt;

&lt;p&gt;→ Email marketing guide&lt;br&gt;
→ Email subject lines&lt;br&gt;
→ Open rates&lt;br&gt;
→ Email automation&lt;br&gt;
→ Newsletter strategy&lt;/p&gt;

&lt;p&gt;The principle is the same:&lt;/p&gt;

&lt;p&gt;«Build topical depth instead of publishing random keywords.»&lt;/p&gt;

&lt;p&gt;AI Helped Us Scale the Content Workflow&lt;/p&gt;

&lt;p&gt;Claude became particularly useful in our content-development workflow.&lt;/p&gt;

&lt;p&gt;But we didn't simply tell AI:&lt;/p&gt;

&lt;p&gt;«"Write me an SEO article."»&lt;/p&gt;

&lt;p&gt;Instead, we used a structured process.&lt;/p&gt;

&lt;p&gt;Topic&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Search intent&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Research&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Article structure&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Related questions&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Useful information&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Internal links&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;CTA&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;SEO metadata&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Human review&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Publish&lt;/p&gt;

&lt;p&gt;Claude helped with research organization, outlining, drafting, semantic topic coverage, internal-link suggestions, and optimization.&lt;/p&gt;

&lt;p&gt;But the final content still needed human review.&lt;/p&gt;

&lt;p&gt;This distinction is important.&lt;/p&gt;

&lt;p&gt;AI can accelerate content production.&lt;/p&gt;

&lt;p&gt;It shouldn't replace editorial judgment.&lt;/p&gt;

&lt;p&gt;Internal Linking Became Part of the Writing Process&lt;/p&gt;

&lt;p&gt;Internal linking became one of the most useful parts of the workflow.&lt;/p&gt;

&lt;p&gt;Instead of publishing an article and forgetting about it, we looked for natural connections between pages.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A Qibla article can link to another Qibla guide.&lt;/p&gt;

&lt;p&gt;A Tasbeeh article can link to a digital Tasbeeh resource.&lt;/p&gt;

&lt;p&gt;A prayer article can link to prayer-related resources.&lt;/p&gt;

&lt;p&gt;A Qaza article can link to other relevant prayer content.&lt;/p&gt;

&lt;p&gt;For example, we have a practical "Missed Prayers / Qaza guide" (&lt;a href="https://sabrtime.in/blog/missed-prayers-qaza-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/missed-prayers-qaza-guide.html&lt;/a&gt;) that can naturally connect with other prayer-related content.&lt;/p&gt;

&lt;p&gt;Our "Tasbeeh guide" (&lt;a href="https://sabrtime.in/blog/tasbeeh-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/tasbeeh-guide.html&lt;/a&gt;) can similarly become part of a broader Tasbeeh and Dhikr content cluster.&lt;/p&gt;

&lt;p&gt;This creates a path for both users and search engines:&lt;/p&gt;

&lt;p&gt;Article → Related article → Tool/resource → Website&lt;/p&gt;

&lt;p&gt;The goal isn't to add links everywhere.&lt;/p&gt;

&lt;p&gt;The goal is to add links where they genuinely help the reader.&lt;/p&gt;

&lt;p&gt;Connect Informational Content With the Actual Product&lt;/p&gt;

&lt;p&gt;This is where content strategy can become much more powerful for SaaS and tool websites.&lt;/p&gt;

&lt;p&gt;Don't create content that has nothing to do with your product.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;User problem → Helpful content → Relevant tool&lt;/p&gt;

&lt;p&gt;Someone might search for information about maintaining a daily spiritual habit.&lt;/p&gt;

&lt;p&gt;They discover an educational article.&lt;/p&gt;

&lt;p&gt;After learning about the topic, a relevant SabrTime feature can become a natural next step.&lt;/p&gt;

&lt;p&gt;The same model works outside the Islamic niche.&lt;/p&gt;

&lt;p&gt;SaaS&lt;/p&gt;

&lt;p&gt;"How to manage invoices"&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Invoice management guide&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Invoice software&lt;/p&gt;

&lt;p&gt;Developer Tool&lt;/p&gt;

&lt;p&gt;"How to convert JSON"&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;JSON tutorial&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;JSON converter&lt;/p&gt;

&lt;p&gt;Fitness&lt;/p&gt;

&lt;p&gt;"How to track workouts"&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Workout tracking guide&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Workout tracker&lt;/p&gt;

&lt;p&gt;The content becomes an entry point to the product.&lt;/p&gt;

&lt;p&gt;Optimize Pages Outside the Blog&lt;/p&gt;

&lt;p&gt;Another lesson was that SEO shouldn't be limited to "/blog/".&lt;/p&gt;

&lt;p&gt;Important search landing pages can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Homepage&lt;/li&gt;
&lt;li&gt;Feature pages&lt;/li&gt;
&lt;li&gt;Tools&lt;/li&gt;
&lt;li&gt;Resource pages&lt;/li&gt;
&lt;li&gt;Ebook pages&lt;/li&gt;
&lt;li&gt;Guides&lt;/li&gt;
&lt;li&gt;Calculators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SabrTime also has educational ebook resources.&lt;/p&gt;

&lt;p&gt;For example, the "New Muslim Starter Guide" (&lt;a href="https://sabrtime.in/e-books/new-muslim-starter-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/e-books/new-muslim-starter-guide.html&lt;/a&gt;) is not a traditional blog post, but it can still serve a useful search and user-intent purpose.&lt;/p&gt;

&lt;p&gt;The same principle applies to almost any website.&lt;/p&gt;

&lt;p&gt;A calculator can rank.&lt;/p&gt;

&lt;p&gt;A tool can rank.&lt;/p&gt;

&lt;p&gt;A documentation page can rank.&lt;/p&gt;

&lt;p&gt;An ebook can rank.&lt;/p&gt;

&lt;p&gt;A resource page can rank.&lt;/p&gt;

&lt;p&gt;You don't have to put everything inside "/blog/".&lt;/p&gt;

&lt;p&gt;Technical SEO Runs Alongside Content SEO&lt;/p&gt;

&lt;p&gt;While creating content, we also worked on the technical foundation.&lt;/p&gt;

&lt;p&gt;Our checklist included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XML sitemap&lt;/li&gt;
&lt;li&gt;Robots.txt&lt;/li&gt;
&lt;li&gt;Canonical URLs&lt;/li&gt;
&lt;li&gt;Meta titles&lt;/li&gt;
&lt;li&gt;Meta descriptions&lt;/li&gt;
&lt;li&gt;Open Graph tags&lt;/li&gt;
&lt;li&gt;Structured data&lt;/li&gt;
&lt;li&gt;Mobile usability&lt;/li&gt;
&lt;li&gt;Clean URLs&lt;/li&gt;
&lt;li&gt;Internal linking&lt;/li&gt;
&lt;li&gt;Indexability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is simple:&lt;/p&gt;

&lt;p&gt;Google needs to discover, crawl, and understand your pages.&lt;/p&gt;

&lt;p&gt;A great article isn't enough if search engines can't properly discover or understand it.&lt;/p&gt;

&lt;p&gt;Create Location-Specific Content Carefully&lt;/p&gt;

&lt;p&gt;Another experiment was creating highly specific pages around search intent.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Qibla Direction in Dallas&lt;/p&gt;

&lt;p&gt;Qibla Direction in Houston&lt;/p&gt;

&lt;p&gt;Qibla Direction for other cities&lt;/p&gt;

&lt;p&gt;This can work when each page provides genuinely useful location-specific information.&lt;/p&gt;

&lt;p&gt;For example, the "Dallas Qibla Direction guide" (&lt;a href="https://sabrtime.in/blog/qibla-direction-dallas-tx.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/qibla-direction-dallas-tx.html&lt;/a&gt;) is designed around the search intent of someone specifically looking for Qibla direction in Dallas.&lt;/p&gt;

&lt;p&gt;The important lesson is:&lt;/p&gt;

&lt;p&gt;«Don't create hundreds of city pages simply by replacing the city name.»&lt;/p&gt;

&lt;p&gt;Each location page should provide unique and useful information.&lt;/p&gt;

&lt;p&gt;Otherwise, you're just creating programmatic SEO spam.&lt;/p&gt;

&lt;p&gt;Use Search Data as a Feedback Loop&lt;/p&gt;

&lt;p&gt;Publishing is only the beginning.&lt;/p&gt;

&lt;p&gt;After pages are indexed, Google Search Console can reveal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search queries&lt;/li&gt;
&lt;li&gt;Impressions&lt;/li&gt;
&lt;li&gt;Clicks&lt;/li&gt;
&lt;li&gt;Average position&lt;/li&gt;
&lt;li&gt;Pages receiving impressions&lt;/li&gt;
&lt;li&gt;Unexpected queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suppose an article starts receiving impressions for:&lt;/p&gt;

&lt;p&gt;«"qibla without internet"»&lt;/p&gt;

&lt;p&gt;That could tell us something.&lt;/p&gt;

&lt;p&gt;Maybe the existing article should be expanded.&lt;/p&gt;

&lt;p&gt;Maybe a dedicated article would be useful.&lt;/p&gt;

&lt;p&gt;Maybe the search intent is different from what we originally expected.&lt;/p&gt;

&lt;p&gt;This creates a feedback loop:&lt;/p&gt;

&lt;p&gt;Publish → Measure → Learn → Improve → Publish again&lt;/p&gt;

&lt;p&gt;That's much better than publishing once and never touching the article again.&lt;/p&gt;

&lt;p&gt;Turn Existing Content Into New Opportunities&lt;/p&gt;

&lt;p&gt;One of the biggest benefits of content clusters is discovering new topics from existing articles.&lt;/p&gt;

&lt;p&gt;A general Qibla guide might reveal related questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can I use a compass without internet?&lt;/li&gt;
&lt;li&gt;Does GPS work in airplane mode?&lt;/li&gt;
&lt;li&gt;Why is my Qibla compass inaccurate?&lt;/li&gt;
&lt;li&gt;What is Qibla bearing?&lt;/li&gt;
&lt;li&gt;Is Qibla always west?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of stuffing every question into one enormous article, we can decide whether each deserves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A section&lt;/li&gt;
&lt;li&gt;An FAQ&lt;/li&gt;
&lt;li&gt;A separate article&lt;/li&gt;
&lt;li&gt;Or simply an internal link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps the website organized while allowing the content library to grow naturally.&lt;/p&gt;

&lt;p&gt;External Publishing Can Support SEO and Awareness&lt;/p&gt;

&lt;p&gt;We also started publishing useful educational and technical content on external platforms.&lt;/p&gt;

&lt;p&gt;Platforms such as DEV Community can be useful when the article genuinely provides value to developers, builders, marketers, or website owners.&lt;/p&gt;

&lt;p&gt;But the goal shouldn't be:&lt;/p&gt;

&lt;p&gt;«"I need a backlink."»&lt;/p&gt;

&lt;p&gt;The better approach is:&lt;/p&gt;

&lt;p&gt;«"I have a useful case study that other website owners can learn from."»&lt;/p&gt;

&lt;p&gt;This article itself is an example.&lt;/p&gt;

&lt;p&gt;SabrTime is the real-world case study, while the actual subject is the SEO process.&lt;/p&gt;

&lt;p&gt;That makes the references contextual rather than purely promotional.&lt;/p&gt;

&lt;p&gt;Useful external content can potentially generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Referral traffic&lt;/li&gt;
&lt;li&gt;Brand awareness&lt;/li&gt;
&lt;li&gt;Relevant backlinks&lt;/li&gt;
&lt;li&gt;Community engagement&lt;/li&gt;
&lt;li&gt;New relationships&lt;/li&gt;
&lt;li&gt;Search visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But repeatedly publishing thin promotional articles with the same anchor text is not a sustainable link-building strategy.&lt;/p&gt;

&lt;p&gt;AI Content Still Needs Human Review&lt;/p&gt;

&lt;p&gt;AI makes publishing faster.&lt;/p&gt;

&lt;p&gt;But speed isn't the same as SEO quality.&lt;/p&gt;

&lt;p&gt;A website could generate hundreds of articles with AI.&lt;/p&gt;

&lt;p&gt;That doesn't automatically create authority.&lt;/p&gt;

&lt;p&gt;Our approach is closer to:&lt;/p&gt;

&lt;p&gt;AI-assisted research + human strategy + useful content + internal linking + technical SEO + continuous improvement&lt;/p&gt;

&lt;p&gt;The human still needs to decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this topic worth covering?&lt;/li&gt;
&lt;li&gt;Does the article satisfy search intent?&lt;/li&gt;
&lt;li&gt;Is the information accurate?&lt;/li&gt;
&lt;li&gt;Is the article actually useful?&lt;/li&gt;
&lt;li&gt;Are the internal links relevant?&lt;/li&gt;
&lt;li&gt;Is the CTA appropriate?&lt;/li&gt;
&lt;li&gt;Is anything repetitive or generic?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI is the accelerator.&lt;/p&gt;

&lt;p&gt;The website owner still needs to be the driver.&lt;/p&gt;

&lt;p&gt;What Other Website Owners Can Copy&lt;/p&gt;

&lt;p&gt;You don't need an Islamic website to use this system.&lt;/p&gt;

&lt;p&gt;SaaS&lt;/p&gt;

&lt;p&gt;Problem → Guide → Tool → Product&lt;/p&gt;

&lt;p&gt;E-commerce&lt;/p&gt;

&lt;p&gt;Question → Buying guide → Category → Product&lt;/p&gt;

&lt;p&gt;Developer Tools&lt;/p&gt;

&lt;p&gt;Problem → Tutorial → Documentation → Tool&lt;/p&gt;

&lt;p&gt;Education&lt;/p&gt;

&lt;p&gt;Question → Explanation → Resource → Course&lt;/p&gt;

&lt;p&gt;Local Business&lt;/p&gt;

&lt;p&gt;Question → Local guide → Service → Contact/Booking&lt;/p&gt;

&lt;p&gt;The niche changes.&lt;/p&gt;

&lt;p&gt;The framework stays almost the same.&lt;/p&gt;

&lt;p&gt;The SEO System We Are Building&lt;/p&gt;

&lt;p&gt;After putting everything together, our basic system looks like this:&lt;/p&gt;

&lt;p&gt;Research&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Find specific search intent&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Create genuinely useful content&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Build topic clusters&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Connect pages with internal links&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Optimize technical SEO&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Publish useful external content&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Earn relevant backlinks and referral traffic&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Monitor Search Console&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Improve existing pages&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Repeat&lt;/p&gt;

&lt;p&gt;Final Takeaway&lt;/p&gt;

&lt;p&gt;Our biggest SEO lesson from building SabrTime wasn't a particular keyword or backlink.&lt;/p&gt;

&lt;p&gt;It was learning to think of the website as an ecosystem.&lt;/p&gt;

&lt;p&gt;A blog post shouldn't exist alone.&lt;/p&gt;

&lt;p&gt;A useful article can lead to another article.&lt;/p&gt;

&lt;p&gt;That article can lead to a tool.&lt;/p&gt;

&lt;p&gt;The tool can lead to the main website.&lt;/p&gt;

&lt;p&gt;External educational content can introduce new people to the ecosystem.&lt;/p&gt;

&lt;p&gt;And search data can tell us what to build next.&lt;/p&gt;

&lt;p&gt;The basic principle is:&lt;/p&gt;

&lt;p&gt;«Don't build a pile of articles. Build a connected knowledge system.»&lt;/p&gt;

&lt;p&gt;AI can help you build that system faster, but strategy, accuracy, usefulness, and originality still matter.&lt;/p&gt;

&lt;p&gt;That's the approach we're continuing to use while growing "SabrTime" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;) from a small website into a broader collection of free Islamic digital tools and educational resources.&lt;/p&gt;

&lt;p&gt;Explore the project: "sabrtime.in" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Explore the content: "SabrTime Blog" (&lt;a href="https://sabrtime.in/blog/" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>webdev</category>
      <category>resources</category>
    </item>
    <item>
      <title>How I Diagnosed and Fixed Keyword Cannibalization Between Two Nearly-Identical Blog Posts</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Wed, 26 Aug 2026 15:48:01 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/how-i-diagnosed-and-fixed-keyword-cannibalization-between-two-nearly-identical-blog-posts-145m</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/how-i-diagnosed-and-fixed-keyword-cannibalization-between-two-nearly-identical-blog-posts-145m</guid>
      <description>&lt;p&gt;I thought publishing more useful content would automatically give my website more opportunities to rank.&lt;/p&gt;

&lt;p&gt;Then I noticed something uncomfortable.&lt;/p&gt;

&lt;p&gt;Two articles on my site were covering almost the same subject.&lt;/p&gt;

&lt;p&gt;Both were useful.&lt;br&gt;
Both were properly indexed.&lt;br&gt;
Both answered similar questions.&lt;br&gt;
And both were competing for overlapping search intent.&lt;/p&gt;

&lt;p&gt;I had accidentally created a small SEO architecture problem inside my own blog.&lt;/p&gt;

&lt;p&gt;I'm building "SabrTime.in" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;), a small Islamic companion app focused on practical digital tools for everyday worship. As a solo developer, I also manage the website, content, SEO, and product development myself.&lt;/p&gt;

&lt;p&gt;While working on the site's content, I published two articles around Tasbeeh:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to Do Tasbeeh — A Complete Guide&lt;/li&gt;
&lt;li&gt;Digital Tasbeeh Counter: How It Works &amp;amp; Why Muslims Are Switching&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first article is about the practice itself.&lt;/p&gt;

&lt;p&gt;The second is supposed to be about the technology and use case of digital Tasbeeh counters.&lt;/p&gt;

&lt;p&gt;Sounds different enough, right?&lt;/p&gt;

&lt;p&gt;At first, I thought so too.&lt;/p&gt;

&lt;p&gt;But when I looked at the actual content and search intent, the overlap became obvious.&lt;/p&gt;

&lt;p&gt;The Problem Wasn't Duplicate Content&lt;/p&gt;

&lt;p&gt;This is where SEO gets misunderstood.&lt;/p&gt;

&lt;p&gt;Keyword cannibalization doesn't necessarily mean you have two pages containing identical paragraphs.&lt;/p&gt;

&lt;p&gt;The more interesting problem is intent overlap.&lt;/p&gt;

&lt;p&gt;If two URLs are trying to satisfy essentially the same searcher's question, a search engine has less information about which page should be the primary result.&lt;/p&gt;

&lt;p&gt;For example, imagine these two pages:&lt;/p&gt;

&lt;p&gt;/page-a&lt;br&gt;
"How to Do Tasbeeh"&lt;/p&gt;

&lt;p&gt;/page-b&lt;br&gt;
"Digital Tasbeeh Counter"&lt;/p&gt;

&lt;p&gt;Their titles are different.&lt;/p&gt;

&lt;p&gt;But if both pages explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what Tasbeeh means&lt;/li&gt;
&lt;li&gt;how many times to recite it&lt;/li&gt;
&lt;li&gt;common Tasbeeh counts&lt;/li&gt;
&lt;li&gt;the same hadith&lt;/li&gt;
&lt;li&gt;how to count Tasbeeh&lt;/li&gt;
&lt;li&gt;why Muslims use a counter&lt;/li&gt;
&lt;li&gt;FAQs about Tasbeeh&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;...then the distinction between the pages starts becoming blurry.&lt;/p&gt;

&lt;p&gt;That was happening on my site.&lt;/p&gt;

&lt;p&gt;The two articles were not technically duplicates.&lt;/p&gt;

&lt;p&gt;But parts of their search intent were duplicates.&lt;/p&gt;

&lt;p&gt;And that distinction matters.&lt;/p&gt;

&lt;p&gt;How I Found It&lt;/p&gt;

&lt;p&gt;I didn't start by running an expensive SEO crawler.&lt;/p&gt;

&lt;p&gt;I started with the simplest question:&lt;/p&gt;

&lt;p&gt;«"Why do I have two pages that could answer the same searcher's question?"»&lt;/p&gt;

&lt;p&gt;I compared the pages manually.&lt;/p&gt;

&lt;p&gt;Then I looked at the queries and pages appearing in Google Search Console.&lt;/p&gt;

&lt;p&gt;The useful report here is:&lt;/p&gt;

&lt;p&gt;Search Console → Performance → Search results → Queries → Pages&lt;/p&gt;

&lt;p&gt;If you investigate a particular query and discover multiple URLs receiving impressions for it, that's worth investigating.&lt;/p&gt;

&lt;p&gt;It doesn't automatically prove cannibalization.&lt;/p&gt;

&lt;p&gt;Google can legitimately rank multiple pages from the same site for one query.&lt;/p&gt;

&lt;p&gt;But when those pages also have highly overlapping content and intent, you've got a stronger signal that your information architecture needs work.&lt;/p&gt;

&lt;p&gt;The Two Pages Had Different Jobs — But I Hadn't Made That Clear Enough&lt;/p&gt;

&lt;p&gt;This was the key realization.&lt;/p&gt;

&lt;p&gt;The solution wasn't simply:&lt;/p&gt;

&lt;p&gt;«"Delete one article."»&lt;/p&gt;

&lt;p&gt;The solution was:&lt;/p&gt;

&lt;p&gt;«Give each article a clearly different job.»&lt;/p&gt;

&lt;p&gt;I defined the two pages like this.&lt;/p&gt;

&lt;p&gt;Page 1 — The Practice&lt;/p&gt;

&lt;p&gt;Primary intent:&lt;/p&gt;

&lt;p&gt;«How do I perform Tasbeeh correctly?»&lt;/p&gt;

&lt;p&gt;This page should answer questions about the Islamic practice itself.&lt;/p&gt;

&lt;p&gt;It can cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Meaning of Tasbeeh&lt;/li&gt;
&lt;li&gt;Correct method&lt;/li&gt;
&lt;li&gt;Common counts&lt;/li&gt;
&lt;li&gt;Tasbeeh after Salah&lt;/li&gt;
&lt;li&gt;Tasbeeh Fatima&lt;/li&gt;
&lt;li&gt;Common mistakes&lt;/li&gt;
&lt;li&gt;Relevant Islamic references&lt;/li&gt;
&lt;li&gt;Building a consistent dhikr habit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the educational/pillar page.&lt;/p&gt;

&lt;p&gt;Page 2 — The Tool&lt;/p&gt;

&lt;p&gt;Primary intent:&lt;/p&gt;

&lt;p&gt;«How does a digital Tasbeeh counter work, and should I use one?»&lt;/p&gt;

&lt;p&gt;Now the content becomes more product and technology oriented.&lt;/p&gt;

&lt;p&gt;It can cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What a digital Tasbeeh counter is&lt;/li&gt;
&lt;li&gt;Physical vs digital counters&lt;/li&gt;
&lt;li&gt;How a phone counter works&lt;/li&gt;
&lt;li&gt;Advantages and limitations&lt;/li&gt;
&lt;li&gt;Offline functionality&lt;/li&gt;
&lt;li&gt;Privacy considerations&lt;/li&gt;
&lt;li&gt;Tracking repetitions&lt;/li&gt;
&lt;li&gt;When a digital counter is useful&lt;/li&gt;
&lt;li&gt;How SabrTime implements the feature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The article still needs enough Islamic context to be useful.&lt;/p&gt;

&lt;p&gt;But it shouldn't become another complete guide to Tasbeeh.&lt;/p&gt;

&lt;p&gt;That's the important distinction.&lt;/p&gt;

&lt;p&gt;I Removed Unnecessary Overlap&lt;/p&gt;

&lt;p&gt;This was probably the most useful part of the exercise.&lt;/p&gt;

&lt;p&gt;I went through the overlapping sections and asked:&lt;/p&gt;

&lt;p&gt;«"Does this information belong here because it helps this page's primary intent, or am I including it because it's another keyword opportunity?"»&lt;/p&gt;

&lt;p&gt;Those are very different reasons.&lt;/p&gt;

&lt;p&gt;If a section existed only because I thought:&lt;/p&gt;

&lt;p&gt;«"This keyword might help the page rank."»&lt;/p&gt;

&lt;p&gt;I questioned it.&lt;/p&gt;

&lt;p&gt;For example, the digital counter article doesn't need a massive standalone explanation of every aspect of performing Tasbeeh.&lt;/p&gt;

&lt;p&gt;That's already the job of the Tasbeeh guide.&lt;/p&gt;

&lt;p&gt;Instead, I can briefly explain the relevant concept and link to the detailed guide.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;/p&gt;

&lt;p&gt;Tasbeeh Guide&lt;br&gt;
      │&lt;br&gt;
      │ explains the practice&lt;br&gt;
      ▼&lt;br&gt;
Digital Tasbeeh Counter&lt;br&gt;
      │&lt;br&gt;
      │ explains the technology&lt;br&gt;
      ▼&lt;br&gt;
SabrTime Counter&lt;/p&gt;

&lt;p&gt;Now the pages support each other instead of competing with each other.&lt;/p&gt;

&lt;p&gt;Internal Linking Became More Important&lt;/p&gt;

&lt;p&gt;Once I had separated the intent, internal links became much more meaningful.&lt;/p&gt;

&lt;p&gt;Instead of randomly linking between articles, I could establish a relationship.&lt;/p&gt;

&lt;p&gt;Tasbeeh guide → Digital counter&lt;/p&gt;

&lt;p&gt;«If you prefer counting dhikr digitally, here's how digital Tasbeeh counters work.»&lt;/p&gt;

&lt;p&gt;And:&lt;/p&gt;

&lt;p&gt;Digital counter → Tasbeeh guide&lt;/p&gt;

&lt;p&gt;«Before using a digital counter, learn the traditional method and recommended Tasbeeh practices.»&lt;/p&gt;

&lt;p&gt;Now the relationship is obvious.&lt;/p&gt;

&lt;p&gt;One page explains the practice.&lt;/p&gt;

&lt;p&gt;The other explains the tool.&lt;/p&gt;

&lt;p&gt;That's much cleaner than having two pages both trying to be the complete answer.&lt;/p&gt;

&lt;p&gt;I Didn't Immediately Canonicalize One Page&lt;/p&gt;

&lt;p&gt;Canonicalization was one of the first technical solutions I considered.&lt;/p&gt;

&lt;p&gt;But I didn't want to use a canonical tag as a shortcut for a content architecture problem.&lt;/p&gt;

&lt;p&gt;If two pages have genuinely different purposes, blindly canonicalizing one to the other can throw away useful search opportunities.&lt;/p&gt;

&lt;p&gt;So my approach was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify overlapping intent.&lt;/li&gt;
&lt;li&gt;Decide which page owns the broader topic.&lt;/li&gt;
&lt;li&gt;Give the second page a narrower purpose.&lt;/li&gt;
&lt;li&gt;Remove unnecessary overlap.&lt;/li&gt;
&lt;li&gt;Improve internal linking.&lt;/li&gt;
&lt;li&gt;Monitor Search Console.&lt;/li&gt;
&lt;li&gt;Only consider stronger consolidation if the pages still don't have a meaningful distinction.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;Fix the information architecture before reaching for a technical directive.&lt;/p&gt;

&lt;p&gt;The Interesting Part: This Is Basically Refactoring&lt;/p&gt;

&lt;p&gt;As a developer, this way of thinking made the problem much easier.&lt;/p&gt;

&lt;p&gt;Imagine I had two functions:&lt;/p&gt;

&lt;p&gt;function tasbeehGuide() {&lt;br&gt;
    // explains Tasbeeh&lt;br&gt;
    // explains counts&lt;br&gt;
    // explains methods&lt;br&gt;
    // explains how to count&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;function digitalTasbeehCounter() {&lt;br&gt;
    // explains Tasbeeh&lt;br&gt;
    // explains counts&lt;br&gt;
    // explains methods&lt;br&gt;
    // explains how to count&lt;br&gt;
    // explains digital counting&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;That's a code smell.&lt;/p&gt;

&lt;p&gt;The functions have overlapping responsibilities.&lt;/p&gt;

&lt;p&gt;You'd probably refactor them.&lt;/p&gt;

&lt;p&gt;SEO content can have the same problem.&lt;/p&gt;

&lt;p&gt;Instead of thinking:&lt;/p&gt;

&lt;p&gt;«"I need another article targeting another keyword."»&lt;/p&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;p&gt;«"What responsibility does this URL own?"»&lt;/p&gt;

&lt;p&gt;That mental model changed how I approached my blog.&lt;/p&gt;

&lt;p&gt;My New Rule for Creating Content&lt;/p&gt;

&lt;p&gt;Before publishing another article, I now ask five questions.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What exact question does this page answer?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;p&gt;«"What keyword am I targeting?"»&lt;/p&gt;

&lt;p&gt;But:&lt;/p&gt;

&lt;p&gt;«"What does the searcher actually want?"»&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do I already have a URL answering this?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Search the existing site before creating a new article.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If I already have one, what is genuinely different here?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the answer is just:&lt;/p&gt;

&lt;p&gt;«"The title is different."»&lt;/p&gt;

&lt;p&gt;That's probably not enough.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can I describe the difference in one sentence?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;«"This article explains Tasbeeh."»&lt;/p&gt;

&lt;p&gt;versus:&lt;/p&gt;

&lt;p&gt;«"This article explains digital Tasbeeh counters."»&lt;/p&gt;

&lt;p&gt;If I can't clearly articulate the distinction, the pages probably aren't differentiated enough.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where should the new article fit in my site's information architecture?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A blog shouldn't just be a collection of URLs.&lt;/p&gt;

&lt;p&gt;It should behave more like a knowledge graph.&lt;/p&gt;

&lt;p&gt;Related pages should have relationships.&lt;/p&gt;

&lt;p&gt;What I'm Watching Now&lt;/p&gt;

&lt;p&gt;I don't consider the problem "fixed" simply because I edited the pages.&lt;/p&gt;

&lt;p&gt;SEO changes need to be measured.&lt;/p&gt;

&lt;p&gt;I'm watching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which URL receives impressions for broader Tasbeeh queries&lt;/li&gt;
&lt;li&gt;Whether the digital-counter page gains visibility for tool-related searches&lt;/li&gt;
&lt;li&gt;Whether the Tasbeeh guide retains its educational queries&lt;/li&gt;
&lt;li&gt;CTR changes&lt;/li&gt;
&lt;li&gt;Average position&lt;/li&gt;
&lt;li&gt;New queries appearing for each page&lt;/li&gt;
&lt;li&gt;Whether impressions become less fragmented between the two URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important thing is that I'm not expecting an overnight result.&lt;/p&gt;

&lt;p&gt;The goal isn't:&lt;/p&gt;

&lt;p&gt;«"Make one URL rank #1."»&lt;/p&gt;

&lt;p&gt;The goal is:&lt;/p&gt;

&lt;p&gt;«Make it obvious which URL should rank for which intent.»&lt;/p&gt;

&lt;p&gt;That's a much more sustainable strategy.&lt;/p&gt;

&lt;p&gt;What I Learned as a Solo Developer&lt;/p&gt;

&lt;p&gt;The biggest lesson wasn't actually about SEO.&lt;/p&gt;

&lt;p&gt;It was about content architecture.&lt;/p&gt;

&lt;p&gt;When you're building alone, it's incredibly easy to think about every article independently:&lt;/p&gt;

&lt;p&gt;«"This seems like a useful topic. I'll write it."»&lt;/p&gt;

&lt;p&gt;Then six months later, you have 30 articles that individually look fine but collectively overlap.&lt;/p&gt;

&lt;p&gt;That's exactly like accumulating technical debt.&lt;/p&gt;

&lt;p&gt;A little duplication doesn't look dangerous.&lt;/p&gt;

&lt;p&gt;But eventually:&lt;/p&gt;

&lt;p&gt;Article A ──┐&lt;br&gt;
            ├── overlapping intent&lt;br&gt;
Article B ──┘&lt;/p&gt;

&lt;p&gt;becomes a problem you have to untangle.&lt;/p&gt;

&lt;p&gt;So now I'm treating SEO content more like software architecture.&lt;/p&gt;

&lt;p&gt;Every URL needs a responsibility.&lt;/p&gt;

&lt;p&gt;Every important topic needs a clear primary page.&lt;/p&gt;

&lt;p&gt;Related pages should support each other rather than competing unnecessarily.&lt;/p&gt;

&lt;p&gt;The Bigger Lesson&lt;/p&gt;

&lt;p&gt;If you have a small website and your rankings aren't behaving the way you expect, don't immediately assume you need more backlinks, more articles, or more keywords.&lt;/p&gt;

&lt;p&gt;Sometimes the problem is simpler:&lt;/p&gt;

&lt;p&gt;You may have already written the answer — twice.&lt;/p&gt;

&lt;p&gt;Before publishing your next article, search your own website.&lt;/p&gt;

&lt;p&gt;Look at the existing URLs.&lt;/p&gt;

&lt;p&gt;Compare their titles, headings, FAQs, and search intent.&lt;/p&gt;

&lt;p&gt;Then ask:&lt;/p&gt;

&lt;p&gt;«"If I were Google, which of these two pages would I consider the better answer?"»&lt;/p&gt;

&lt;p&gt;If the answer isn't obvious, that's probably your next SEO task.&lt;/p&gt;

&lt;p&gt;I'm still experimenting with this on "SabrTime.in" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;), but this change has already altered how I plan content.&lt;/p&gt;

&lt;p&gt;I don't want to build a blog with hundreds of pages.&lt;/p&gt;

&lt;p&gt;I want to build a site where every page has a reason to exist.&lt;/p&gt;

&lt;p&gt;And, like good code, good content architecture should make the system easier to understand — not harder.&lt;/p&gt;




&lt;p&gt;The pages behind this experiment&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"SabrTime.in" (&lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;) — the Islamic app I'm building&lt;/li&gt;
&lt;li&gt;"Digital Tasbeeh Counter" (&lt;a href="https://sabrtime.in/blog/digital-tasbeeh-counter.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/digital-tasbeeh-counter.html&lt;/a&gt;) — the technology/tool-focused article&lt;/li&gt;
&lt;li&gt;"Tasbeeh Guides" (&lt;a href="https://sabrtime.in/blog/tasbeeh-guides.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/tasbeeh-guides.html&lt;/a&gt;) — the practice/educational side&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're also building a content-heavy product as a solo developer, I'd be interested to know:&lt;/p&gt;

&lt;p&gt;Have you ever discovered two of your own pages competing for the same search intent?&lt;/p&gt;

&lt;h1&gt;
  
  
  seo #webdev #indiedev #buildinpublic #devto
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I Built an Offline-First Qibla Compass for a PWA Without an Internet Connection</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sun, 09 Aug 2026 12:14:35 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/how-i-built-an-offline-first-qibla-compass-for-a-pwa-without-an-internet-connection-d29</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/how-i-built-an-offline-first-qibla-compass-for-a-pwa-without-an-internet-connection-d29</guid>
      <description>&lt;p&gt;When you're travelling, one of the simplest problems can become surprisingly difficult: finding the Qibla direction without an internet connection.&lt;/p&gt;

&lt;p&gt;I wanted to solve this problem while building SabrTime, an Islamic PWA focused on making everyday worship tools available with minimal dependencies, no mandatory login, and an offline-first experience.&lt;/p&gt;

&lt;p&gt;The result was an offline-capable Qibla compass that can calculate the direction toward the Kaaba using the device's location and orientation sensors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Offline Qibla Matters&lt;/strong&gt;&lt;br&gt;
Most web applications assume that the user has an active internet connection.&lt;/p&gt;

&lt;p&gt;That isn't always true.&lt;/p&gt;

&lt;p&gt;A person may be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Travelling by airplane&lt;/li&gt;
&lt;li&gt;In an area with poor network coverage&lt;/li&gt;
&lt;li&gt;Abroad without mobile data&lt;/li&gt;
&lt;li&gt;Inside a building with unreliable connectivity&lt;/li&gt;
&lt;li&gt;Using airplane mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Qibla tool shouldn't necessarily stop being useful just because the network disappears.&lt;/p&gt;

&lt;p&gt;This led me to an important design principle:&lt;/p&gt;

&lt;p&gt;«Calculate what can be calculated locally, and use the network only when it is actually necessary.»&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Basic Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Qibla calculation itself doesn't require a server.&lt;/p&gt;

&lt;p&gt;The basic flow is:&lt;/p&gt;

&lt;p&gt;Device Location&lt;br&gt;
      ↓&lt;br&gt;
Latitude + Longitude&lt;br&gt;
      ↓&lt;br&gt;
Calculate Bearing to Kaaba&lt;br&gt;
      ↓&lt;br&gt;
Device Orientation Sensor&lt;br&gt;
      ↓&lt;br&gt;
Calculate Relative Direction&lt;br&gt;
      ↓&lt;br&gt;
Display Qibla Compass&lt;/p&gt;

&lt;p&gt;The Kaaba's geographic coordinates are fixed, so the application can calculate the bearing locally once it knows the user's latitude and longitude.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Calculating the Bearing to the Kaaba&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first step is determining the initial bearing between the user's location and the Kaaba.&lt;/p&gt;

&lt;p&gt;For two points on Earth, we can use the following formula:&lt;/p&gt;

&lt;p&gt;const lat1 = userLatitude * Math.PI / 180;&lt;br&gt;
const lat2 = kaabaLatitude * Math.PI / 180;&lt;/p&gt;

&lt;p&gt;const deltaLon =&lt;br&gt;
  (kaabaLongitude - userLongitude) * Math.PI / 180;&lt;/p&gt;

&lt;p&gt;const y = Math.sin(deltaLon) * Math.cos(lat2);&lt;/p&gt;

&lt;p&gt;const x =&lt;br&gt;
  Math.cos(lat1) * Math.sin(lat2) -&lt;br&gt;
  Math.sin(lat1) * Math.cos(lat2) * Math.cos(deltaLon);&lt;/p&gt;

&lt;p&gt;let bearing = Math.atan2(y, x);&lt;/p&gt;

&lt;p&gt;bearing = bearing * 180 / Math.PI;&lt;br&gt;
bearing = (bearing + 360) % 360;&lt;/p&gt;

&lt;p&gt;The resulting value represents the initial compass bearing toward the Kaaba.&lt;/p&gt;

&lt;p&gt;This is useful because the calculation happens entirely on the device.&lt;/p&gt;

&lt;p&gt;There is no need to send the user's coordinates to a remote API simply to calculate a direction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Getting the User's Location&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The browser's Geolocation API can provide the user's current coordinates.&lt;/p&gt;

&lt;p&gt;A simplified implementation looks like this:&lt;/p&gt;

&lt;p&gt;navigator.geolocation.getCurrentPosition(&lt;br&gt;
  (position) =&amp;gt; {&lt;br&gt;
    const latitude = position.coords.latitude;&lt;br&gt;
    const longitude = position.coords.longitude;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;calculateQibla(latitude, longitude);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;},&lt;br&gt;
  (error) =&amp;gt; {&lt;br&gt;
    console.error("Unable to get location:", error);&lt;br&gt;
  }&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;Of course, a production application needs to handle permission denial, unavailable location data, low accuracy, and other edge cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using Device Orientation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Knowing the Qibla bearing isn't enough for a compass interface.&lt;/p&gt;

&lt;p&gt;We also need to know which direction the device is facing.&lt;/p&gt;

&lt;p&gt;Modern browsers can expose device orientation information through sensor APIs, although implementation details and permission requirements can vary between browsers and operating systems.&lt;/p&gt;

&lt;p&gt;The basic concept is:&lt;/p&gt;

&lt;p&gt;Qibla Bearing&lt;br&gt;
      -&lt;br&gt;
Device Heading&lt;br&gt;
      =&lt;br&gt;
Relative Qibla Direction&lt;/p&gt;

&lt;p&gt;For example, if the Qibla bearing is 280° and the device is currently facing 250°:&lt;/p&gt;

&lt;p&gt;280° - 250° = 30°&lt;/p&gt;

&lt;p&gt;The UI can then tell the user that the Qibla is approximately 30° to the right.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Difficult Part: Sensors Are Messy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This sounds straightforward until you actually test it on physical devices.&lt;/p&gt;

&lt;p&gt;A compass isn't perfectly stable.&lt;/p&gt;

&lt;p&gt;The readings can be affected by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Magnetic interference&lt;/li&gt;
&lt;li&gt;Metal objects&lt;/li&gt;
&lt;li&gt;Device hardware&lt;/li&gt;
&lt;li&gt;Sensor noise&lt;/li&gt;
&lt;li&gt;Indoor environments&lt;/li&gt;
&lt;li&gt;Browser differences&lt;/li&gt;
&lt;li&gt;Device calibration&lt;/li&gt;
&lt;li&gt;Rapid device movement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So a good compass interface shouldn't simply trust one sensor reading.&lt;/p&gt;

&lt;p&gt;Instead, the application needs to smooth readings and provide clear visual feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handling Sensor Noise&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One simple approach is to maintain a rolling set of readings and smooth the result.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;const readings = [];&lt;/p&gt;

&lt;p&gt;function smoothHeading(newHeading) {&lt;br&gt;
  readings.push(newHeading);&lt;/p&gt;

&lt;p&gt;if (readings.length &amp;gt; 10) {&lt;br&gt;
    readings.shift();&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;return readings.reduce((sum, value) =&amp;gt; sum + value, 0)&lt;br&gt;
    / readings.length;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This is only a basic example. Circular values such as 359° and 1° require special handling because a normal arithmetic average can produce incorrect results.&lt;/p&gt;

&lt;p&gt;That's an important lesson when working with compass data:&lt;/p&gt;

&lt;p&gt;Angles aren't ordinary numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building It as a PWA&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next challenge was making the experience work even when connectivity disappears.&lt;/p&gt;

&lt;p&gt;A Progressive Web App can cache the application's static resources so that previously loaded functionality remains available offline.&lt;/p&gt;

&lt;p&gt;The architecture becomes:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;          ┌───────────────┐
          │    PWA UI     │
          └───────┬───────┘
                  │
    ┌─────────────┴─────────────┐
    ↓                           ↓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Local calculations           Cached resources&lt;br&gt;
        ↓                           ↓&lt;br&gt;
 Qibla bearing                Offline interface&lt;br&gt;
        ↓&lt;br&gt;
 Device sensors&lt;br&gt;
        ↓&lt;br&gt;
 Qibla direction&lt;/p&gt;

&lt;p&gt;The key idea is that the compass calculation doesn't need a continuous internet connection.&lt;/p&gt;

&lt;p&gt;Privacy Was Another Design Goal&lt;/p&gt;

&lt;p&gt;Location data is sensitive.&lt;/p&gt;

&lt;p&gt;For an Islamic utility like a Qibla compass, I wanted the architecture to minimize unnecessary data transmission.&lt;/p&gt;

&lt;p&gt;If the calculation can happen locally, there is little reason to send the user's exact coordinates to a remote server merely to determine a bearing.&lt;/p&gt;

&lt;p&gt;This is one reason I prefer a privacy-first, client-side approach wherever practical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What About Airplane Mode?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is where the offline-first approach becomes particularly useful.&lt;/p&gt;

&lt;p&gt;With network connectivity disabled, a PWA can still provide functionality that doesn't depend on an external server.&lt;/p&gt;

&lt;p&gt;The important distinction is:&lt;/p&gt;

&lt;p&gt;Offline does not mean “everything works without hardware or permissions.”&lt;/p&gt;

&lt;p&gt;The application may still require:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Previously cached application resources&lt;/li&gt;
&lt;li&gt;Location permission&lt;/li&gt;
&lt;li&gt;Device location capability&lt;/li&gt;
&lt;li&gt;Orientation sensors&lt;/li&gt;
&lt;li&gt;Browser support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to remove the unnecessary dependency on the internet, not to magically bypass device requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing on Real Devices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest lessons from this project was that browser-based sensor applications should be tested on actual phones.&lt;/p&gt;

&lt;p&gt;A feature can appear perfect in desktop development tools but behave differently on a physical device.&lt;/p&gt;

&lt;p&gt;I recommend testing:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;With Wi-Fi enabled&lt;/li&gt;
&lt;li&gt;With mobile data disabled&lt;/li&gt;
&lt;li&gt;In airplane mode&lt;/li&gt;
&lt;li&gt;Indoors&lt;/li&gt;
&lt;li&gt;Outdoors&lt;/li&gt;
&lt;li&gt;After rotating the device&lt;/li&gt;
&lt;li&gt;On multiple browsers where possible&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This catches problems that aren't obvious during normal development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building this feature taught me that an offline-first web application isn't simply about adding a service worker.&lt;/p&gt;

&lt;p&gt;It requires thinking about the entire dependency chain.&lt;/p&gt;

&lt;p&gt;For every feature, ask:&lt;/p&gt;

&lt;p&gt;«Does this actually need the internet?»&lt;/p&gt;

&lt;p&gt;If the answer is no, move the computation to the client whenever practical.&lt;/p&gt;

&lt;p&gt;For a Qibla compass, this means location + mathematical calculation + device sensors can do most of the work locally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The SabrTime Implementation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I built this approach into SabrTime, an Islamic PWA that includes prayer tools, Qibla, Islamic resources, and other everyday worship utilities.&lt;/p&gt;

&lt;p&gt;You can explore the project here:&lt;/p&gt;

&lt;p&gt;SabrTime: &lt;a href="https://sabrtime.in/" rel="noopener noreferrer"&gt;https://sabrtime.in/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also documented the Qibla approach in more detail in this article:&lt;/p&gt;

&lt;p&gt;Airplane Mode Qibla Compass: &lt;a href="https://sabrtime.in/blog/airplane-mode-qibla-compass.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/airplane-mode-qibla-compass.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're interested in the broader problem of maintaining useful Islamic tools while travelling, I also wrote about "missed prayers and Qaza" (&lt;a href="https://sabrtime.in/blog/missed-prayers-qaza-guide.html" rel="noopener noreferrer"&gt;https://sabrtime.in/blog/missed-prayers-qaza-guide.html&lt;/a&gt;) and practical guidance around making up missed Salah.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The web doesn't always need to depend on the cloud.&lt;/p&gt;

&lt;p&gt;For many utility applications, calculations can happen directly on the user's device. This can improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offline reliability&lt;/li&gt;
&lt;li&gt;Privacy&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;Resilience&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Qibla compass was a good example of this principle.&lt;/p&gt;

&lt;p&gt;Instead of asking a server:&lt;/p&gt;

&lt;p&gt;«“Where is the Qibla from this location?”»&lt;/p&gt;

&lt;p&gt;the phone can calculate the answer itself.&lt;/p&gt;

&lt;p&gt;That small architectural decision makes the feature much more useful when the user is travelling — precisely when a Qibla compass may be needed most.&lt;/p&gt;

&lt;p&gt;I'm continuing to experiment with offline-first and privacy-focused web development while building SabrTime, and I'll be sharing more of the technical lessons from the project.&lt;/p&gt;

</description>
      <category>qiblacompass</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What Google Search Console Is Teaching Me as a Solo Developer</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sat, 01 Aug 2026 07:29:13 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/what-google-search-console-is-teaching-me-as-a-solo-developer-42h7</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/what-google-search-console-is-teaching-me-as-a-solo-developer-42h7</guid>
      <description>&lt;p&gt;When I launched SabrTime, I expected Google to discover my pages quickly.&lt;/p&gt;

&lt;p&gt;That didn't happen.&lt;br&gt;
Today, only 13 pages of my website are indexed,people are already discovering my content through Search.&lt;br&gt;
Instead of chasing shortcuts, I've started trusting the data.&lt;/p&gt;

&lt;p&gt;My Search Console Snapshot&lt;br&gt;
Over the last few months, I've seen:&lt;br&gt;
✅ 13 pages indexed&lt;br&gt;
📈 Search impressions growing month after month&lt;br&gt;
🔍 Hundreds of search queries triggering my pages&lt;br&gt;
🌍 Visitors finding content from different countries&lt;br&gt;
📱 Most traffic coming from mobile devices&lt;/p&gt;

&lt;p&gt;That was enough to convince me that SEO is a long-term investment.&lt;/p&gt;

&lt;p&gt;Lesson 1: Impressions Matter Before Clicks&lt;br&gt;
One thing I misunderstood was impressions.&lt;br&gt;
At first, I only cared about clicks.&lt;br&gt;
Now I pay close attention to impressions because they tell me Google is beginning to understand my website—even if users aren't clicking yet.&lt;br&gt;
Every impression is a sign that my content is entering the search ecosystem.&lt;/p&gt;

&lt;p&gt;Lesson 2: Unexpected Keywords Are Opportunities&lt;br&gt;
Some of my pages started appearing for search queries I never intentionally targeted.&lt;br&gt;
That helped me discover new content ideas and improve existing pages around topics users were already searching for.&lt;br&gt;
Instead of guessing what people want, I now let Search Console guide my content strategy.&lt;/p&gt;

&lt;p&gt;Lesson 3: Technical SEO Matters&lt;br&gt;
While reviewing Search Console, I found several technical issues that needed attention:&lt;br&gt;
Improving internal links&lt;br&gt;
Fixing indexing problems&lt;br&gt;
Updating meta titles and descriptions&lt;br&gt;
Making pages easier for Google to crawl&lt;br&gt;
None of these changes created overnight success, but together they improved the health of my website.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy5duap05z9yogdgrwm2t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy5duap05z9yogdgrwm2t.jpg" alt=" " width="720" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lesson 4: Publishing Consistently Beats Publishing Perfectly&lt;br&gt;
Rather than waiting for the "perfect" article, I focused on publishing useful content consistently.&lt;br&gt;
Every quality page becomes another opportunity for Google to understand what your website is about.&lt;/p&gt;

&lt;p&gt;What I'm Working Toward&lt;br&gt;
My next goals are simple:&lt;br&gt;
Increase indexed pages beyond 13&lt;br&gt;
Continue improving Core Web Vitals&lt;br&gt;
Earn relevant backlinks naturally&lt;br&gt;
Publish content people genuinely find useful&lt;br&gt;
SEO isn't about gaming the algorithm.&lt;br&gt;
It's about building something worth discovering.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
I'm still at the beginning of my SEO journey, but Google Search Console has completely changed how I think about building websites.&lt;br&gt;
The data has helped me stop guessing and start making better decisions.&lt;br&gt;
If you're also building a website, what has Google Search Console taught you?&lt;/p&gt;

&lt;p&gt;About My Project&lt;br&gt;
I'm applying these lessons while building SabrTime, a privacy-focused Islamic web app with prayer times, Qibla direction, duas, an ibadah tracker, tasbeeh, and other daily Islamic tools.&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://sabrtime.in%E2%81%A0%EF%BF%BD" rel="noopener noreferrer"&gt;https://sabrtime.in⁠�&lt;/a&gt; &lt;/p&gt;

</description>
      <category>seo</category>
      <category>ai</category>
      <category>google</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Hello Dev Community! I'm Yunus Khan</title>
      <dc:creator>Yunus Khan</dc:creator>
      <pubDate>Sat, 18 Jul 2026 08:13:34 +0000</pubDate>
      <link>https://dev.to/yunus_khan_d64b04c980b819/hello-dev-community-im-yunus-khan-185c</link>
      <guid>https://dev.to/yunus_khan_d64b04c980b819/hello-dev-community-im-yunus-khan-185c</guid>
      <description>&lt;p&gt;👋 Assalamu Alaikum and hello everyone! 👋&lt;/p&gt;

&lt;p&gt;My name is Yunus Khan, an independent developer from India who enjoys building products that solve real problems and make technology more meaningful.&lt;/p&gt;

&lt;p&gt;My current passion project is SabrTime—a free Islamic web app designed to help Muslims stay connected with their faith through modern technology.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1d8o8863lax5xinukzx4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1d8o8863lax5xinukzx4.jpg" alt=" " width="720" height="1600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌐 Try SabrTime: &lt;a href="https://sabrtime.in" rel="noopener noreferrer"&gt;https://sabrtime.in&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🌙 What is SabrTime?&lt;/p&gt;

&lt;p&gt;SabrTime is more than just a prayer app. It's an all-in-one spiritual companion featuring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🕌 Accurate Prayer Times&lt;/li&gt;
&lt;li&gt;🧭 Qibla Compass&lt;/li&gt;
&lt;li&gt;📿 Digital Tasbeeh Counter&lt;/li&gt;
&lt;li&gt;🤲 Mood-Based Duas&lt;/li&gt;
&lt;li&gt;📖 Prayer &amp;amp; Dua Library&lt;/li&gt;
&lt;li&gt;📅 Islamic Calendar&lt;/li&gt;
&lt;li&gt;📈 Ibadah &amp;amp; Streak Tracker&lt;/li&gt;
&lt;li&gt;🧠 Islamic Quiz&lt;/li&gt;
&lt;li&gt;🌍 Multi-language support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm constantly adding new features and improving the experience based on community feedback.&lt;/p&gt;

&lt;p&gt;The project is also open source, and I'd love to hear your suggestions or contributions.&lt;/p&gt;

&lt;p&gt;⭐ GitHub: &lt;a href="https://github.com/Kyunus175/sabrtime" rel="noopener noreferrer"&gt;https://github.com/Kyunus175/sabrtime&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💻 What I'll Share Here&lt;/p&gt;

&lt;p&gt;On Dev.to, I'll write about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;My web development journey&lt;/li&gt;
&lt;li&gt;Building and scaling SabrTime&lt;/li&gt;
&lt;li&gt;JavaScript, HTML, CSS, Firebase, and PWAs&lt;/li&gt;
&lt;li&gt;SEO and performance optimization&lt;/li&gt;
&lt;li&gt;Lessons learned while developing as a solo developer&lt;/li&gt;
&lt;li&gt;Open-source experiments and side projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm excited to learn from this amazing community, share my experiences, and connect with developers from around the world.&lt;/p&gt;

&lt;p&gt;Thank you for reading my first post! If you have any feedback about SabrTime or ideas for future features, I'd love to hear them in the comments.&lt;/p&gt;

&lt;p&gt;🌐 Website: &lt;a href="https://sabrtime.in" rel="noopener noreferrer"&gt;https://sabrtime.in&lt;/a&gt;&lt;br&gt;
⭐ GitHub: &lt;a href="https://github.com/Kyunus175/sabrtime" rel="noopener noreferrer"&gt;https://github.com/Kyunus175/sabrtime&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  webdev #javascript #pwa #opensource #indiedev #devjourney
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
