{"id":254,"date":"2026-05-19T05:42:22","date_gmt":"2026-05-19T05:42:22","guid":{"rendered":"https:\/\/tools.dwiyanti.com\/blog\/?p=254"},"modified":"2026-05-19T05:42:23","modified_gmt":"2026-05-19T05:42:23","slug":"cmd-curl-0-bytes-issue","status":"publish","type":"post","link":"https:\/\/tools.dwiyanti.com\/blog\/cmd-curl-0-bytes-issue","title":{"rendered":"CMD Curl 0 Bytes Issue"},"content":{"rendered":"<pre style=\"white-space:pre-wrap\">\n<code>\nsaya memasukkan kode ini ke cmd, kenapa hasilnya 0 bytes? curl -L -s -o \/dev\/null -w \"Total Size: %{size_download} bytes\\n\" https:\/\/me.dwiyanti.com\n--\nPerintah `curl` kamu sebenarnya *tidak salah* \u2014 justru hasil `0 bytes` itu *expected behavior* dari kombinasi flag yang kamu pakai.\n\nMari kita bedah:\n\n```bash\ncurl -L -s -o \/dev\/null -w \"Total Size: %{size_download} bytes\\n\" https:\/\/me.dwiyanti.com\n```\n\n \ud83d\udd0d Kenapa hasilnya 0 bytes?\n\nMasalah utamanya ada di sini:\n\n```bash\n-o \/dev\/null\n```\n\nArtinya:\n\u27a1\ufe0f Semua response body dibuang (tidak disimpan)\n\nTapi yang bikin `0 bytes` itu adalah:\n\n```bash\n-w \"%{size_download}\"\n```\n\n`size_download` = jumlah byte *yang benar-benar di-download oleh curl*\n\n---\n\n \u26a0\ufe0f Kemungkinan penyebab 0 bytes:\n\n 1. Server tidak mengirim body\n\nMisalnya:\n\n* Response `204 No Content`\n* Redirect tanpa konten (walaupun kamu pakai `-L`)\n\n 2. Ada blocking \/ protection\n\nWebsite kamu (`https:\/\/me.dwiyanti.com`) bisa jadi:\n\n* pakai Cloudflare \/ firewall\n* block user-agent default curl\n\nAkibatnya:\n\u27a1\ufe0f curl dapat response kosong\n\n 3. Request hanya dapat header\n\nKadang server:\n\n* langsung close connection\n* atau hanya kasih header\n\n---\n\n \u2705 Cara cek penyebabnya\n\n 1. Lihat header response\n\n```bash\ncurl -I https:\/\/me.dwiyanti.com\n```\n\n 2. Lihat detail request\n\n```bash\ncurl -v https:\/\/me.dwiyanti.com\n```\n\nPerhatikan:\n\n* status code (200, 301, 403, dll)\n* apakah ada redirect loop\n* apakah diblock\n\n---\n\n \u2705 Tes tanpa buang output\n\n```bash\ncurl -L https:\/\/me.dwiyanti.com\n```\n\nKalau muncul HTML \u2192 berarti normal\nKalau kosong \u2192 ada masalah dari server\n\n---\n\n \u2705 Coba pakai user-agent browser\n\nKadang ini langsung solve:\n\n```bash\ncurl -L -A \"Mozilla\/5.0\" -o \/dev\/null -w \"Total Size: %{size_download} bytes\\n\" https:\/\/me.dwiyanti.com\n```\n\n---\n\n \ud83d\udca1 Insight penting (SEO mindset kamu bakal suka ini)\n\nKalau curl dapat `0 bytes`, bisa berarti:\n\n* bot (crawler tertentu) juga bisa dapat konten kosong\n* ini bisa impact crawling & indexing\n\n\ud83d\udc49 Jadi ini bukan sekadar masalah CLI, tapi bisa jadi:\n*technical SEO issue (crawlability \/ bot access)*\n\n---\n\n \ud83d\udd27 Kesimpulan\n\nKemungkinan terbesar:\n\n&gt; Website kamu tidak mengirim body ke request curl (karena proteksi \/ redirect \/ behavior server)\n\n---\n\nKalau mau, kirim hasil dari:\n\n```bash\ncurl -I\ncurl -v\n```\n\nAku bisa bantu baca *persis di mana bottleneck-nya (redirect, firewall, atau config server)*.\n-----\n\nMantap, screenshot ini jelas banget \ud83d\udc4d \u2014 dan sekarang kelihatan *penyebab pastinya*.\n\n---\n\n \ud83d\udd25 Penyebab `0 bytes` \u2192 karena *Transfer-Encoding: chunked*\n\nDi hasil `curl -v` kamu ada ini:\n\n```http\nTransfer-Encoding: chunked\n```\n\n \ud83d\udca1 Artinya:\n\nServer *tidak mengirim Content-Length*, tapi mengirim data dalam bentuk *chunk* (potongan).\n\n---\n\n \u26a0\ufe0f Kenapa jadi 0 bytes di `size_download`?\n\n`%{size_download}` di curl:\n\u27a1\ufe0f Mengandalkan jumlah byte yang *terukur secara langsung*\n\nTapi pada response *chunked*:\n\n* Tidak ada total size di awal\n* Curl kadang *tidak menghitungnya sebagai \"download size\" final*\n\n\ud83d\udc49 Hasilnya:\n\n```bash\nTotal Size: 0 bytes\n```\n\nPadahal:\n\u2714 Konten sebenarnya ADA\n\u2714 HTML tetap dikirim\n\u2714 Status 200 OK\n\n---\n\n \ud83e\udde0 Bukti dari log kamu\n\nIni bagian penting:\n\n```http\nHTTP\/1.1 200 OK\nTransfer-Encoding: chunked\n```\n\nDan:\n\n```http\nX-LiteSpeed-Cache: hit\n```\n\nArtinya:\n\n* Server kamu pakai *LiteSpeed (Hostinger)*\n* Response di-cache\n* Dan dikirim pakai chunked encoding\n\n---\n\n \u2705 Cara verifikasi bahwa konten sebenarnya ada\n\nCoba ini:\n\n```bash\ncurl -L https:\/\/me.dwiyanti.com | wc -c\n```\n\n\ud83d\udc49 Ini akan hitung *real byte output*\n\n---\n\nAtau di Windows CMD:\n\n```bash\ncurl -L https:\/\/me.dwiyanti.com &gt; test.html\n```\n\nLalu cek size file:\n\n* pasti *bukan 0 bytes*\n\n---\n\n \u2705 Cara dapat size yang \u201cbenar\u201d\n\nGunakan ini:\n\n```bash\ncurl -L -s -w \"Downloaded: %{size_download} bytes\\n\" https:\/\/me.dwiyanti.com -o test.html\n```\n\n\ud83d\udc49 Karena sekarang:\n\n* curl benar-benar simpan file\n* size bisa dihitung\n\n---\n\n \ud83d\udea8 Insight penting (ini level advanced SEO \/ crawling)\n\nKarena server kamu pakai:\n\n* chunked encoding\n* LiteSpeed cache\n\n\ud83d\udc49 Ini normal untuk browser\n\ud83d\udc49 Tapi untuk tools \/ bot tertentu:\n\n* bisa salah baca size\n* bisa dianggap empty response (edge case)\n\n---\n\n \ud83e\udde9 Kesimpulan\n\nBukan error. Ini normal.\n\n\ud83d\udc49 Penyebab utama:\n\n&gt; Server kirim response pakai *chunked encoding*, bukan Content-Length\n\n\ud83d\udc49 Dampaknya:\n\n&gt; `%{size_download}` bisa tampil *0 bytes walaupun konten ada*\n\n---\n\n \ud83d\udd27 Kalau kamu mau lebih \u201cSEO-safe\u201d\n\nBisa dipertimbangkan:\n\n* force `Content-Length` (non-chunked)\n* atau biarkan saja (karena Googlebot sudah support chunked)\n\n---\n\nKalau kamu mau, aku bisa bantu cek lebih dalam:\n\n* apakah ini aman untuk Googlebot\n* atau ada potensi issue indexing di setup kamu (LiteSpeed + Hostinger + cache)\n\nTinggal bilang aja \ud83d\udc4d\n-----\n\nNah ini justru *membuktikan semuanya normal* \u2705\n\n---\n\n \ud83d\udd0d Dari hasil kamu:\n\n```bash\n100 176k\n```\n\nArtinya:\n\n* \u2714 Konten berhasil di-download\n* \u2714 Size sekitar *176 KB*\n* \u2714 Server mengirim body dengan benar\n\n---\n\n \ud83e\udde0 Kenapa tadi `0 bytes` tapi sekarang 176 KB?\n\nPerbedaannya:\n\n \u274c Command pertama\n\n```bash\ncurl -L -s -o \/dev\/null -w \"%{size_download}\"\n```\n\n* Output dibuang (`\/dev\/null`)\n* Response pakai *chunked encoding*\n* Curl *tidak menghitung size dengan benar*\n\n\ud83d\udc49 hasil: `0 bytes`\n\n---\n\n \u2705 Command kedua\n\n```bash\ncurl -L https:\/\/me.dwiyanti.com &gt; test.html\n```\n\n* Data benar-benar ditulis ke file\n* Curl menghitung byte real yang diterima\n\n\ud83d\udc49 hasil: `176 KB`\n\n---\n\n \u26a0\ufe0f Intinya (ini penting banget)\n\n&gt; *Masalahnya bukan di website kamu*\n&gt; tapi di cara `curl` membaca `chunked response`\n\n---\n\n \ud83d\udd25 Insight teknis (level advanced, kamu bakal suka ini)\n\nServer kamu:\n\n* LiteSpeed (Hostinger)\n* Cache aktif (`X-LiteSpeed-Cache: hit`)\n* Pakai `Transfer-Encoding: chunked`\n\n\ud83d\udc49 Ini adalah:\n\n* *Best practice untuk performa (TTFB lebih cepat)*\n* Normal di production modern\n\n---\n\n \ud83d\udea8 Apakah ini bahaya untuk SEO?\n\n\ud83d\udc49 Jawaban singkat: *TIDAK*\n\nKarena:\n\n* Googlebot support chunked encoding\n* Status `200 OK`\n* Konten bisa di-render\n\n\u2714 Aman untuk indexing\n\u2714 Aman untuk crawling\n\n---\n\n \ud83e\uddea Cara test yang lebih akurat (rekomendasi)\n\nKalau kamu mau audit kayak SEO pro:\n\n```bash\ncurl -L -o test.html -w \"Size: %{size_download} bytes\\n\" https:\/\/me.dwiyanti.com\n```\n\natau:\n\n```bash\ncurl -s https:\/\/me.dwiyanti.com | wc -c\n```\n\n---\n\n \ud83e\udde9 Kesimpulan final\n\n\ud83d\udc49 `0 bytes` = false signal\n\ud83d\udc49 `176 KB` = real condition\n\n&gt; Website kamu sehat, tidak ada masalah response body\n\n---\n\nKalau kamu mau, aku bisa lanjut bantu:\n\n* audit crawlability (Googlebot vs curl vs browser)\n* atau cek apakah ada *hidden issue di rendering \/ JS \/ SEO technical*\n\nKarena setup kamu ini udah masuk level *serius (LiteSpeed + cache + SEO awareness)* \ud83d\udc4d\n-----\n\nJawaban jujurnya: *belum tentu* \u2014 tapi *176 KB itu sudah masuk zona \u201cperlu diwaspadai\u201d* untuk HTML.\n\n---\n\n \ud83c\udfaf Benchmark cepat (praktisi SEO & performance)\n\n* \u2705 Ideal HTML: *&lt; 50 KB*\n* \u26a0\ufe0f Mulai berat: *50\u2013100 KB*\n* \ud83d\udea8 Berpotensi bloat: *&gt; 100 KB*\n* \ud83d\udd25 Berat banget: *&gt; 200 KB*\n\n\ud83d\udc49 Jadi 176 KB = *sudah di atas threshold sehat*\n\n---\n\n \ud83e\udde0 Tapi\u2026 ini penting banget\n\n&gt; *176 KB \u2260 otomatis bloat*\n\nKarena bisa jadi isinya memang \u201clegit content\u201d\n\n---\n\n \ud83d\udd0d Kemungkinan penyebab HTML kamu 176 KB\n\nBerdasarkan stack kamu:\n\n* WordPress\n* LiteSpeed Cache\n* Hosting Hostinger\n\nBiasanya penyebabnya:\n\n 1. \u274c DOM terlalu besar\n\n* banyak `&lt;div&gt;`\n* nested structure dalam\n* builder (Elementor \/ Gutenberg heavy block)\n\n---\n\n 2. \u274c Inline CSS \/ JS\n\nSering terjadi kalau:\n\n* CSS tidak di-extract\n* critical CSS terlalu besar\n* JS di-inline di HTML\n\n---\n\n 3. \u274c Plugin WordPress kebanyakan inject\n\nContoh:\n\n* schema berulang\n* emoji script\n* wp-json link\n* inline config script\n\n---\n\n 4. \u274c HTML membawa data tidak perlu\n\nMisalnya:\n\n* hidden elements\n* template yang tidak kepakai\n* preload berlebihan\n\n---\n\n \ud83d\udd2c Cara memastikan ini bloat atau tidak\n\nBuka `test.html`, lalu cek:\n\n \ud83d\udd0e 1. Lihat struktur\n\nKalau kamu lihat:\n\n* ribuan `&lt;div&gt;`\n* banyak section kosong\n\n\ud83d\udc49 itu bloat\n\n---\n\n \ud83d\udd0e 2. Cari ini di file\n\n```html\n&lt;style&gt;\n&lt;script&gt;\n```\n\nKalau panjang banget:\n\ud83d\udc49 berarti inline bloat\n\n---\n\n \ud83d\udd0e 3. Cek DOM size (best practice Google)\n\n* Ideal: &lt; 1500 nodes\n* Warning: &gt; 1500\n* Bad: &gt; 3000\n\n---\n\n \ud83d\udd25 Insight penting (ini yang jarang orang ngerti)\n\nGoogle *tidak peduli size HTML secara langsung*, tapi peduli:\n\n* Time to First Byte (TTFB)\n* DOM complexity\n* Render time\n\n\ud83d\udc49 Jadi:\n\n&gt; HTML besar = masalah *kalau bikin render lambat*\n\n---\n\n \u2696\ufe0f Kasus kamu (analisa cepat)\n\nDari hasil kamu:\n\n* \u2714 Status 200 OK\n* \u2714 Cache HIT\n* \u2714 Size 176 KB\n\n\ud83d\udc49 Kemungkinan besar:\n\n&gt; *Bukan error, tapi inefficiency (bisa di-optimasi)*\n\n---\n\n \ud83d\ude80 Rekomendasi langsung (prioritas tinggi)\n\nKalau mau clean & SEO strong:\n\n \ud83d\udd27 1. Reduce HTML size\n\nTarget:\n\ud83d\udc49 turun ke *&lt; 100 KB*\n\n---\n\n \ud83d\udd27 2. Aktifkan di LiteSpeed:\n\n* Remove unused CSS\n* Minify HTML\n* Load CSS async\n\n---\n\n \ud83d\udd27 3. Audit plugin\n\nBuang yang:\n\n* inject script ke frontend\n* tidak critical\n\n---\n\n \ud83d\udd27 4. Hindari builder berlebihan\n\nKalau pakai Elementor:\n\ud83d\udc49 ini sering jadi sumber utama bloat\n\n---\n\n \ud83e\udde9 Kesimpulan\n\n\ud83d\udc49 176 KB = *belum tentu bloat*\n\ud83d\udc49 Tapi = *strong signal ada inefficiency*\n\n---\n\nKalau kamu mau, kirim isi `test.html` atau struktur section homepage kamu.\n\nAku bisa bantu:\n\n* pinpoint bagian mana yang bikin bloat\n* bahkan kasih estimasi \u201cbisa dipangkas berapa KB\u201d \ud83d\udd25\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>saya memasukkan kode ini ke cmd, kenapa hasilnya 0 bytes? curl -L -s -o \/dev\/null -w &#8220;Total Size: %{size_download} bytes\\n&#8221; https:\/\/me.dwiyanti.com &#8212; Perintah `curl` kamu sebenarnya *tidak salah* \u2014 justru hasil `0 bytes` itu *expected behavior* dari kombinasi flag yang kamu pakai. Mari kita bedah: &#8220;`bash curl -L -s -o \/dev\/null -w &#8220;Total Size: %{size_download} [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-254","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts\/254","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/comments?post=254"}],"version-history":[{"count":1,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts\/254\/revisions"}],"predecessor-version":[{"id":255,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/posts\/254\/revisions\/255"}],"wp:attachment":[{"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/media?parent=254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/categories?post=254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tools.dwiyanti.com\/blog\/wp-json\/wp\/v2\/tags?post=254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}