Hướng dẫn về URL Case Sensitivity

Vì sao /Apple và /apple là hai khác nhau URLs để Google — đó Linux so với Windows/IIS filesystem mechanism behind điều này, đó robots.txt case trap, máy chủ-cấp độ các cách sửa cho Apache, Nginx, và IIS, và cách tìm case duplicates trong đó wild.

Xuất bản lần đầu: 3 thg 7, 2026 · Cập nhật lần cuối: 8 thg 8, 2026 · Advanced
Ngôn ngữ
1 tín hiệu bằng chứng trên trang này

URL paths, filenames, và query parameters là case-sensitive để Google (đó hostname không) — so /Apple và /apple là hai khác nhau URLs đó có thể spawn duplicate nội dung, và một robots.txt Disallow cho /Riêng tư/ sẽ không block /riêng tư/. Đó mechanism là của bạn filesystem: Linux/Unix (và Apache/Nginx on điều này) treat paths as case-sensitive byte strings; Windows/IIS là case-insensitive theo mặc định, so đó giống nhau yêu cầu có thể 404 on một host và 200 on một sản phẩm khác. Đó cách sửa là picking một case (lowercase là đó convention) và enforcing điều này với một máy chủ-cấp độ chuyển hướng, hoặc rel=canonical as một fallback.

TL;DR — Hostnames là case-insensitive; path và query so sánh có thể là case-sensitive và ultimately phụ thuộc vào máy chủ và application routing. Filesystem defaults thường influence behavior, nhưng không define URL semantics by themselves. Google có thể crawl differently cased paths as distinct URLs; điều này có thể canonicalize them together khi nội dung matches, nhưng “usually… not always ideal” (bản dịch) «thường… không luôn ideal» không phải một strategy. robots.txt các giá trị là case-sensitive cũng, so một Disallow cho một casing silently misses đó others — một distinct access vấn đề, không chỉ một duplicate-nội dung một. Cách sửa priority: ngăn variants tại đó nguồn, thì một máy chủ-cấp độ 301 để lowercase (Apache RewriteMap tolower, Nginx map, IIS URL Rewrite), với rel=canonical as một fallback khi bạn không thể touch đó máy chủ.

Evidence for this claim URI schemes and hosts are case-insensitive, while path and query components may be case-sensitive depending on the server and application. Scope: Generic URI comparison rules. Confidence: high · Verified: IETF RFC 3986: Syntax-based normalization Evidence for this claim Google recommends consistent URL casing and treats URLs that differ by path case as potentially distinct crawlable URLs. Scope: Current Google URL consistency guidance. Confidence: high · Verified: Google Search Central: URL structure best practices

Điều gì là (và không phải) case-sensitive

Bắt đầu với đó chính xác boundary, vì casual phrasing (“URLs are case-sensitive” (bản dịch) «URLs là case-sensitive») nhận điều này sai half đó time. John Mueller drew đó line cleanly: “URL path, filename, and query parameters are case-sensitive, the hostname / domain name aren’t. Case-sensitivity matters for canonicalization, so it’s a good idea to be consistent there.” (bản dịch) «URL path, filename, và query parameters là case-sensitive, đó hostname / domain name không. Case-sensitivity matters cho canonicalization, so đây là một good ý tưởng để là consistent ở đó.»

So:

