<?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: techexample org</title>
    <description>The latest articles on DEV Community by techexample org (@techexampleorg).</description>
    <link>https://dev.to/techexampleorg</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%2F4235867%2Ffccc166c-73b3-4e38-a72f-259d37cf337e.png</url>
      <title>DEV Community: techexample org</title>
      <link>https://dev.to/techexampleorg</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/techexampleorg"/>
    <language>en</language>
    <item>
      <title>How to Check If a Backlink Is Dofollow (in 30 Seconds, Without Guessing)</title>
      <dc:creator>techexample org</dc:creator>
      <pubDate>Tue, 10 Nov 2026 05:42:34 +0000</pubDate>
      <link>https://dev.to/techexampleorg/how-to-check-if-a-backlink-is-dofollow-in-30-seconds-without-guessing-pg6</link>
      <guid>https://dev.to/techexampleorg/how-to-check-if-a-backlink-is-dofollow-in-30-seconds-without-guessing-pg6</guid>
      <description>&lt;p&gt;Every week, link-building lists promise hundreds of "dofollow" sites. We stopped trusting the lists and started reading the HTML instead. It takes about 30 seconds per page, and it changed which links we bother building.&lt;/p&gt;

&lt;p&gt;We publish AI, software and how-to guides at &lt;a href="https://techexample.net/" rel="noopener noreferrer"&gt;techexample org&lt;/a&gt;, so most of our checking happens on tech and blogging sites — but the method works for any page, in any niche.&lt;/p&gt;

&lt;h2&gt;
  
  
  There is no "dofollow" attribute
&lt;/h2&gt;

&lt;p&gt;A link is dofollow when it is a normal link &lt;strong&gt;without&lt;/strong&gt; any of these values in its &lt;code&gt;rel&lt;/code&gt; attribute:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;nofollow&lt;/code&gt; — "do not count this link"&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ugc&lt;/code&gt; — user-generated content (comments, forum posts); Google discounts these&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;sponsored&lt;/code&gt; — paid or affiliate link&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;noopener&lt;/code&gt; and &lt;code&gt;noreferrer&lt;/code&gt; are browser security hints. They say nothing to search engines, so a link with only those two &lt;strong&gt;is&lt;/strong&gt; dofollow.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 30-second check
&lt;/h2&gt;

&lt;p&gt;For most sites, one command is enough:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl -sS -L &lt;span class="s2"&gt;"https://example.com/the-page"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; grep -o &lt;span class="s1"&gt;'&amp;lt;a [^&amp;gt;]*yourdomain[^&amp;gt;]*&amp;gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at the &lt;code&gt;rel&lt;/code&gt; in the tag that comes back. No &lt;code&gt;nofollow&lt;/code&gt;, no &lt;code&gt;ugc&lt;/code&gt;, no &lt;code&gt;sponsored&lt;/code&gt;? The link passes weight.&lt;/p&gt;

&lt;p&gt;If the site blocks scripted fetches, open the page in your browser and run this in the console instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'a[href]'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'yourdomain.com'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getAttribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'rel'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s1"&gt;'(empty)'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'  &amp;lt;-  '&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Check the link a user placed, not every link on the page
&lt;/h2&gt;

&lt;p&gt;This is the mistake that gives false positives. A page is full of the platform's &lt;em&gt;own&lt;/em&gt; links, which are usually clean. What matters is the exact link a user like you can place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On most WordPress blogs, a comment author's name links to their website — and WordPress core renders it as &lt;code&gt;rel="ugc external nofollow"&lt;/code&gt; unless the owner installs a specific plugin to change it. In a recent sweep of well-known tech and blogging sites taken from popular "dofollow blog commenting" lists, &lt;strong&gt;every single one&lt;/strong&gt; rendered comment links that way.&lt;/li&gt;
&lt;li&gt;On dev.to, links inside an article body carry only &lt;code&gt;noopener noreferrer&lt;/code&gt; — dofollow. Links inside &lt;strong&gt;comments&lt;/strong&gt; on the same platform carry &lt;code&gt;nofollow&lt;/code&gt;. Same site, opposite answer, depending on where the link sits.&lt;/li&gt;
&lt;li&gt;Several large publishing platforms wrap author-placed links in a redirect and mark them nofollow, even when the rest of the page looks clean.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So: find a real comment, a real guest post, a real profile — and inspect &lt;em&gt;that&lt;/em&gt; link.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we do differently now
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check before writing.&lt;/strong&gt; Thirty seconds of checking beats an afternoon of writing for a link that passes nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prefer a few verified links over a long list.&lt;/strong&gt; One in-article link on a strong, relevant domain is worth more than fifty comment links on sites nobody reads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep good comments anyway — for the right reason.&lt;/strong&gt; A thoughtful comment on a relevant blog still brings readers and relationships. It just should not be counted as a dofollow backlink when the HTML says otherwise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-check occasionally.&lt;/strong&gt; Platforms change their &lt;code&gt;rel&lt;/code&gt; policies without announcing it. A link that passed weight last year may not today.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want the plain-English version of checks like this, we keep our step-by-step guides collected on &lt;a href="https://techexample.net/" rel="noopener noreferrer"&gt;the techexample org homepage&lt;/a&gt; — Docker, Linux, local AI tools and the other things we test before we write about them.&lt;/p&gt;

