Veinte documentos de cumplimiento, todos devolviendo 404 - Four Star Cargo
Publicado
Un sitio web no falla de golpe. Falla una decisión sin dueño a la vez, y las fallas quedan invisibles porque las páginas siguen mostrándose. Cada hallazgo aquí era accesible desde el sitio público por cualquiera con un navegador.
Los documentos de términos de servicio devuelven 404
El formulario de registro en /Register/Register.aspx presenta una casilla obligatoria que dice "He leído y acepto los términos de servicio", enlazando los términos de carga aérea y marítima. Ambos destinos se solicitaron directamente. Ambos devolvieron HTTP 404 Not Found.
Cada cuenta abierta desde que los archivos desaparecieron se abrió contra términos que el cliente no podía leer, y el registro muestra que la casilla fue marcada. En una disputa la empresa dependería de un acuerdo que no puede presentar. La casilla es obligatoria, así que nadie pudo rechazar términos no disponibles, y nada en la interfaz avisa al personal de que el enlace está muerto.
La reparación es un archivo; la prevención es una verificación. Trate un documento legal como una dependencia del despliegue, no como contenido. Agregue a la compilación una verificación que solicite cada URL referenciada desde un control de consentimiento y falle el despliegue ante cualquier respuesta distinta de 200, como una importación faltante falla una compilación. Versione los documentos y mantenga accesibles las versiones anteriores, porque el acuerdo que importa en una disputa es el vigente en la fecha de registro, no el de hoy. El antipatrón es tratar esos PDF como recursos que se pueden mover o renombrar en un rediseño: los enlaces de consentimiento se rompen en silencio y ninguna parte de la interfaz lo reporta.
La biblioteca de formularios devuelve 404 en los 20 documentos
Los 20 documentos listados en la página de formularios devuelven HTTP 404. Cada enlace se solicitó individualmente. La página se muestra con normalidad; la falla solo es observable al solicitarla.
La lista incluye cumplimiento de materiales peligrosos, guía de baterías de litio y formularios EEI. Un embarcador que necesita uno lo necesita para mover carga ese día, y la página le dice que existe. Llama en su lugar, cargando al personal que la página debía aliviar, o usa una copia encontrada en otro sitio, que es como entra papelería de cumplimiento desactualizada en un embarque. Como la página se muestra, nadie internamente ve un problema hasta que un cliente lo reporta.
Veinte documentos necesitan vigilancia, no un arreglo puntual. Todo lo que un cliente descarga recibe una verificación de disponibilidad programada, no solo en el despliegue. Una tarea semanal que solicite cada documento y reporte respuestas distintas de 200 son unas pocas líneas y detecta esto la semana en que ocurre en lugar del año en que alguien lo nota. Sirva los documentos desde una ruta que un rediseño no toque, y devuelva 410 en lugar de 404 para lo retirado deliberadamente, para que la diferencia entre eliminado y roto siga siendo visible para su propio monitoreo. El antipatrón es una lista de enlaces mantenida a mano, que se degrada en silencio porque nada la verifica contra lo que realmente está en disco.
Las preguntas frecuentes referencian documentos por HTTP sin cifrar
La página de preguntas frecuentes dirige a los lectores a documentos específicos. Esas referencias pertenecen al conjunto no disponible y están escritas como http:// en lugar de https, lo que los navegadores actuales marcan o bloquean como contenido mixto.
El enlace falla dos veces: el navegador objeta el protocolo y el archivo tampoco está. Las advertencias de contenido mixto cuestan confianza de forma desproporcionada, porque el navegador las presenta como un problema de seguridad del sitio y no como un enlace roto, y un cliente de carga que ingresa datos de un envío lee esa advertencia en el peor momento posible.
Ambas mitades de esto se resuelven a nivel de infraestructura y no enlace por enlace. Sirva solo HTTPS, redirija el puerto 80 de forma permanente y publique HSTS una vez comprobada la redirección, para que el protocolo deje de ser una decisión por enlace. Después escriba las referencias internas como rutas relativas a la raíz en lugar de URL absolutas: /forms/x.pdf no puede llevar el esquema equivocado, no se rompe si cambia el dominio y funciona igual en pruebas. Una búsqueda de http:// en el contenido publicado encuentra el resto en una sola pasada. El antipatrón es codificar URL absolutas http:// en el contenido editorial, donde sobreviven a cada migración porque ningún framework las reescribe.
Contexto: certificados SSL.
Dos créditos de desarrollador describen alcances de mantenimiento distintos
El sitio lleva dos créditos de desarrollador. Las páginas generadas por WordPress muestran "Website by Universe Systems LLC". Las páginas generadas por ASP.NET muestran "Website Design, Development & Platform Management by Universe of Systems". El segundo atribuye gestión continua de la plataforma y no solo la construcción original.
Dos créditos que describen alcances distintos, sin ninguna parte visiblemente responsable, es la condición bajo la cual se acumula el resto de esta lista. Los hallazgos no aparecen porque alguien cometió un error; aparecen porque nadie responde por si siguen siendo ciertos. El dominio propio de la firma acreditada resuelve en DNS pero no respondió en los puertos 80 ni 443 durante las pruebas, con una página de estacionamiento en cada captura desde el 11 de febrero de 2025. Esto se registra como constancia: un sitio propio postergado es común entre firmas de tecnología y no permite inferir nada sobre su capacidad de entrega.
La atribución no es responsabilidad, y la diferencia se escribe o no existe. Escriba el alcance del mantenimiento y hágalo medible: quién es responsable, de qué propiedades, con qué frecuencia se verifica y qué reporta. Un crédito en un pie de página es atribución, no un contrato, y ambos se confunden de forma rutinaria. Reduzca la superficie antes de comprar más horas, porque consolidar elimina trabajo de forma permanente mientras que las horas solo lo programan. El antipatrón es el contrato de permanencia sin verificaciones definidas: factura de forma continua mientras nada comprueba que el sitio siga haciendo lo que hacía el año pasado.
Evaluación de la causa. La evidencia es consistente con capacidad de mantenimiento limitada, no con trabajo defectuoso. El conjunto son cuatro dominios, dos servidores web, tres frameworks de construcción de páginas, una instalación de WordPress sobre PHP 8.1, que dejó de recibir soporte de seguridad el 31 de diciembre de 2025, y una aplicación ASP.NET Web Forms independiente con cuentas de clientes activas. Enlaces a documentos sin reemplazar, una capa heredada sin mantenimiento y validación ausente en un formulario son el aspecto de una superficie de mantenimiento mayor que las horas disponibles. Cualquier proveedor hereda la misma aritmética.
Contexto: dominio, hosting y sitio web.
La evaluación de Core Web Vitals falló en móvil y escritorio
Core Web Vitals se evalúa con datos de campo agregados de usuarios de Chrome en una ventana móvil de 28 días y es un insumo del posicionamiento en búsqueda. La evaluación falló en ambos formatos. El Largest Contentful Paint midió 5.3 s en móvil y 4.6 s en escritorio contra un objetivo de 2.5 s.
Estos son datos de campo, no una medición de laboratorio, así que reflejan lo que los visitantes realmente experimentaron y no un número discutible. También es un insumo del posicionamiento, lo que se acumula: el sitio aparece más abajo, recibe menos visitantes, y quienes llegan esperan cinco segundos. A esa duración una parte considerable nunca ve la página, y la pérdida es invisible en la analítica porque un visitante que se va antes de que la página se muestre a menudo no queda registrado.
El número se mueve cuando se mueve su causa, así que empiece donde apunta la medición. Mida datos de campo antes de tocar nada, porque las mediciones de laboratorio y los usuarios reales se contradicen constantemente. Después trabaje en el orden que la medición señala: primero el tiempo de servidor, luego los recursos que bloquean el renderizado, luego el peso de las imágenes. Fije un presupuesto de rendimiento en la compilación y falle ante regresiones, porque una evaluación aprobada siempre está a un complemento de volver a fallar. El antipatrón es optimizar imágenes en un sitio cuyo servidor tarda tres segundos en responder, que es esfuerzo puesto donde la medición no está.
Contexto: diseño de sitio web.
Todas las páginas muestreadas superaron el objetivo de respuesta del servidor
Para determinar si los datos de campo reflejaban una sola página lenta, se siguió cada enlace interno de la portada y se registró el tiempo hasta el primer byte. Las diez páginas devolvieron HTTP 200 y las diez superaron el objetivo de 0.8 s. La portada midió 3.00 s.
El tiempo hasta el primer byte es tiempo de servidor, gastado antes de que un solo byte de la página llegue al navegador. Tres segundos se pierden antes de que pueda empezar cualquier trabajo de frontend, lo que impone un techo al resultado de Core Web Vitals que ninguna optimización de imágenes o scripts puede levantar. Diez páginas de diez también descartan una sola plantilla lenta: esto es la plataforma, no una página.
Diez páginas de diez es un resultado de plataforma, y se diagnostica como tal. Muestree todas las páginas y no solo la portada, porque la portada suele ser la única que alguien perfiló. Ponga una caché delante de todo lo que se genera por solicitud; una página informativa que cambia una vez al mes no tiene razón para armarse desde una base de datos en cada visita. Mejor aún, genérela una vez en la compilación y sirva un archivo. El antipatrón es diagnosticar el rendimiento desde una sola URL, que es como un problema de toda la plataforma queda registrado como una portada lenta.
Tres arquitecturas tecnológicas operan bajo un mismo dominio
Servidor web: Microsoft IIS 10.0, un servidor no estándar para WordPress, que está pensado para Linux y Apache. Sitio público: WordPress con Divi, con 916 referencias a Divi en el documento de la portada, principal responsable de los tiempos de respuesta medidos. Registro: ASP.NET Web Forms 4.0.30319.
Tres arquitecturas significan tres ritmos de actualización, tres conjuntos de avisos de seguridad y tres formas de romperse, mantenidos por quien esté disponible. También significa que nadie puede razonar sobre el sistema completo, así que los cambios se hacen localmente y sus consecuencias aparecen en otro lado. Las 916 referencias del constructor de páginas no son un problema de estilo: ese marcado se procesa y se ejecuta en cada solicitud, y es la causa medida de una portada que tarda 3.00 s en devolver su primer byte.
Esta es una decisión de arquitectura, lo que significa que es reversible. Ajuste la tecnología a lo que la página realmente hace. Un sitio informativo son documentos, así que constrúyalo como documentos: marcado escrito a mano o un generador estático, generado una vez y servido como archivos, sin base de datos ni constructor de páginas en la ruta de la solicitud. Conserve la aplicación que de verdad necesita ser una aplicación y déle su propio nombre de host, para que su plataforma, sus actualizaciones y sus incidentes sean separables del sitio de marketing. El antipatrón es instalar un constructor de páginas para evitar escribir marcado y después pagarlo en cada solicitud para siempre.
Contexto: sitios estáticos frente a un CMS.
La capa de aplicación heredada no tiene mantenimiento y está indexada
Endpoint de ejemplo: /ConsentToScreenEmail.aspx, indexado por Google bajo el título "About Four Star Cargo Inc.". La página que se muestra es un formulario de consentimiento de presentación E.E.I. Indica al lector copiar "el texto azul de abajo" en un correo; no existe tal texto. El asunto indicado está vacío.
Los buscadores la indexan, así que los clientes llegan directamente sin ver nunca el sitio actual. Después siguen instrucciones que hacen referencia a contenido que no está en la página. Web Forms nunca se llevó a .NET Core ni a .NET 5 en adelante, así que esta capa no tiene una ruta de actualización que no sea una reescritura, y contiene cuentas de clientes activas accesibles desde internet y listado en resultados de búsqueda bajo un título que sugiere que es una página institucional.
Una capa sin mantenimiento es un problema de alcance antes que de seguridad. Inventaríe lo que realmente es accesible antes de decidir nada, porque una capa sin mantenimiento suele ser mayor de lo que alguien recuerda. Después trate cada endpoint de una de tres formas: repararlo, migrarlo a la plataforma con soporte, o eliminarlo y devolver 410. Google indica que trata 410 y 404 igual, así que el valor está en documentar la intención para su propio monitoreo y no en el código de estado en sí. Todo lo que quede sobre una plataforma sin soporte necesita una fecha de migración en el calendario. El antipatrón es dejar una aplicación heredada indexada y accesible porque nadie sabe con certeza quién la usa todavía: esa incertidumbre se responde con los registros del servidor en una tarde.
La calculadora de cotizaciones cotiza envíos imposibles
La calculadora de la página de cotizaciones no valida la entrada. Peso -100 lb, dimensiones -15 x -18 x -82 pulgadas. La entrada fue aceptada y resumida como "-100 lbs (-133 lbs dimensional)". Un segundo caso, cero piezas a cero libras, devolvió una cotización de $8.32.
Esta es la función comercial principal del sitio y su llamada a la acción más prominente. Un motor que devuelve un número para una entrada que no puede existir no da razón para confiar en los números que devuelve para entradas que sí pueden. Una cotización también es una declaración comercial: una cifra que un cliente puede capturar y exigir a la empresa, producida aquí por una aritmética que nadie verificó.
Una cifra que un cliente puede exigirle necesita el rigor de un pago. Valide en el servidor, siempre, y trate la validación del navegador como una comodidad y no como un control, porque lo que solo se aplica en el navegador puede saltárselo cualquiera que abra las herramientas de desarrollo. Restrinja cada campo a un rango físicamente posible, rechace en lugar de corregir, y devuelva un error sobre el que el cliente pueda actuar en lugar de un número. Cuando un cálculo produce un compromiso comercial, cúbralo con pruebas de valores límite: cero, negativo y absurdamente grande. El antipatrón es validar solo en JavaScript y confiar en lo que llegue al endpoint.
El control de conversión principal no lleva a ninguna parte
El control "Free Quote" de la barra superior fija tiene un atributo href vacío. Los navegadores resuelven un href vacío al documento actual, así que el control recarga la página. Confirmado en la portada y en /about/; es marcado de plantilla y se comporta igual en todo el sitio.
Es la llamada a la acción más prominente de cada página del sitio, y nunca ha funcionado. El modo de falla además es el peor posible: la página se recarga, así que el visitante no puede saber si hizo mal clic o si el sitio está roto, y muchos lo intentarán dos veces antes de irse. Cada visitante que quería una cotización y usó este control se perdió, en cada página, durante todo el tiempo que la plantilla lleva publicada.
Un atributo causó esto, y una verificación evita el siguiente. Nunca publique un enlace con href vacío; si un control todavía no tiene destino es un botón, y un botón sin controlador debe mostrarse deshabilitado. Agregue una verificación de compilación que falle ante valores de href vacíos o de marcador de posición, porque esta clase de defecto es invisible en una revisión y evidente en el código. Después cubra la ruta de conversión con una prueba de extremo a extremo que haga clic en el control y compruebe el destino, ya que este es el único control cuya falla cuesta ingresos directamente.
Defectos de representación y una fuente de iconos que no carga
La imagen bajo el encabezado de la portada se muestra con una discontinuidad vertical a través del gráfico. Los estados de hover de los botones emiten glifos sueltos de flecha y altavoz, lo que indica una fuente de iconos que no carga. Las páginas faltantes devuelven la plantilla "No Results Found" por defecto, sin navegación de vuelta a los servicios.
Individualmente triviales, en conjunto son una señal. Un embarcador que compara tres agentes de carga lee esto como el cuidado con que trabaja la empresa, y la carga es un negocio que se compra por confiabilidad. La plantilla 404 es la costosa: deja varado a un visitante que ya buscaba algo específico, sin ruta hacia adelante, lo que convierte un enlace roto en una consulta perdida.
Dos de estos son cosméticos y uno pierde consultas, así que empiece por la 404. Déle a la página 404 el mismo cuidado que a una página de destino: diga con claridad que la página ya no está, ofrezca búsqueda y enlace los servicios principales. Aloje las fuentes de iconos usted mismo o incruste los iconos como SVG, para que una caída de un tercero no deje glifos sueltos por toda la interfaz, y declare siempre una alternativa para que una fuente que falla se degrade a nada visible en lugar de al carácter equivocado. El antipatrón es publicar la 404 por defecto del framework, que está escrita para servir a todos los sitios y por eso no ayuda en ninguno.
El diseño móvil se superpone y se desplaza lateralmente
A 412 px en /barrel-2/, una página de servicio enlazada desde la portada, el logotipo y el encabezado se superponen 19 px medidos, y el ancho del documento es de 432 px contra una ventana de 412 px, produciendo desplazamiento horizontal.
El desplazamiento horizontal en un teléfono es la señal más clara disponible de que un sitio nunca se abrió en uno. Afecta a una página de servicio enlazada directamente desde la portada, así que está en una ruta que los visitantes realmente recorren, y el móvil es donde empieza la mayoría de las consultas de carga. El texto superpuesto además hace el encabezado parcialmente ilegible, lo que es una falla de contenido y no cosmética.
El ancho que falló es el ancho al que llega la mayoría de los visitantes. Pruebe las páginas de servicio a 390 y 412 px, no la portada, porque la portada suele ser la única que se revisó. El desbordamiento horizontal tiene pocas causas que conviene revisar en orden: un ancho fijo, una tabla ancha, una cadena larga sin cortes, o un margen negativo. Compruébelo en la compilación comparando el ancho de desplazamiento del documento contra el de la ventana en dos anchos, lo que detecta la regresión en lugar de que la note una persona. El antipatrón es tratar el móvil como una revisión final de un diseño de escritorio en lugar del ancho al que llega la mayoría de los visitantes.
Guía de cumplimiento publicada como una entrada de blog fechada
El enlace de materiales peligrosos resuelve a una entrada fechada el 13 de mayo de 2020, atribuida a "admin", con contador de comentarios y barra lateral de blog. La misma barra expone una entrada publicada titulada "x", fechada el 1 de enero de 2020.
La guía de materiales peligrosos es contenido de cumplimiento, y presentarla como una noticia de hace seis años con un autor llamado admin hace que se lea como obsoleta lo sea o no. Un embarcador no puede saber por la página si la guía está vigente, que es lo único que el contenido de cumplimiento tiene que comunicar. La entrada de prueba a su lado le dice a cada visitante que nadie revisa lo que se publica.
El contenido de cumplimiento y las noticias tienen obligaciones distintas, así que necesitan lugares distintos. Separe el contenido de referencia de las noticias. La guía de cumplimiento va en una página versionada con fecha de vigencia y fecha de última revisión, sin firma de autor, sin contador de comentarios y sin elementos de blog, porque cada uno de esos elementos indica que el contenido es una opinión de un momento y no una regla vigente. Fije un intervalo de revisión y regístrelo en la página. El antipatrón es usar el blog como herramienta general de publicación porque es lo más fácil del CMS para agregar una página.
Un dominio asociado es una copia espejo de un servidor de pruebas
Firma de copiador de sitios en el código fuente: presente, 4 ocurrencias. Referencias al servidor de pruebas en código de producción: 12 referencias. Encabezados de seguridad: ninguno presente. El sitio en producción hace llamadas AJAX y REST a staging.safe.sx.
Un sitio en producción que llama a un servidor de pruebas depende de una máquina que nadie prometió mantener en marcha, y los servidores de pruebas se apagan de forma rutinaria porque para eso existen. Cuando desaparece, la producción se rompe de formas que nadie previó, porque nadie sabía que la dependencia existía. La ausencia de encabezados de seguridad en la misma propiedad la deja sin las defensas que un navegador aplica gratis si se le pide.
Un sitio copiado hereda su origen, y por eso esto no se puede parchear. Reconstruya en lugar de copiar. Un sitio duplicado con una herramienta de copiado hereda cada URL absoluta con la que fue construido, y esas URL apuntan a donde corría el original. Use rutas relativas para que un entorno no pueda quedar incrustado en el resultado, y agregue una verificación de despliegue que falle ante cualquier referencia a un nombre de host de pruebas. Configure los encabezados de seguridad al mismo tiempo, ya que Content-Security-Policy, X-Content-Type-Options y una política de marcos son configuración y no desarrollo. El antipatrón es usar un copiador de sitios como estrategia de migración: produce algo que se muestra y que depende de una máquina que está a punto de dar de baja.
Un dominio sin www rechaza HTTPS, y una dependencia sin fijar
https://www.atsmia.com resuelve correctamente mientras https://atsmia.com es rechazado en la capa de transporte, dejando el dominio sin www inaccesible por HTTPS. El sitio carga una librería de iconos desde una CDN de terceros fijada en "latest". Un cuarto dominio, complete.cw, no respondió en los puertos 443, 80, 8080 ni 22; todas las conexiones expiraron tras 15 s, mientras los hosts de control conectaron en menos de 0.3 s.
La mayoría de la gente escribe el dominio sin www, así que la forma que falla es la que usan más visitantes, y la falla está en la capa de transporte, lo que significa que ninguna redirección puede rescatarla. Una dependencia fijada en "latest" significa que un cambio ajeno surte efecto en su sitio sin que nadie lo revise, lo que es una exposición de cadena de suministro tanto como de estabilidad. El cuarto dominio inaccesible está enlazado desde el sitio y descrito en su propio texto, así que se está enviando a un visitante a un lugar que no responde.
Dos problemas distintos en una misma propiedad, cada uno con una respuesta establecida. Emita el certificado para el dominio raíz y para el host www, sirva ambos, y redirija uno al otro de forma permanente para que exista una sola forma canónica. Fije cada dependencia de terceros a una versión exacta que usted eligió y actualícela de forma deliberada, o alójela usted mismo, lo que elimina al tercero de la ruta de la solicitud por completo. Revise todo el conjunto y no solo el sitio principal, porque los dominios asociados son exactamente donde nadie está mirando. El antipatrón es probar solo la forma con www, que funciona mientras la dirección que escribe la mayoría de los visitantes no.
Contexto: direcciones IP y DNS.
Lo que ya estaba correcto
El correo fue la parte que resistió. SPF publica un solo proveedor con alcance definido, fallo estricto y sin mecanismos obsoletos; DMARC está publicado con direcciones de reporte configuradas; y el dominio principal tiene un certificado válido con el dominio raíz redirigiendo a HTTPS. El rastreo de envíos funciona. Nada de eso necesitaba tocarse, y por eso la remediación es menor de lo que sugiere la cantidad de hallazgos.
En resumen
Una página que se muestra se ve idéntica a una página que funciona. Aquí nada verificaba la diferencia, y por eso quince hallazgos fueron ciertos durante años antes de que alguien mirara.