URL partCase-sensitive?Vì sao
Scheme (https://)KhôngFixed giao thức tokens
Hostname (example.com)KhôngDNS resolution là case-insensitive tại giao thức cấp độ
Path (/Products/Shoes)Resolved so với filesystem/router đó compares casing
Filename (/Logo.png)giống nhau — nó part của path
Query string (?Color=Red)Parameter keys và các giá trị là compared as-là

EXAMPLE.com/pageexample.com/page là đó giống nhau URL. example.com/Pageexample.com/page không phải. Này là đó giống nhau class of “one page, many URLs” (bản dịch) «một trang, nhiều URLs» vấn đề đó trailing slashes, www so với non-www, và query parameters tạo — đó URL structure và canonicalization deep dives cover những variants, và I sẽ không re-derive them ở đây; casing là một hơn axis trong đó giống nhau duplicate-URL grid.

đó bảng là URL-xử lý default engines như Google follow, theo spec — không promise về Điều gì của bạn cụ thể origin máy chủ, CDN, hoặc application sẽ thực ra trả về. Treat nó as nơi để bắt đầu kiểm thử, không as substitute cho kiểm thử: yêu cầu path trong cả hai casings và đọc thực phản hồi ( Scripts tab có sao chép và dán curl kiểm tra) trước khi bạn assume rule áp dụng để của bạn stack.

Một nhiều hơn trường hợp biên worth flagging thay vì glossing over: Unicode slugs. Hai visually giống hệt characters — Latin “một” và Cyrillic “а,” ví dụ — có thể là khác code points đó survive ASCII-style lowercasing completely untouched, vì lowercasing operates on characters bạn có, không ones reader perceives. nếu bạn generate slugs từ non-English các tiêu đề, quyết định của bạn encoding và normalization policy lên front thay vì assuming .toLowerCase() call catches mọi thứ international.

Vì sao điều này happens: nó của bạn filesystem

Hầu hết ghi-ups state “URLs are case-sensitive” (bản dịch) «URLs là case-sensitive» as đã nhận wisdom và move on. Đó hữu ích part là vì sao, vì điều này giải thích đó single hầu hết confusing symptom — đó giống nhau URL hoạt động on một máy chủ và 404-ing on một sản phẩm khác.

Linux/Unix filesystems là case-sensitive. On ext4, XFS, và similar filesystems đó chạy overwhelming majority của web, Appleapple là theo nghĩa đen khác directory entries — khác inodes. Khi Apache hoặc Nginx maps incoming yêu cầu path để file hoặc route, nó compares casing byte-cho-byte. Ask cho /Apple Khi chỉ /apple tồn tại và bạn nhận genuine 404.

Windows/NTFS là case-insensitive theo mặc định — nhưng case-bảo toàn. nó stores Apple với của nó capital intact (so nó displays “correctly”), tuy vậy Khi nó looks name lên, nó bỏ qua case. IIS, Microsoft web máy chủ, inherits đó behavior: yêu cầu /Apple hoặc /APPLE hoặc /apple và IIS phục vụ giống nhau file. nó không khắc phục SEO vấn đề — Google vẫn sees distinct các URL — nhưng máy chủ itself sẽ happily 200 tất cả them.

consequence là kinh điển dev-để-prod bug: nhà phát triển on Windows/IIS types path với sai case, nó hoạt động fine locally vì Windows không care, sau đó giống nhau yêu cầu 404s moment nó hits Linux/Apache/Nginx production máy chủ đó làm. Không có gì trong của bạn CMS hoặc SEO plugin gây ra nó — hai machines’ operating các hệ thống chỉ disagree về liệu case matters. (Microsoft documents điều này behavior trực tiếp trong của nó Windows case-sensitivity hướng dẫn.)

Này là worth knowing during bất kỳ nền tảng migration: move một site giữa một case-insensitive host và một case-sensitive một và mixed-case URLs đó “always worked” (bản dịch) «luôn worked» có thể suddenly bắt đầu breaking hoặc duplicating.

Đó filesystem là đó bottom of đó stack, không đó toàn bộ stack. Mọi thứ trên điều này — một reverse proxy, một CDN edge, một load balancer, hoặc đó application own router — nhận một chance để normalize, rewrite, hoặc ngắn-circuit một yêu cầu casing trước điều này bao giờ reaches đó filesystem đó origin máy chủ sits on. MỘT Linux origin không bảo đảm case-sensitive behavior tại đó URL bạn thực ra yêu cầu nếu điều gì đó trong front of điều này là đã folding cases together, và an application router có thể chỉ as easily impose của nó own case rules independent of đó OS underneath điều này. “Linux + Apache/Nginx = case-sensitive” (bản dịch) «Linux + Apache/Nginx = case-sensitive» là đó right default assumption, không một substitute cho kiểm tra đó thực tế phản hồi on của bạn stack.

Cách Google thực ra xử lý case-khác các URL

Google không inventing case sensitivity — đây là sau đó URL spec đó mỗi compliant HTTP client follows. Từ đó tài liệu: “Like any other HTTP client following IETF STD 66, Google Search’s URL handling is case sensitive (for example, Google treats both /APPLE and /apple as distinct URLs with their own content).” (bản dịch) «Như bất kỳ other HTTP client sau IETF STD 66, Google Search’s URL xử lý là case sensitive (ví dụ, Google xử lý cả hai và as distinct URLs với của họ own nội dung).» Đó STD 66 grounding matters: này là các tiêu chuẩn behavior, không một Google quirk.

Google own advice là để normalize: “If upper and lower case text in a URL is treated the same by your web server, convert all text to the same case so it’s easier for Google to determine that URLs reference the same page.” (bản dịch) «Nếu upper và thấp hơn case text trong một URL là treated đó giống nhau by của bạn web máy chủ, convert all text để đó giống nhau case so đây là easier cho Google để determine đó URLs reference đó cùng trang.» Note đó “nếu” — đó là aimed squarely tại case-insensitive các máy chủ (IIS) đó serve mỗi casing, mà là chính xác nơi đó duplicate risk lives.

Có thể Google hợp nhất case-duplicates on của nó own? Thường, có — qua canonicalization, casing là một of đó phổ biến duplicate-URL patterns điều này groups. Mueller: “If a website still shows the same content in these cases, search engines will try to figure it out on their own and usually that works out well. But it’s not always ideal.” (bản dịch) «Nếu một website vẫn cho thấy đó giống nhau nội dung trong những cases, các công cụ tìm kiếm sẽ try để hình điều này out on của họ own và thường đó hoạt động out well. Nhưng đây là không luôn ideal.» Và trong một tách biệt exchange về mismatched canonicals on uppercase URLs, he đã là sharper: “If it serves the same content, it’ll probably be seen as a duplicate and folded together, but ‘hope’ should not be a part of an SEO strategy.” (bản dịch) «Nếu điều này serves đó giống nhau nội dung, điều này’ll probably là seen as một duplicate và folded together, nhưng ‘hope’ không nên là một part of an SEO strategy.»

đó honest cách diễn đạt. điều này không phải five-alarm fire — nhưng relying on Google để guess right là lựa chọn bạn không có để làm Khi khắc phục là chuyển hướng rule.

có cũng một crawl-efficiency cost. Mueller: “Search engines will try to crawl all variations of the URL that they find. This can make it a bit slower for them to find other useful content on your website.” (bản dịch) «Các công cụ tìm kiếm sẽ try để crawl all variations of đó URL đó they tìm. Này có thể làm điều này một bit chậm hơn cho them để tìm other hữu ích nội dung on của bạn website.» Nếu trang web của bạn là spraying case-variant URLs vào đó link graph, bots waste fetches re-crawling đó giống nhau nội dung trong khác nhau casings thay vì discovering của bạn real các trang — đó giống nhau crawl-waste dynamic đó parameters và crawl-budget topics mô tả, chỉ với casing as đó multiplier.

Cách Bing xử lý case-khác các URL

Bing behaves differently, và honesty về sourcing matters ở đây: có không dedicated Bing tài liệu trang on URL case sensitivity comparable để Google STD 66 callout, so Đây là dựa trên quản trị viên web các báo cáo và Microsoft community threads, không formal spec.

Điều gì những điều đó các báo cáo consistently mô tả: Bingbot tends để normalize toward lowercase — crawling và lập chỉ mục lowercase version của URL nó discovers, và Bing Quản trị viên web Tools có là observed auto-lowercasing các URL được gửi trong sitemaps. Quản trị viên web có raised cả hai behaviors on Microsoft Community Hub. So Bing xuất hiện để làm nhiều hơn của case-collapsing cho bạn hơn Google strict distinct-URL treatment làm.

Caveat: này là Bing practical behavior theo quản trị viên web các báo cáo và community threads, không an chính thức policy statement. I’m không going để invent một Bing spokesperson quote — none tồn tại cho này cụ thể topic. Treat điều này as “behaves differently, less formally documented,” (bản dịch) «behaves differently, ít hơn formally được ghi lại,» và verify so với của bạn own Bing Quản trị viên web Tools dữ liệu nếu điều này matters để bạn.

Either way, khắc phục là giống nhau. Standardizing on lowercase satisfies Google distinct-URL model aligns với whatever Bing là normalizing toward — bạn không optimize cho một engine behavior tại expense của khác.

robots.txt case trap

điều này deserves của nó own section vì nó khác kind của thất bại từ duplicate nội dung. Duplicate nội dung splits các tín hiệu; hỏng robots.txt rule là access-control thất bại — path bạn meant để giữ bots out của nhận được crawl anyway.

Đó rule, straight từ Google robots.txt spec: đó directive name là case-insensitive, nhưng của nó giá trị là case-sensitive. “The field name (disallow) is case-insensitive, but its value is case-sensitive.” (bản dịch) «Đó trường name ( ) là case-insensitive, nhưng của nó giá trị là case-sensitive.» Và: “The path value must start with / to designate the root and the value is case-sensitive.” (bản dịch) «Đó path giá trị phải bắt đầu với để designate đó root và đó giá trị là case-sensitive.» Google own ví dụ spells điều này out — một rule cho /fish “Matches any path that starts with /fish. Note that the matching is case-sensitive.” (bản dịch) «Matches bất kỳ path đó bắt đầu với . Note đó matching là case-sensitive.»

So Disallow, disallow, và DISALLOW all hoạt động identically — đó directive name casing là irrelevant. Nhưng đó path giá trị là khớp chính xác. Mueller confirmed đó practical implication trực tiếp: “The robots.txt file also uses exact URLs, so if you have entries there which refer to one version of a URL they would not apply to other versions.” (bản dịch) «Đó robots.txt file cũng dùng chính xác URLs, so nếu bạn có entries ở đó mà refer để một version of một URL they sẽ không apply để other versions.»

Hai concrete ways điều này bites — thứ hai là nhiều hơn dangerous:

Ví dụ 1 — kinh điển. của bạn robots.txt có:

User-agent: *
Disallow: /Private/

đó chặn /Private/. nó làm không có gì cho /private/. nếu bất cứ điều gì on của bạn trang web links để lowercase version, nó fully crawlable despite của bạn rule.

Ví dụ 2 — post-migration mismatch. bạn replatform, và new CMS generates cart và admin paths trong lowercase. của bạn old robots.txt, copied over verbatim, vẫn nói:

Disallow: /Checkout/
Disallow: /Admin/

trực tiếp các URL là hiện tại /checkout//admin/. disallows silently miss them, và thin, không-giá trị (hoặc sensitive) paths nhận được crawl và có thể end lên được lập chỉ mục. Đây là chính xác scenario migration nhóm walk vào, vì robots.txt gần như không bao giờ nhận audited so với thực tế casing của new các URL.

(Để là clear, này rarely gây ra catastrophic các vấn đề trong thực tế — Mueller có đã nói case mismatches trong robots.txt là rare để see nguyên nhân real các vấn đề. Nhưng “rare and silent” (bản dịch) «rare và silent» là precisely đó kind of bug đó sits unnoticed cho months, so đây là worth một five-minute kiểm tra.)

khắc phục cho trap là giống nhau discipline as mọi nơi khác: ghi của bạn robots.txt rules trong casing của bạn các URL thực ra sử dụng, và enforce single casing so có chỉ một version để block.

Sửa case-duplicate các URL

tiêu chuẩn kỹ thuật-SEO remediation hierarchy, phần lớn để least được ưu tiên:

1. Ngăn variants tại nguồn

best khắc phục là không bao giờ generating mixed-case các URL trong đầu tiên place — Đây là CMS/URL-generation-layer concern, và nó varies by nền tảng (verify hiện tại behavior on của bạn own stack thay vì trusting blanket claim):

  • Shopify lowercases sản phẩm và collection xử lý tự động, so native các URL là largely safe — nhưng app-generated hoặc legacy-imported các URL có thể vẫn introduce case variants.
  • WordPress permalinks là lowercase by convention, nhưng custom post types, tags, và manually entered slugs có thể introduce mixed case; Yoast và RankMath không natively force-lowercase các URL.
  • Enterprise, custom, và Java/.NET-được hỗ trợ các nền tảng là phần lớn exposed — casing thường falls out của routing framework và hosting OS với không deliberate policy, especially on Windows/IIS stacks nơi không có gì forces vấn đề locally.

2. máy chủ-cấp độ lowercase chuyển hướng ( definitive khắc phục)

301 để canonical lowercase URL là hard khắc phục — nó consolidates các tín hiệu gửi người dùng/bots để một address. implementation differs by máy chủ (đầy đủ sao chép và dán config là trong Scripts tab):

  • Apache có native lowercasing tool — RewriteMap với int:tolower — so bạn có thể convert đểàn bộ path để lowercase trong rewrite rule.
  • Nginxkhông được xây dựng-trong string-lowercasing function, so nó genuinely nhiều hơn involved hơn Apache’s một-liner: bạn either sử dụng njs/Lua module để lowercase URI, hoặc xây dựng rõ ràng map lookup đó catches uppercase characters. không let anyone tell bạn nó như-cho-như map một-liner — nó không phải.
  • IIS dùng URL Rewrite module với rule condition và {ToLower:...} function. Since IIS phục vụ mỗi casing theo mặc định, Đây là nơi enforcement matters phần lớn.

không ship blanket sitewide rule blind. Lowercase là right convention cho new paths, nhưng mixed-case-để-lowercase chuyển hướng không phải tự động safe on existing trang web — inventory của bạn thực tế case variants đầu tiên (crawl export, access nhật ký, sitemap, liên kết nội bộ), và cụ thể kiểm tra cho paths nơi case là legitimate và load-bearing: uploaded filenames, generated tokens, bất cứ điều gì CMS hoặc app produced với intentional mixed case. xác nhận mỗi route thực ra trả về tương đương nội dung trong cả hai casings trước khi bạn fold nó vào rule, roll chuyển hướng out trong bounded way thay vì flipping mỗi path tại sau khi, và watch lỗi rates và GSC trang lập chỉ mục báo cáo afterward — có không có bảo đảm lowercase cleanup recovers lost thứ hạng hoặc crawl coverage, chỉ đó nó dừng tín hiệu-splitting going forward.

3. rel=canonical as fallback

Khi bạn không thể touch máy chủ config — shared hosting, một nền tảng đó sẽ không let bạn thêm rewrite rules, hoặc một case nơi legitimate case-variant URLs phải stay trực tiếp — một rel=canonical pointing mỗi variant tại đó lowercase version là đó safety net. đây là một hint, không một directive, và weaker hơn một 301 — nhưng far tốt hơn không có gì. Mueller khuyến nghị: “Using internal linking to link to a consistent version makes your preference clear. Adding a link rel=” (bản dịch) «Dùng liên kết nội bộ để link để một consistent version làm của bạn preference clear. Thêm một link rel=\»canonical” element also helps to confirm that.” (bản dịch) «element cũng helps để xác nhận đó.»

đó đã nói, canonical chỉ hoạt động sau khi bạn’ve confirmed variants thực ra phục vụ duplicate nội dung. nếu case variant trả về genuinely khác nội dung, hoặc lỗi, rel=canonical element có thể’t hợp nhất nó — hint có thể’t consolidate hai khác các tài nguyên vào một. Verify phản hồi trước khi bạn point canonical tại nó, không sau khi.

4. giữ liên kết nội bộ và sitemaps consistent

Whatever casing bạn chọn, của bạn own links có để agree với nó. mỗi liên kết nội bộ, navigation entry, và sitemap URL nên sử dụng canonical (lowercase) version. perfect chuyển hướng rule undermined by menus đó vẫn link để /Products/ chỉ làm bots follow chuyển hướng hops họ đã không cần để.

Cách tìm case-duplicate các URL trên trang web củ bạn

Three complementary các phương thức — GSC hiển thị Điều gì Google thực ra đã làm; các crawler let bạn catch variants trước khi họ become lập chỉ mục vấn đề:

  • Google Search Console → Trang lập chỉ mục báo cáo. Tìm “Duplicate without user-selected canonical” (bản dịch) «Duplicate không có người dùng-được chọn canonical»“Duplicate, Google chose different canonical than user” (bản dịch) «Duplicate, Google chose khác nhau canonical hơn người dùng» statuses, thì eyeball đó flagged URL pairs cho case differences. GSC sẽ không label đó nguyên nhân as “casing” — điều này các báo cáo mỗi duplicate nguyên nhân cùng cách — so bạn có để spot đó case-chỉ pairs yourself.
  • Ahrefs Site Audit. MỘT crawl surfaces near-duplicate URLs; casing differences cho thấy lên as tách biệt được crawl URLs với giống hệt hoặc near-giống hệt nội dung, worth cross-kiểm tra dưới đó duplicate-nội dung reporting.
  • Screaming Frog. Export đó đầy đủ crawl, lowercase đó URL cột, và loại/filter để spot pairs đó differ chỉ trong case. Bạn có thể cũng kiểm thử cụ thể known paths trong cả hai casings để xác nhận máy chủ behavior — làm /Apple trả về 200, 301, hoặc 404? Đó single kiểm thử tells bạn liệu máy chủ của bạn là case-insensitive (IIS-style 200), đã enforcing lowercase (301), hoặc case-sensitive với không variant (404).

nơi điều này sits

Case sensitivity là một axis trong rộng hơn duplicate-URL vấn đề điều này cluster giữ circling — nó compounds với trailing slashes, www so với non-www, và query parameters, và nó một của khoảng 40 các tín hiệu đó feed canonicalization. URL structure hub, trailing slash và URL parameters deep dives, và canonicalization bài viết mỗi cover của họ own axis; discipline là giống hệt trên tất cả them — pick một sạch version và enforce nó với các chuyển hướng, canonicals, consistent liên kết nội bộ, và matching sitemaps.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.