&lt;p&gt;How do you verify a link before you count it? I am curious which tools other people trust for this.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>5 Docker Mistakes That Waste Your Weekend (and How to Spot Them Fast)</title>
      <dc:creator>techexample org</dc:creator>
      <pubDate>Mon, 09 Nov 2026 20:49:01 +0000</pubDate>
      <link>https://dev.to/techexampleorg/5-docker-mistakes-that-waste-your-weekend-and-how-to-spot-them-fast-54b7</link>
      <guid>https://dev.to/techexampleorg/5-docker-mistakes-that-waste-your-weekend-and-how-to-spot-them-fast-54b7</guid>
      <description>&lt;p&gt;Docker rarely breaks on a Tuesday morning when you have time to think. It breaks on Friday evening, halfway through a deploy, in a way that makes no sense until you spot the one small decision that caused it. Most of those decisions are boring, common, and easy to check for once you know the pattern. Here are five that keep coming up, and the quickest way to catch each one before it eats your weekend.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Running everything as root
&lt;/h2&gt;

&lt;p&gt;If your Dockerfile never mentions a user, your application runs as root inside the container. That works fine right up until it doesn't: files written to mounted volumes end up owned by root on your host, your editor can't save changes without sudo, and any process that escapes the container starts with far more privilege than it ever needed.&lt;/p&gt;

&lt;p&gt;The spot-check takes seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;mycontainer &lt;span class="nb"&gt;whoami&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If that prints &lt;code&gt;root&lt;/code&gt;, add a &lt;code&gt;USER&lt;/code&gt; instruction to the Dockerfile and create the account explicitly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;RUN &lt;/span&gt;useradd &lt;span class="nt"&gt;--create-home&lt;/span&gt; appuser
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="s"&gt; appuser&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Some images make this fiddly, and a few tools genuinely need root, but for a typical web service or worker this is a ten-minute fix that removes a whole category of permission weirdness.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Having no .dockerignore file
&lt;/h2&gt;

&lt;p&gt;Your build context is everything in the directory where you run &lt;code&gt;docker build&lt;/code&gt; — unless a &lt;code&gt;.dockerignore&lt;/code&gt; says otherwise. Without one, Docker cheerfully ships your &lt;code&gt;.git&lt;/code&gt; folder, &lt;code&gt;node_modules&lt;/code&gt;, local logs, and that 400 MB test dataset into the build, every single time. Builds get slower, caches get invalidated by files that have nothing to do with the app, and secrets sitting in a local &lt;code&gt;.env&lt;/code&gt; can end up baked into an image layer.&lt;/p&gt;

&lt;p&gt;Spot it by watching the build output: Docker prints the size of the build context it sends to the daemon. If that number surprises you, you have found the problem. A minimal &lt;code&gt;.dockerignore&lt;/code&gt; covers most projects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.git
node_modules
*.log
.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Trusting the latest tag
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;FROM node:latest&lt;/code&gt; feels convenient until a rebuild three months later pulls a different base image than the one you tested. The build that worked in March fails in June, and nothing in your code changed — because &lt;code&gt;latest&lt;/code&gt; is a moving target, not a version.&lt;/p&gt;

&lt;p&gt;The fix is unglamorous: pin your base images. Use a specific version tag, and for anything you ship further afield, pin by digest so the image is bit-for-bit the one you tested. When you do upgrade, upgrade deliberately — bump the tag in the Dockerfile, rebuild, run your tests, and commit the change like any other dependency update. Surprises belong in birthday parties, not in CI.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Writing data to the container filesystem
&lt;/h2&gt;

&lt;p&gt;Containers are disposable, and their writable layer goes away with them. Applications that write uploads, caches, or database files into a container's own filesystem seem fine in development — until someone recreates the container and everything vanishes. Worse, heavy writes to the overlay filesystem are slow, and the layer keeps growing until disk usage becomes the next incident.&lt;/p&gt;

&lt;p&gt;Check where your app actually writes, and move anything that must survive into a named volume or a bind mount:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-v&lt;/span&gt; appdata:/var/lib/myapp myimage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A good rule of thumb: if losing it would ruin your day, it does not belong in the container layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Letting orphaned volumes and networks pile up
&lt;/h2&gt;

&lt;p&gt;Every experiment leaves debris: stopped containers, dangling images, anonymous volumes from one-off runs, and networks from Compose projects you deleted weeks ago. None of it errors. It just accumulates quietly until the disk fills up and every service on the machine starts failing in unrelated-looking ways.&lt;/p&gt;

&lt;p&gt;See what you are holding with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker system &lt;span class="nb"&gt;df&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then reclaim the safe stuff with &lt;code&gt;docker system prune&lt;/code&gt;, and add &lt;code&gt;--volumes&lt;/code&gt; once you have checked nothing important lives in an anonymous volume. Run both commands monthly and this mistake mostly takes care of itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern underneath
&lt;/h2&gt;

&lt;p&gt;None of these five are advanced topics. They are defaults nobody revisited — the default user, the default context, the default tag, the default storage, the default cleanup habit of never. Spending an hour auditing a working setup against this list is dull, but it is much less dull than debugging the same setup at midnight. For more step-by-step troubleshooting in this style, the guides at &lt;a href="https://techexample.net/" rel="noopener noreferrer"&gt;techexample org&lt;/a&gt; work through real commands and real fixes, and there is &lt;a href="https://techexample.net/" rel="noopener noreferrer"&gt;a plain-language walkthrough of the Docker checks worth running before any deploy&lt;/a&gt; if you want the longer version of this list.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
